mysql5.7主从复制及mycat1.6读写分离
本文档介绍如何在三台服务器利用docker搭建mysql5.7三机主从复制及mycat1.6实现数据库读写分离。
序言
本文档介绍如何在三台服务器利用docker搭建mysql5.7三机主从复制及mycat1.6实现数据库读写分离。
环境需求
Docker
三台服务器 Centos 7 ,服务器名称使用IP地址末尾代替,分别为182,181,180.
唯一要求
1 | ulimit -n 根据实际进行设置 |
Docker
docker的安装方式请参照官方地址:https://docs.docker.com/install/linux/docker-ce/centos/
其他系统请选择合适的方式安装。
MySQL主从搭建
本方案的设计是1台主节点182,2台从节点181、180
182下的mysql.cnf
[mysqld]
#唯一id,如果开启主从功能则每台MySQL节点不能相同
server-id = 1
#开启mysql-log-bin功能
log-bin=mysql-bin
180下的mysql.cnf
[mysqld]
#唯一id,如果开启主从功能则每台MySQL节点不能相同
server-id = 2
#开启mysql-log-bin功能
log-bin=mysql-bin
181下的mysql.cnf
[mysqld]
#唯一id,如果开启主从功能则每台MySQL节点不能相同
server-id = 3
#开启mysql-log-bin功能
log-bin=mysql-bin
MySQL主节点
1 |
|
简单介绍
-d:后台运行;
--restart=always:允许跟随docker服务启动而启动;
--name mysql5.7master:docker容器名称,从节点宿主机同理;
-v /etc/localtime:/etc/localtime:将服务器宿主机的时间挂载到容器中,实现时区同步;
-e MYSQL_ROOT_PASSWORD=’密码’:MySQL服务root用户密码,修改你想要的密码即可;
-p 3309:3306:将宿主机的3309端口映射到容器的3306端口,即MySQL服务端口号,以便于外部访问;
-v /data/mysql5.7master/backupdir:/var/lib/backupdir:其目录中存放的是将要进行数据库还原的.sql文件,从节点宿主机同理;
-v /data/mysql5.7master/datadir:/var/lib/mysql:MySQL服务的根目录,从节点宿主机同理;
-v /data/mysql5.7master/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:指定MySQL服务的配置文件,从节点宿主机同理;
mysql:5.7:MySQL官方5.7 docker镜像。
MySQL从节点
1 |
|
进入Docker容器命令
1 |
|
使用MySQL镜像客户端命令直接进入MySQL控制台
1 |
|
建立主从复制账户replicate
相当于给从节点建立一个MySQL服务账户,使其有权限可以进行数据拉取。所以仅需在主节点182执行如下SQL即可。
# 连接MySQL控制台
1 | docker run -it --link mysql5.7master:mysql --rm mysql:5.7 sh -c 'exec mysql -h"\$MYSQL_PORT_3306_TCP_ADDR" -P"\$MYSQL_PORT_3306_TCP_PORT" -uroot -p"\$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' |
SQL如下:
1 |
|
查看主节点mysql状态,将其master_log_file、master_log_pos记录下来提供给从节点进行主从建立。
SQL如下:
1 |
|
从节点开启主从复制功能
SQL如下:
1 |
|
简单介绍
stop slave;:停止从功能;
change master to
master_host=’10.10.10.235’,
master_port=3309,
master_password=’123456abc’,
master_user=’replicate’,
master_log_file=’mysql-bin.000003’,
master_log_pos=749;
master_host=’10.10.10.235’:MySQL主节点所在服务器IP地址,此处因为我的是三台物理服务器,此处即写的是宿主机的IP地址,如果是只有一台宿主机,可以写docker网络中的主节点IP地址;
master_port=3309:MySQL主节点所在服务器映射MySQL容器的端口号,如果是同一台宿主机,此处可以写容器中MySQL服务的3306端口;
master_password=’123456abc’,master_user=’replicate’:主从复制账户名和密码;
master_log_file=’mysql-bin.000003’,master_log_pos=749;:在主节点使用SQL命令show master status; 获取到的主节点信息。每次主节点产生变动都会变化,所以如果主从复制发生建立失败都要重新修改两个对应的值。
stop slave;:开启从功能;
show slave status\G;:查看是否建立主从复制成功,确保出现两个YES
然后就可以建立新数据库,查看是否同步
SQL如下:
1 |
|
数据库名称使用横杠要加上``号
主从复制即搭建完成
Mycat1.6读写分离
1 |
|
简单介绍
-d:后台运行;
--restart=always:允许跟随docker服务启动而启动;
--name mycat1.6:docker容器名称;
-v /etc/localtime:/etc/localtime:将服务器宿主机的时间挂载到容器中,实现时区同步;
-v /data/mycat1.6/schema.xml:/usr/local/mycat/conf/schema.xml:编写MySQL数据库的连接信息,对应的逻辑数据库指向MySQL的真实数据库;
-v /data/mycat1.6/server.xml:/usr/local/mycat/conf/server.xml:mycat逻辑数据库名称以对应MySQL中的真实数据库,mycat管理员账户和密码;
-v /data/mycat1.6/rule.xml:/usr/local/mycat/conf/rule.xml:mycat读写分离规则;
-p 3306:8066:mycat提供数据库功能的管理端口,在连接数据库客户端看来,这个就是数据库端口;
-p 9066:9066:mycat管理自身的数据库功能端口;
mycat:1.6.6.1:mycat镜像名称,注意,官方提供了Dockerfile进行制作镜像,具体的Dockerfile如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat > Dockerfile << EOF
FROM openjdk:8-jdk-stretch
ENV JAVA_OPTS="-Xmx2048m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1536m -Xss2m"
ENV CATALINA_OPTS="-Djava.awt.headless=true"
ADD http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz /usr/local
RUN cd /usr/local && tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz && ls -lna
VOLUME /usr/local/mycat/conf
VOLUME /usr/local/mycat/logs
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console"]
EOF
读写分离即安装完成
结尾语
如果需要MySQL服务的mysql.cnf和mycat的schema.xml、server.xml和rule.xml的具体配置请按照主页的联系方式进行沟通。