使用 Docker 建立 MySQL 集群

官方说明是实验性质,生产环境应用还请自行斟酌

没事干,突然想到 MySQL 集群,上网搜了一下看看想搭一个玩一下。

不过人在公司,刚好昨晚 autossh 还没弄好。。所以就直接用了最偷懒的方式搭建了。这里用傻瓜化的步骤来记录一下我搭集群的步骤,这里贴出官方的做法结合理解吧。

首先说一下结构,mysql 集群主要由三个部分协作形成,分别是一个 manager 节点,多个子节点,以及一个用于访问的门面节点,manager 节点对应 ndb_mgmd ,子节点对应 ndbd,门面节点就是常规的 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 给子节点以及 mysql 门面用。主要内容是使用集群模式并设定 manager 节点 IP

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

[mysql_cluster]
ndb-connectstring=172.18.1.100  

mysql-cluster.cnf 给 manager 节点和子节点用的,主要内容是配置节点数量,使用内存大小以及各个子节点的 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

准备好这两个文件之后,接下来操作 docker,里面的文件路径请根据自己的实际情况作修改。

官方建议是创建一个私有子网络给集群内部使用,然后再开始创建节点,我偷懒我就写个 bash 算了 XD

#!/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;

# 创建 4 个子节点
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。。。

#!/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 密码就好了。

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

然后登陆

docker exec -it mysql1 mysql -uroot -p

改密码、增加远程账户,然后就可以在外部链接到集群了。

你可能感兴趣的:(使用 Docker 建立 MySQL 集群)