这几天使用Docker搭建了一套分布式的环境,包括redis集群、zookeeper集群、mysql主从等等,想把里面的一些关键步骤记录一下,留着以后看。其实如果基础镜像是CentOS,那么搭建过程与非Docker环境也基本一致,所以Docker本身相关的内容就不再赘述。
Redis集群搭建(centos 6.10)
搭建Redis集群的话至少得有9台节点,主要方式就是使用redis-trib.rb
的create方法进行节点创建,因此首先必须得安装ruby和gem环境,安装ruby时可能会产生版本过低的问题,解决方法详见:《搭建Redis集群引发的Ruby版本问题的解决》 这篇文章。
搭建Redis集群步骤如下:
- 在服务器上安装ruby和gem(只在执行创建集群命令的那台节点上安装即可,其余节点不必安装)
- 将修改redis.conf配置文件中的集群开关打开
- 执行
./src/redis-trib.rb create --replicas 2 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 172.17.0.8:6379 172.17.0.9:6379 172.17.0.10:6379
创建集群
Zookeeper集群搭建(centos 6.10)
Zookeeper集群搭建至少需要3台节点,步骤如下:
- 在每个zookeeper根目录下创建data文件夹和log文件夹
- 在每个data文件夹下创建myid文件,里面只写入一个序号,例如:1,注意每个zk节点的这个序号都不能相同
- 修改conf/zoo.cfg配置文件,指向第1步和第2步做的改动
注意,这里server.x中的1,2,3指的就是第2步中myid文件中的序号,对应相应的zk节点 - 修改完毕之后重启服务即可,可使用
sh zkServer.sh status
命令查看主从关系
MySQL主从搭建(debian:stretch-slim)
如果是正常在centos下安装mysql的话,那么mysql的配置文件会在/etc/my.cnf
中,但是在debian的docker镜像里,配置文件的位置有一些变化,mysqld的配置文件会在/etc/mysql/mysql.conf.d/mysqld.cnf
这个路径下,具体配置倒是没什么区别。
我这里使用的是3台mysql节点,一主两从,搭建步骤如下:
- 在mysqld.cnf文件中添加
server-id
、log-bin
、relay_log
三个属性(log-bin和relay_log可以按需选择配置,后面会说到)
- 重启mysql服务
- 在主机中使用
show master status;
命令查看主机当前的二进制文件名(对应下文master_log_file
)及数据偏移量(对应下文master_log_pos
)
- 在所有从机中执行主从挂载命令,即可完成主从配置,挂载命令如下:
change master to master_host=“192.168.116.130”,
master_port=3306,
master_user=“root”,
master_password=“enter”,
master_log_file=“mysql-bin.000001”, //主机中的二进制文件名
master_log_pos=154; //主机中的二进制文件读取偏移量
- 在从机中执行
start slave
即可开启主从复制,可以通过show slave staus;
命令查看从机状态,如果出现了下图显示的两个Yes即为搭建成功,已经开始了正常的主从复制。
注意: 在第1步中配置的log-bin
、relay_log
这两个属性,如果只做主机的话那么配置log-bin
即可,从机会自动读取主机中的该文件,将其复制到自己的中继日志中,再读取中继日志完成主从复制;如果是只做从机的话,配置relay-log
即可,从机从中继日志中读取日志完成主从复制。之所以两个属性都写,是考虑到做高可用时,将来从机可能会变为主机。
最后附一张MySQL的主从复制原理图:(图源:《MySQL之——主从复制的配置》)