1.導入鏡像
[root@db01 ~]
[root@db02 ~]
2.啓動容器
不與weave混部可以適用橋接模式:
與weave混部適用host模式:
3.修改配置
[root@db01 ~]
server-id = 101
log-bin = mysql-bin
max_connections = 1000
gtid_mode = on
enforce_gtid_consistency = 1
auto_increment_offset = 1
auto_increment_increment = 2
[root@db02 ~]
server-id = 102
log-bin = mysql-bin
max_connections = 1000
gtid_mode = on
enforce_gtid_consistency = 1
auto_increment_offset = 2
auto_increment_increment = 2
[root@db01 ~]
[root@db02 ~]
4.重啓容器
docker restart db01 & db02
5.創建複製賬號
連接db01:
mysql> grant replication slave on *.* to 'rep'@'%' identified by '123456';
連接db02:
# mysql -h127.0.0.1 -P 3302 -p123456
mysql> grant replication slave on *.* to 'rep'@'%' identified by '123456';
6.創建主主複製
連接db01:
# mysql -h127.0.0.1 -P 3301 -p123456
mysql> change master to master_host='db02 IP',master_port=3306,master_user='rep',master_password='123456',MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G
連接db02:
# mysql -h127.0.0.1 -P 3302 -p123456
mysql> change master to master_host='db01 IP',master_port=3306,master_user='rep',master_password='123456',MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G
7.檢查狀態
Slave_IO_Running和Slave_SQL_Running 兩個值都爲YES,說明覆制狀態正常
Seconds_Behind_Master 爲0,說明沒有同步延遲
1)安裝keepalived並將其配置成系統服務。master1和master2兩臺機器上同樣進行如下操作:
yum install -y openssl-devel keepalived
[root@host2 ~]
global_defs {
router_id db01
}
定義腳本名稱,以及腳本所在的路徑
vrrp_script chk_mysql_port {
script "/opt/chk_mysql.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
mcast_src_ip 10.0.0.12
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
chk_mysql_port
}
}
編寫切換腳本,KeepAlived做心跳檢測,如果db01的MySQL服務掛了(3306端口掛了),那麼它就會選擇自殺。Slave的KeepAlived通過心跳檢測發現這個情況,就會將VIP的請求接管
[root@host2 ~]
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
fi
[root@host2 ~]
===========================================================================================================================================================================
db02配置keepalived
[root@host4 ~]
global_defs {
router_id db02
}
vrrp_script chk_mysql_port {
script "/opt/chk_mysql.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 10.0.0.14
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
chk_mysql_port
}
}
[root@host4 ~]
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
fi
chmod +x /opt/chk_mysql.sh
[root@host4 ~]
[root@host2 ~]
inet 10.0.0.3/32 scope global eth0
停止db01機器上的mysql服務,根據配置中的腳本,mysql服務停了,keepalived也會停,從而vip資源將會切換到master2機器上。(mysql服務沒有起來的時候,keepalived服務也無法順利啓動!)
PS:一定要先啓動mysql服務,然後再啓動keepalived服務。如果先啓動keepalived服務,按照上面的配置,mysql沒有起來,就會自動關閉keepalived。
腳本後續可優化,此腳本稍微有點Low