官方說明是實驗性質(zhì),生產(chǎn)環(huán)境應(yīng)用還請自行斟酌
沒事干寝凌,突然想到 MySQL 集群,上網(wǎng)搜了一下看看想搭一個玩一下贪磺。
不過人在公司硫兰,剛好昨晚 autossh 還沒弄好。寒锚。所以就直接用了最偷懶的方式搭建了。這里用傻瓜化的步驟來記錄一下我搭集群的步驟违孝,這里貼出官方的做法結(jié)合理解吧刹前。
首先說一下結(jié)構(gòu),mysql 集群主要由三個部分協(xié)作形成雌桑,分別是一個 manager 節(jié)點喇喉,多個子節(jié)點,以及一個用于訪問的門面節(jié)點校坑,manager 節(jié)點對應(yīng) ndb_mgmd
拣技,子節(jié)點對應(yīng) ndbd
,門面節(jié)點就是常規(guī)的 mysqld
耍目。
我建議首先配置好集群的配置文件膏斤,配置文件主要有兩個
cattenlinger@cattenlinger-Office:/opt/mysql_cluster_docker$ ls -al
total 16
drwxr-xr-x 2 root root 4096 Apr 26 11:39 .
drwxr-xr-x 3 root root 4096 Apr 26 10:51 ..
-rw-r--r-- 1 root root 838 Apr 26 11:38 my.cnf
-rw-r--r-- 1 root root 1146 Apr 26 11:38 mysql-cluster.cnf
my.cnf
給子節(jié)點以及 mysql 門面用。主要內(nèi)容是使用集群模式并設(shè)定 manager 節(jié)點 IP
[mysqld]
ndbcluster
ndb-connectstring=172.18.1.100
user=mysql
[mysql_cluster]
ndb-connectstring=172.18.1.100
mysql-cluster.cnf
給 manager 節(jié)點和子節(jié)點用的邪驮,主要內(nèi)容是配置節(jié)點數(shù)量莫辨,使用內(nèi)存大小以及各個子節(jié)點的 IP 配置,包括 mysqld毅访。
[ndbd default]
NoOfReplicas=4
DataMemory=128M
IndexMemory=32M
[ndb_mgmd]
NodeId=1
hostname=172.18.1.100
datadir=/var/lib/mysql
[ndbd]
NodeId=2
hostname=172.18.1.101
datadir=/var/lib/mysql
[ndbd]
NodeId=3
hostname=172.18.1.102
datadir=/var/lib/mysql
[ndbd]
NodeId=4
hostname=172.18.1.103
datadir=/var/lib/mysql
[ndbd]
NodeId=5
hostname=172.18.1.104
datadir=/var/lib/mysql
[mysqld]
NodeId=6
hostname=172.18.1.199
準(zhǔn)備好這兩個文件之后沮榜,接下來操作 docker,里面的文件路徑請根據(jù)自己的實際情況作修改喻粹。
官方建議是創(chuàng)建一個私有子網(wǎng)絡(luò)給集群內(nèi)部使用蟆融,然后再開始創(chuàng)建節(jié)點,我偷懶我就寫個 bash 算了 XD
#!/bin/bash
# 創(chuàng)建私有網(wǎng)絡(luò)守呜,上面提到的
docker network create mysql-cluster --subnet=172.18.1.0/24;
# 創(chuàng)建管理節(jié)點
docker create \
--net=mysql-cluster \
--name=mysql-mngr-0 \
--ip=172.18.1.100 \
-v /opt/mysql_cluster_docker/mysql-cluster.cnf:/etc/mysql-cluster.cnf \
mysql/mysql-cluster ndb_mgmd;
# 創(chuàng)建 4 個子節(jié)點
for i in 1 2 3 4; do
docker create \
--net=mysql-cluster \
--name=mysql-node-$i \
--ip=172.18.1.10$i \
-v /opt/mysql_cluster_docker/mysql-cluster.cnf:/etc/mysql-cluster.cnf \
-v /opt/mysql_cluster_docker/my.cnf:/etc/my.cnf \
mysql/mysql-cluster ndbd;
done;
# 創(chuàng)建門面節(jié)點
docker create \
--net=mysql-cluster \
--name=mysql-facade \
--ip=172.18.1.199 \
-p 3307:3306 \
-v /opt/mysql_cluster_docker/my.cnf:/etc/my.cnf \
-e MYSQL_RANDOM_ROOT_PASSWORD=true \
mysql/mysql-cluster mysqld;
然后就可以開始啟動了型酥,啟動是有順序的,先啟動管理節(jié)點弛饭,然后啟動子節(jié)點冕末,再啟動門面節(jié)點。(繼續(xù)是 bash侣颂。档桃。。
#!/bin/bash
# 啟動管理節(jié)點
docker start mysql-mngr-0;
# 啟動各個子節(jié)點
for i in 1 2 3 4; do
docker start mysql-node-$i;
done
# 啟動門面節(jié)點
docker start mysql-facade;
大概等兩分鐘憔晒,你就會看到成功啟動了藻肄,現(xiàn)在通過門面節(jié)點的 log 獲取隨機生成的 root 密碼就好了蔑舞。
docker logs mysql-facade 2>&1 | grep PASSWORD
然后登陸
docker exec -it mysql1 mysql -uroot -p
改密碼、增加遠程賬戶嘹屯,然后就可以在外部鏈接到集群了攻询。