官方说明是实验性质,生产环境应用还请自行斟酌
没事干,突然想到 MySQL 集群,上网搜了一下看看想搭一个玩一下。
不过人在公司,刚好昨晚 autossh 还没弄好。。所以就直接用了最偷懒的方式搭建了。这里用傻瓜化的步骤来记录一下我搭集群的步骤,这里贴出官方的做法结合理解吧。
首先说一下结构,mysql 集群主要由三个部分协作形成,分别是一个 manager 节点,多个子节点,以及一个用于访问的门面节点,manager 节点对应 ndb_mgmd
,子节点对应 ndbd
,门面节点就是常规的 mysqld
。
我建议首先配置好集群的配置文件,配置文件主要有两个
1 2 3 4 5 6
| 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
给子节点以及 mysql 门面用。主要内容是使用集群模式并设定 manager 节点 IP
1 2 3 4 5 6 7
| [mysqld] ndbcluster ndb-connectstring=172.18.1.100 user=mysql
[mysql_cluster] ndb-connectstring=172.18.1.100
|
mysql-cluster.cnf
给 manager 节点和子节点用的,主要内容是配置节点数量,使用内存大小以及各个子节点的 IP 配置,包括 mysqld。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| [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
|
准备好这两个文件之后,接下来操作 docker,里面的文件路径请根据自己的实际情况作修改。
官方建议是创建一个私有子网络给集群内部使用,然后再开始创建节点,我偷懒我就写个 bash 算了 XD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #!/bin/bash
docker network create mysql-cluster --subnet=172.18.1.0/24;
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;
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;
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;
|
然后就可以开始启动了,启动是有顺序的,先启动管理节点,然后启动子节点,再启动门面节点。(继续是 bash。。。
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
docker start mysql-mngr-0;
for i in 1 2 3 4; do docker start mysql-node-$i; done
docker start mysql-facade;
|
大概等两分钟,你就会看到成功启动了,现在通过门面节点的 log 获取随机生成的 root 密码就好了。
1
| docker logs mysql-facade 2>&1 | grep PASSWORD
|
然后登陆
1
| docker exec -it mysql1 mysql -uroot -p
|
改密码、增加远程账户,然后就可以在外部链接到集群了。