时间:2021-07-01 10:21:17 帮助过:6人阅读

如上图,DB1和DB2互为主从,这样就保证了两台Mysql服务器的数据始终是同步的,同时在DB1和DB2上还需要安装高可用软件keepalived。在正常情况下,Web服务器主机仅从DB1进行数据的读写操作,DB2主负责从DB1同步数据。而Keepalived维护一个VIP,此IP用来对外部提供链接服务。同时,keepalived还负责监控DB1和DB2上Mysql数据库的运行状态。当DB1主机出现故障或者Mysql运行异常时,自动将VIP地址和Mysql服务切换到DB2上,此时Web服务器主机继续从DB2进行数据的读写操作。通过Keepalived保持了数据库服务的连续性,整个切换过程非常快,并且对前端Web服务器主机是透明的
(略)
参考《企业级web集群——keepalived》
安装软件
wget https://www.keepalived.org/software/keepalived-2.0.1.tar.gz
?
[root@bogon keepalived-2.0.1]# tar -xf keepalived-2.0.1.tar.gz -C /usr/local/src/
[root@bogon keepalived-2.0.1]# mkdir -p /data/keepalived
[root@bogon keepalived-2.0.1]# yum install openssl-devel gcc gcc-c++ make
[root@bogon keepalived-2.0.1]# ./configure --prefix=/data/keepalived/
make 
make install
配置规范启动
[root@bogon etc]# pwd
/usr/local/src/keepalived-2.0.1/keepalived/etc
[root@bogon etc]# cp -R init /data/keepalived/ 
[root@bogon etc]# cp -R init /data/keepalived/etc/ 
[root@bogon etc]# cp -R init.d /data/keepalived/etc/
[root@bogon etc]# ll /data/keepalived/etc/
总用量 0
drwxr-xr-x. 2 root root  86 4月  20 12:03 init
drwxr-xr-x. 2 root root 135 4月  20 12:03 init.d
drwxr-xr-x. 3 root root  44 4月  20 11:00 keepalived
drwxr-xr-x. 2 root root  24 4月  20 11:00 sysconfig
[root@bogon etc]# cp /data/keepalived/etc/init.d/keepalived /etc/init.d/
[root@bogon etc]# cp /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@bogon etc]# mkdir /etc/keepalived
[root@bogon etc]# cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@bogon etc]# cp /data/keepalived/sbin/keepalived /usr/sbin/
启动
[root@bogon etc]# /etc/init.d/keepalived start
Starting keepalived (via systemctl):                       [  确定  ]
[root@bogon etc]# ps -ef |grep keepalived
root     14858     1  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -D
root     14859 14858  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -D
root     14860 14858  0 12:07 ?        00:00:00 /data/keepalived/sbin/keepalived -D
root     14875  1702  0 12:09 pts/1    00:00:00 grep --color=auto keepalived
在ser01上:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
?
global_defs {
    notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id HA_MYSQL01
}
?
vrrp_script check_mysqld {
    script "/etc/keepalived/check_mysqld.sh"
    interval 2
}
?
vrrp_instance HA_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.42.201
    }
?
    track_script {
       check_mysqld
    }
}
在ser02上:
! Configuration File for keepalived
?
global_defs {
    notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id HA_MYSQL01
}
?
vrrp_script check_mysqld {
    script "/etc/keepalived/check_mysqld.sh"
    interval 2
}
?
vrrp_instance HA_1 {
    state BACKUP  
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.42.201
    }
?
    track_script {
        check_mysqld
    }
}
监控脚本:
[root@localhost ~]# cat /etc/keepalived/check_mysqld.sh 
按照以上的配置,虽然能够完成故障的切换,但是在数据库的应用场景中,我们不建议数据库的频繁切换,因此,我们可将其配置为keepalived的VIP不抢占模式。具体配置如下:
在ser01上:
[root@localhost keepalived]# cat keepalived.conf
! Configuration File for keepalived
?
global_defs {
    notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id HA_MYSQL01
}
?
vrrp_script check_mysqld {
    script "/etc/keepalived/check_mysqld.sh"
    interval 2
}
?
vrrp_instance HA_1 {
    state BACKUP      #在ser01和ser02上均配置为backup
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    nopreempt   #不抢占模式,只在优先级高的机器上设置即可,优先级低的机器上不设置。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
?
    virtual_ipaddress {
        192.168.42.201
    }
?
    track_script {
        check_mysqld
    }
}
在ser02上:
[root@localhost keepalived]# cat keepalived.conf 
! Configuration File for keepalived
?
global_defs {
    notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id HA_MYSQL01
}
?
vrrp_script check_mysqld {
    script "/etc/keepalived/check_mysqld.sh"
    interval 2
}
?
vrrp_instance HA_1 {
    state BACKUP      #在ser01和ser02上均配置为backup
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.42.201
    }
?
    track_script {
        check_mysqld
    }
}
在优先级比较高的节点上配置成非抢占模式,使得我们故障切换后,保持在原节点上,这种场景在mysql数据库高可用方案中非常实用。
mysql> create user ‘keepalived‘@‘%‘ identified by ‘Cloudbu@123‘;
mysql> ALTER USER ‘keepalived‘@‘%‘ IDENTIFIED WITH mysql_native_password BY ‘Cloudbu@123‘;
mysql> flush privileges;
在测试节点上用192.168.42.201,即浮动ip测试。
 mysql -h192.168.42.201 -ukeepalived -pCloudbu@123
当我们ser01失败后,ser02能够实现数据的读写;
当ser01恢复后,能够实现数据同步,vip并没有漂移到ser01,而是保持在ser02上;
当ser02故障后,VIP自然漂移到了ser01上。
keepalived实现mysql双主架构
标签:contain 参考 规范 instance tps usr nss tor sql数据库