mysql主从ha_基于docker搭建mysql主从+haproxy负载均衡

使用容器对于部署来说省了不少事情,容器也有利于自己做各种分布式的架构实验。这里说一下使用docker搭建mysql主从以及通过haproxy做从库的负载均衡。

一、mysql主从

主节点

1、创建用户,授权create user 'repl'@'172.22.16.%' identified by 'repl';

grant replication slave on *.* to 'repl'@'172.22.16.%' identified by 'repl';

2、开启bin-log日志

查看bin-log日志是否开启show variables like 'log_bin';

配置my.conf文件server-id=1

log-bin=/var/lib/mysql/mysql-bin

server-id每个节点不能相同,log-bin配置日志位置

从节点   1、配置同步日志

配置my.conf文件server-id=2

relay-log=/var/lib/mysql/relay-bin

relay-log-index=/var/lib/mysql/repl-bin.index

relay-log指定同步日志位置,relay-log-index指定同步索引日志位置

指定主节点

1、查看主节点状态show master statusCHANGE MASTER TO MASTER_HOST='172.22.16.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=107;

其中MASTER_LOG_FILE,MASTER_LOG_POS是上一部查询出来的结果

2、查看从节点状态show slave status\G;

如果发现从节点配置没有成功,可以重启从节点mysql服务,重启slavestop slave;

start slave;

再调用CHANGE MASTER命令

旧数据迁移

1、导出主节点数据FLUSH TABLES WITH READ LOCK;

mysqldump -h172.22.16.2 -u root -p123456 --opt -R test > test.sql

UNLOCK TABLES;

2、建立从节点数据

如果没有数据库,建立数据库,然后倒入数据mysql -h172.22.16.3 -u root -p123456 test < test.sql

3、重新绑定主节点SLAVE STOP;

RESET SLAVE;

CHANGE MASTER TO MASTER_HOST='172.22.16.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=330;

start slave;

4、查看从节点状态show slave status\G;

如果从节点没有设置成功,参考之前的处理方式

二、在docker中运行mysql

从官方库拉取mysql镜像docker pull mysql:5.5修改官方镜像

1、启动基于官方镜像的容器docker run -p 3306:3306 镜像名

2、进入docker容器docker exec -it 容器id

3、修改自己的配置

4、提交容器生成新的镜像docker commit 容器id 镜像名

创建基于网桥的自定义网络docker network create --driver bridge --subnet 172.22.16.0/16 --gateway 172.22.16.1 my_net   subnet为子网,gateway为网关

启动基于修改过的镜像的容器docker run -p 3306:3306 --name mysql-node1 -it --network=自定义网络名 --ip 自定义网络ip -v /usr/local/mysql/node1/logs:/logs -v /usr/local/mysql/node1/config/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/node1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --privileged=true 镜像名

注意:需要挂载日志文件,配置文件和数据文件

三、haproxy负载均衡

创建统一的mysql用户名密码,权限

主节点执行如下命令,自动会在从节点执行同样的命令create user 'admin'@'172.22.16.%' identified by 'nmamtfnmamtf';

grant all on *.* to 'admin'@'172.22.16.%';配置haproxy

创建haproxy.conf文件global

daemon #后台方式运行

nbproc 1

pidfile /usr/local/haproxy/conf/haproxy.pid

defaults

mode tcp  #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK

retries 2  #两次连接失败就认为是服务器不可用,也可以通过后面设置

option redispatch  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器

option abortonclose  #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接

maxconn 4096   #默认的最大连接数

timeout connect 5000ms  #连接超时

timeout client 30000ms  #客户端超时

timeout server 30000ms  #服务器超时

#timeout check 2000     #=心跳检测超时

log 127.0.0.1 local0 err #[err warning info debug]

########test1配置#################

listen test1  #这里是配置负载均衡,test1是名字,可以任意

bind 0.0.0.0:33060   #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避免端口冲突

mode tcp   #连接的协议,这里是tcp协议

#maxconn 4086

#log 127.0.0.1 local0 debug

server s1 172.22.16.3:3306 #负载的机器

server s2 172.22.16.4:3306 #负载的机器,负载的机器可以有多个,往下排列即可

四、在docker中运行haproxy

从官方拉取haproxy镜像docker pull haproxy:1.7启动基于官方镜像的容器docker run -p 33060:33060 --name haproxy -e LANG=en_US.UTF-8 --network=自定义网络名 --ip 自定义网络ip -v /usr/local/haproxy/conf/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg 镜像名

需要挂载配置文件

基于容器搭建mysql主从+haproxy负载均衡基本就这些内容了。只不过在生产环境是容器间通信,需要进行额外的处理。这里是同宿主机中的容器通信,只需要用默认的网桥模式,或者自定义基于网桥的网络即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值