- mysql 双主复制: - 实现和MHA(高可用架构)相同的效果。
 - 使用keepalived实现先双主热备,防止单点故障的主从结构。
 - 两台mysql互做主从,各自安装keepalived实现热备,其他从服务器和热备的虚拟IP建立主从连接
 
- mysql双主复制是一种数据库复制架构,允许在两个mysqld服务器之间进行双向数据同步,这种复制架构可以提高数据的可用性,和可靠性,同时允许在两个服务器上进行读写操作。
- 实验前提环境: - 首先开启两台mysql,互做主从
 - db1:192.168.8.5
 - db2:192.168.8.6
 - db3:192.168.8.12
 
- 实验步骤: - 修改每台数据库的/etc/my.cnf文件,开启binlog日志和gtid日志
 - db1: - cat > /etc/my.cnf <<EOF
 - [mysqld]
 - basedir=/usr/local/mysql/
 - datadir=/usr/local/mysql/data
 - socket=/tmp/mysql.sock
 - server_id=1
 - port=3306
 - secure-file-priv=/tmp
 - autocommit=1
 - log_bin=mysql-bin
 - binlog_format=row
 - gtid-mode=on
 - enforce-gtid-consistency=true
 - log-slave-updates=1
 - [mysql]
 - prompt=db01>
 - EOF
 
 - db2: - cat > /etc/my.cnf <<EOF
 - [mysqld]
 - basedir=/usr/local/mysql
 - datadir=/usr/local/mysql/data
 - socket=/tmp/mysql.sock
 - server_id=2
 - port=3306
 - secure-file-priv=/tmp
 - autocommit=1
 - log_bin=mysql-bin
 - binlog_format=row
 - gtid-mode=on
 - enforce-gtid-consistency=true
 - log-slave-updates=1
 - [mysql]
 - prompt=db02>
 - EOF
 
 - db3: - cat > /etc/my.cnf <<EOF
 - [mysqld]
 - basedir=/usr/local/mysql
 - datadir=/usr/local/mysql/data
 - socket=/tmp/mysql.sock
 - server_id=3
 - port=3306
 - secure-file-priv=/tmp
 - autocommit=1
 - log_bin=mysql-bin
 - binlog_format=row
 - gtid-mode=on
 - enforce-gtid-consistency=true
 - log-slave-updates=1
 - [mysql]
 - prompt=db03>
 - EOF
 
 - 启动三台数据库:systemctl restart mysqld
 - db1上面创建一个复制用户: - grant replication slave on *.* to repl@'192.168.8.%' identified by '123456';
 
 - db2与db1建立主从关系: - change master to
 - master_host='192.168.8.5',
 - master_user='repl',
 - master_port=3306,
 - master_password='123456' ,
 - MASTER_AUTO_POSITION=1;
 - start slave;
 
 - db1与db2再建立主从关系: - change master to
 - master_host='192.168.8.6',
 - master_user='repl',
 - master_port=3306,
 - master_password='123456' ,
 - MASTER_AUTO_POSITION=1;
 - start slave;
 
 - 查看slave 状态:show slave status \G
 
-   - 两台主从搭建好之后,再在db1和db2上面安装leepalived: - yum -y install keepalived
 - 配置db1的keepalived配置文件: - vim /etc/keepalived/keepalived.conf - 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
 
- vim /etc/keepalived/keepalived.conf 
 - 配置db2的keepalived配置文件: - vim /etc/keepalived/keepalived.conf - 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
 
- vim /etc/keepalived/keepalived.conf 
 - 查看db1服务器上是否出现了虚拟IP:ip a show dev ens33
 
 
- 两台主从搭建好之后,再在db1和db2上面安装leepalived: 
-   - 高可用搭建好之后,我们使用db3再与虚拟IP建立主从关系: - 先试用ping测试一下 db3是否可以与虚拟IP建立通信
 - 如果ping 不同的话,则将db1的keepalived关闭 切换到db2,再开启db1,切换回来,这样将虚拟ip激活一下
 
 - 登录db3,与虚拟ip建立主从关系: - change master to
 - master_host='192.168.8.254',
 - master_user='repl',
 - master_port=3306,
 - master_password='123456' ,
 - MASTER_AUTO_POSITION=1;
 - start slave;
 
 - 查看主从关系:show slave status \G
 
- 高可用搭建好之后,我们使用db3再与虚拟IP建立主从关系: 
- 至此我们双主复制则搭建完毕: - 最终实现效果:db1和db2写入数据都可以同步到另外两台服务器 - 假如db1宕机了,漂移地址会自动转移到db2上面,在db2上面写入数据,还是可以同步到db3上
 
 
- 最终实现效果:db1和db2写入数据都可以同步到另外两台服务器