双主复制(实现和MHA相同的效果)
使用keepalive实现双主热备,防止单点故障的主从结构。
两台mysql互做主从,各自安装keepalive实现热备,其他从服务器和热备的虚拟IP(vip)建立主从连接。
实验环境
都已安装MySQL5.7
实验步骤
1、开启二进制日志和GTID
MySQL1:
vim /etc/my.cnf
修改添加:
log_bin=/data/binlog/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
创建目录并授权
mkdir -p /data/binlog
chown -R mysql.mysql /data
重启MySQL
systemctl restart mysqld
MySQL2:
vim /etc/my.cnf
修改添加:
log_bin=/data/binlog/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
创建目录并授权
mkdir -p /data/binlog
chown -R mysql.mysql /data
重启MySQL
systemctl restart mysqld
MySQL3:
vim /etc/my.cnf
修改添加:
log_bin=/data/binlog/mysql-bin
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1
创建目录并授权
mkdir -p /data/binlog
chown -R mysql.mysql /data
重启MySQL
systemctl restart mysqld
2、MySQL1库创建主从复制用户(MySQL1)
grant replication slave on *.* to repl@'192.168.8.%' identified by '123';
3、MySQL1和MySQL2互相连接开启从服务,建立主从关系
MySQL2:
change master to
MASTER_HOST='192.168.8.5',
MASTER_USER='repl',
MASTER_PORT=3306,
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1;
start slave;
show slave status\G
MySQL1:
change master to
MASTER_HOST='192.168.8.6',
MASTER_USER='repl',
MASTER_PORT=3306,
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1;
start slave;
show slave status\G
4、安装keepalived(MySQL1、MySQL2)
yum -y install keepalived
5、配置keepalived,并启动
MySQL1:
vim /etc/keepalived/keepalived.conf
删除多余内容修改:
! Configuration File for keepalived
global_defs {
router_id MYSQL1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.8.254
}
}
virtual_server 192.168.8.254 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.8.5 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
启动keepalived
systemctl start keepalived
MySQL2:
vim /etc/keepalived/keepalived.conf
删除多余内容修改:
! Configuration File for keepalived
global_defs {
router_id MYSQL2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.8.254
}
}
virtual_server 192.168.8.254 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.8.6 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
启动keepalived
systemctl start keepalived
6、查看虚拟IP
MySQL1:
ip add show dev ens33
MySQL2:
ip add show dev ens33
MySQL1有虚拟IP
7、创建MySQL登录用户(MySQL1)
grant all on *.* to lkk@'192.168.8.%' identified by '123.com';
测试:
MySQL1:
mysql -ulkk -p123.com -h192.168.8.254 -P3306
create database aa;
MySQL2:
mysql -uroot -p123.com
show databases;
8、使用MySQL3与虚拟IP建立主从关系(MySQL3)
change master to
MASTER_HOST='192.168.8.254',
MASTER_USER='repl',
MASTER_PORT=3306,
MASTER_PASSWORD='123',
MASTER_AUTO_POSITION=1;
start slave;
show slave status\G
注:如果IO线程一直显示Connecting,MySQL3服务器无法建立主从;关闭漂移IP所在服务器的keepalived,再次启动keepalived。