MySQL主从复制(6)双主复制

TangLu MySQL 2021-03-15 15042 0

一、双主复制介绍

双主复制是一种特殊的MySQL主从复制架构,两个数据库服务器既是主库(Master)又是从库(Slave)。每个服务器都可以接受写入操作,并将这些更改复制到另一个服务器,当一个节点发生故障时,应用也可以切换到另一个节点继续提供服务。但是双主架构下会有很大概率出现数据冲突的问题,所以这种方案基本都不会再使用了。如果真有不得已的场景需要这样用,业务层面需要确定每个节点写入的数据是不冲突的,比如DB1的写入都在MasterA完成、DB2的写入都在Master2完成。


二、双主复制配置

1、主节点A配置

· 主库A配置文件相关参数

vi /etc/my.cnf
log-slave-updates = 1  #由于可能发生身份切换,所以打开该选项,作为从库也会记录binlog
replicate_same_server_id = 0  #避免循环写入问题
auto_increment_increment=2  #自增主键步长,通常有几个主库就写几,避免主键冲突
auto_increment_offset=1  #设置自增主键起始值,第一个主库为1,第二个主库为2,以此类推

· 主库A为主库B授权

mysql > grant replication slave on *.* to 'repl'@'192.168.1.102' identified by '123456';


2、主节点B配置

· 主库B配置文件相关参数

vi /etc/my.cnf
log-slave-updates = 1
replicate_same_server_id = 0
auto_increment_increment=2
auto_increment_offset=2  #主键起始值,这里应该是2了

· 主库B为主库A授权

mysql > grant replication slave on *.* to 'repl'@'192.168.1.101' identified by '123456';  #102为另外一台主的地址


3、主库A配置主从,位置信息要在主库B服务运行后show master status查看

mysql > change master to master_host='192.168.1.102',master_user='repl',master_password='123456',master_log_file='master-bin.000002',master_log_pos=604,master_port=3306


4、主库B配置主从,位置信息要在主库A服务运行后show master status查看

mysql > change master to master_host='192.168.1.101',master_user='repl',master_password='123456',master_log_file='master-bin.000002',master_log_pos=604,master_port=3306


5、两台机器启动从服务,如果配置成功的话在任意一台写入数据都可以同步到另一台机器

mysql > start slave


二、Keepalived配置

1、在两台数据库服务器上编译安装Keepalived

./configure --prefix=/usr/local/keepalived
make
meke install


2、创建Keepalived配置文件

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

vi /etc/keepalived/keepalived.conf
global_defs {
 # 全局设置,主要是主备切换时发送邮件通知,可以直接注释
 # notification_email {
 #   acassen@firewall.loc
 # }
 # notification_email_from Alexandre.Cassen@firewall.loc
 # smtp_server 192.168.145.1
 # smtp_connect_timeout 30
 # router_id LVS_DEVEL
 # vrrp_skip_check_adv_addr
 # vrrp_strict
 # vrrp_garp_interval 0
 # vrrp_gna_interval 0
}

vrrp_instance mysql {  #实例名称随便取
   state MASTER  #标记该节点是master还是backup,但并不起实际作用,为了防止脑裂抢占IP可以都设置为backup
   interface eth0  #配置VIP绑定的网卡,这里使用和外网通信的网卡
   virtual_router_id 51  #取1-255之间的值,主备需要相同,这样才能成为一个组
   priority 100  #权重,数值高的主机是master,这是影响主备的关键
   nopreempt  #非抢占模式,需要设置state为backup
   advert_int 1  #主备之间通讯的间隔秒数,用于判断主节点是否存活
   authentication {
       auth_type PASS  #进行安全认证的方式,PASS或者AH方式,推荐PASS
       auth_pass 1111  #PASS的密码
   }
   virtual_ipaddress {
       192.168.145.200  #VIP地址,最多可以写20个,keepalive启动后会自动配置该处VIP
   }
   virtual_server 192.168.145.200 {  #访问VIP所转发到的后端节点配置
       delay_loop 6
       protocol TCP
       lb_algo rr
      lb_kind DR
       real_server 192.168.145.101 3306{  #后端节点1
         weight 1        }
       
      real_server 192.168.145.102 3306{  #后端节点2
         weight 1       }
  }
}


3、启动Keepalived后观察VIP是否绑定成功即可

评论