使用docker搭建MySQL双主备 + keepalived
使用docker搭建MySQL双主备 + keepalived一、MySQL配置双主备修改my.cnf配置之后,启动启动mysqlMySQL1配置MySQL2配置二、安装keepalived1、MySQL1安装keepalived2、MySQL2安装keepalivedCentOS7下配置防火墙放过Keepalived关闭Centos7 关闭SELINUX一级目录一级目录二级目录三级目录一、MyS
使用docker搭建MySQL双主备 + keepalived
一、MySQL配置双主备
双主备,其实就是做两个机器的互相主从,既是Master又是Slave,如下图所示:
VMware准备两台linux虚拟机
虚拟机名称 | IP |
---|---|
Master | 192.168.111.104 |
Slave | 192.168.111.105 |
虚拟IP | 192.168.111.106 |
使用docker分别在两台虚拟机上安装MySQL,安装步骤参考 使用docker安装mysql
mysql安装好之后,修改mysql的配置my.cnf
首先修改Master服务器上的my.cn配置
找到docker挂载在磁盘的mysql配置文件my.cnf文件
Master服务器上的my.cnf配置文件,在里面的[mysqld]标签下追加下面的配置内容
log-bin=mysql-bin
binlog_format=mixed
server-id=1
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
auto_increment_increment=2
auto_increment_offset=1
slave-skip-errors = all
Slave服务器上的my.cnf配置文件,在里面的[mysqld]标签下追加下面的配置内容
log-bin=mysql-bin
binlog_format=mixed
server-id=2
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
auto_increment_increment=2
auto_increment_offset=2
slave-skip-errors = all
配置项说明
log-bin=mysql-bin //启用二进制日志功能
binlog_format=mixed //设置binlog日志格式
server-id=1 //给服务器分配一个ID编号
relay-log=relay-bin //配置中继日志
relay-log-index=slave-relay-bin.index //配置中继日志名
auto_increment_increment=2 //设置自增字段每次递增的值
auto_increment_offset=1 //用来设定数据库中自动增长的起点
slave-skip-errors = all //忽略所有复制产生的错误
1、修改my.cnf配置之后,启动启动mysql(或者重启mysql)
如果没有启动mysql,执行以下命令
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.28
如果mysql已经正在运行的, docker重新运行mysql是my.cnf配置生效
docker restart mysql
2、Master配置为主MySQL,Slave为从MySQL
进入docker内部,登录Master的mysql
docker exec -it mysql /bin/bash
#输入账号密码登录
mysql -uroot -p123456
将Master设置成Slave的主服务器,在Master的mysql上执行
#授权root用在192.168.111.105上进行登录
grant replication slave on *.* to 'root'@'192.168.111.105' identified by '123456';
flush privileges;
查看Master的mysql当前binlog状态信息,如下图
show master status;
然后登录Slave(IP:192.168.111.105),开启Slave服务器的slave功能
docker exec -it mysql /bin/bash
#输入账号密码登录
mysql -uroot -p123456
执行以下SQL语句
#上色框框的值要对应,binlog状态信息 master_log_file 和 master_log_pos
change master to master_host='192.168.111.104', master_user='root', master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=605;
start slave;
查看Slave的mysql同步状态:
show slave status\G;
主主从同步配置完毕,查看同步状态Slave_IO和Slave_SQL是YES说明主主同步成功。
3、Slave配置为主MySQL,Master为从MySQL
进入docker内部,登录Slave的mysql
docker exec -it mysql /bin/bash
#输入账号密码登录
mysql -uroot -p123456
将Slave设置成Master的主服务器,在Slave的mysql上执行
#授权root用在192.168.111.104上进行登录
grant replication slave on *.* to 'root'@'192.168.111.104' identified by '123456';
flush privileges;
查看Slave的mysql当前binlog状态信息,如下图
show master status;
然后登录Master(IP:192.168.111.104),开启Master服务器的slave功能
docker exec -it mysql /bin/bash
#输入账号密码登录
mysql -uroot -p123456
执行以下SQL语句
#上色框框的值要对应,binlog状态信息 master_log_file 和 master_log_pos
change master to master_host='192.168.111.105', master_user='root', master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=614;
start slave;
查看Master的mysql同步状态:
show slave status\G;
可以看到Master中mysql的Master_Host=192.168.111.105, 说明MySQL1的主数据库是105服务器的Slave
二、安装keepalived
1、Master安装keepalived
安装keepalived
yum install –y kernel-devel openssl-develpopt-devel
yum install -y keepalived
修改配置:
vi /etc/keepalived/keepalived.conf
配置文件内容如下
#01的keepalived.conf配置
! Configuration File for keepalived
global_defs {
notification_email {
xXXXX2@qq.com
#报警邮件接收人的地址
}
notification_email_from XXX@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
}
vrrp_script chk_mysql_port {
#检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/tmp/mysql.sh"
#这里通过脚本监测
interval 2
#脚本执行间隔,每2s检测一次
weight -5
#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2
#检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1
#检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state MASTER
interface ens33
#指定虚拟ip的网卡接口
mcast_src_ip 192.168.111.104
#本机IP
virtual_router_id 51
#路由器标识,MASTER和BACKUP必须是一致的
priority 101
#定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.111.106
}
track_script {
chk_mysql_port
}
}
编写kill_keepalived.sh
vim /tmp/mysql.sh
mysql.sh内容如下
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" == 0 ];then
systemctl stop keepalived
fi
设置权限
chmod 755 /tmp/mysql.sh
重启keepalived
systemctl start keepalived
2、Slave安装keepalived
安装keepalived
yum install –y kernel-devel openssl-develpopt-devel
yum install -y keepalived
修改配置:
vi /etc/keepalived/keepalived.conf
配置文件内容如下 ,
#02的keepalived.conf配置
! Configuration File for keepalived
global_defs {
notification_email {
xxx@qq.com
#报警邮件接收人的地址
}
notification_email_from xxxxx@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
}
vrrp_script chk_mysql_port {
#检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/tmp/mysql.sh"
#这里通过脚本监测
interval 2
#脚本执行间隔,每2s检测一次
weight -5
#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2
#检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1
#检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
#指定虚拟ip的网卡接口
mcast_src_ip 192.168.111.105
#本机IP
virtual_router_id 51
#路由器标识,MASTER和BACKUP必须是一致的
priority 99
#定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.111.106
}
track_script {
chk_mysql_port
}
}
编写kill_keepalived.sh
vi /tmp/mysql.sh
mysql.sh内容如下
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" == 0 ];then
systemctl stop keepalived
fi
设置权限
chmod 755 /tmp/mysql.sh
重启keepalived
systemctl start keepalived
关闭SELINUX
发现关闭Master之后,虚拟IP 192.168.111.106 没有转移到Slave上
尝试一下关闭SELINUX
vi /etc/selinux/config
# 修改
SELINUX=disabled
# 重启
reboot
更多推荐
所有评论(0)