使用 Docker 建立 MySQL 集群

官方說明是實(shí)驗(yàn)性質(zhì),生產(chǎn)環(huán)境應(yīng)用還請自行斟酌

沒事干,突然想到 MySQL 集群,上網(wǎng)搜了一下看看想搭一個(gè)玩一下。

不過人在公司,剛好昨晚 autossh 還沒弄好。。所以就直接用了最偷懶的方式搭建了。這里用傻瓜化的步驟來記錄一下我搭集群的步驟,這里貼出官方的做法結(jié)合理解吧。

首先說一下結(jié)構(gòu),mysql 集群主要由三個(gè)部分協(xié)作形成,分別是一個(gè) manager 節(jié)點(diǎn),多個(gè)子節(jié)點(diǎn),以及一個(gè)用于訪問的門面節(jié)點(diǎn),manager 節(jié)點(diǎn)對應(yīng) ndb_mgmd ,子節(jié)點(diǎn)對應(yīng) ndbd,門面節(jié)點(diǎn)就是常規(guī)的 mysqld 。

我建議首先配置好集群的配置文件,配置文件主要有兩個(gè)

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é)點(diǎn)以及 mysql 門面用。主要內(nèi)容是使用集群模式并設(shè)定 manager 節(jié)點(diǎn) IP

[mysqld]
ndbcluster
ndb-connectstring=172.18.1.100
user=mysql

[mysql_cluster]
ndb-connectstring=172.18.1.100  

mysql-cluster.cnf 給 manager 節(jié)點(diǎn)和子節(jié)點(diǎn)用的,主要內(nèi)容是配置節(jié)點(diǎn)數(shù)量,使用內(nèi)存大小以及各個(gè)子節(jié)點(diǎn)的 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)備好這兩個(gè)文件之后,接下來操作 docker,里面的文件路徑請根據(jù)自己的實(shí)際情況作修改。

官方建議是創(chuàng)建一個(gè)私有子網(wǎng)絡(luò)給集群內(nèi)部使用,然后再開始創(chuàng)建節(jié)點(diǎn),我偷懶我就寫個(gè) bash 算了 XD

#!/bin/bash

# 創(chuàng)建私有網(wǎng)絡(luò),上面提到的
docker network create mysql-cluster --subnet=172.18.1.0/24;

# 創(chuàng)建管理節(jié)點(diǎn)
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 個(gè)子節(jié)點(diǎn)
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é)點(diǎn)
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;

然后就可以開始啟動(dòng)了,啟動(dòng)是有順序的,先啟動(dòng)管理節(jié)點(diǎn),然后啟動(dòng)子節(jié)點(diǎn),再啟動(dòng)門面節(jié)點(diǎn)。(繼續(xù)是 bash。。。

#!/bin/bash

# 啟動(dòng)管理節(jié)點(diǎn)
docker start mysql-mngr-0;

# 啟動(dòng)各個(gè)子節(jié)點(diǎn)
for i in 1 2 3 4; do
  docker start mysql-node-$i;
done

# 啟動(dòng)門面節(jié)點(diǎn)
docker start mysql-facade;

大概等兩分鐘,你就會(huì)看到成功啟動(dòng)了,現(xiàn)在通過門面節(jié)點(diǎn)的 log 獲取隨機(jī)生成的 root 密碼就好了。

docker logs mysql-facade 2>&1 | grep PASSWORD

然后登陸

docker exec -it mysql1 mysql -uroot -p

改密碼、增加遠(yuǎn)程賬戶,然后就可以在外部鏈接到集群了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容