博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql系列:高可用(HA)
阅读量:6916 次
发布时间:2019-06-27

本文共 4538 字,大约阅读时间需要 15 分钟。

hot3.png

一、keepalived简介

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除。其使用 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议可以通过在一个路由器组(一个VRRP组)之间共享一个虚拟IP(VIP), 即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个MASTER和多个BACKUP 。当master宕掉后, 根据VRRP的优先级来选举一个BACKUP当MASTER,及时将业务切换到其它设备,从而保持通讯的连续性和可靠性

    Mysql HA的实现原理(此处以两台为例),两台Mysql主主复制,使数据时刻保持一致,同时使用两个keepalived监听各自机器上的Mysql,当Mysql服务停掉后,执行脚本关掉keepalived服务,由另一台机器的keepalived接替。

    实现此功能需要两个步骤:

  1. 配置Mysql主主复制
  2. keepalived安装配置

    环境信息:    

    master:192.168.102.129(CentOS6.8,hostname为master)

    slave:192.168.102.130(CentOS6.8,hostname为salve)

    VIP:192.168.102.128

二、Mysql主主复制

(1)修改mysql配置文件,开启二进制文件

    master的my.cnf

[mysqld]server_id = 1  #服务id,保证两台mysql唯一,不重复即可log-bin = mysql-bin  #开启二进制日志relay-log = mysql-relay-bin  replicate-wild-ignore-table=mysql.%  #配置不需要复制的库replicate-wild-ignore-table=test.%  replicate-wild-ignore-table=information_schema.%

    slave的my.cnf

[mysqld]server_id = 2  log-bin = mysql-bin  relay-log = mysql-relay-bin  replicate-wild-ignore-table=mysql.%  replicate-wild-ignore-table=test.%  replicate-wild-ignore-table=information_schema.%

    配置完成后,重启两个mysql。

(2)配置主主复制

连接mysql,使用show master status查看master和slave两个mysql的二进制文件名称和位置

master(192.168.102.129)如下:

slave(192.168.102.130)如下:

根据上述file和position互相配置主从

master(192.168.102.129)如下:

change master to master_host='192.168.102.130', master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=472;start slave;

slave(192.168.102.130)如下:

change master to  master_host='192.168.102.129', master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=724;  start slave;

(3)测试验证是否同步

连接master,在jz.test中添加记录m1

连接salve,在jz.test中添加记录s1,结果如下

三、keepalived安装配置

(1)keepalived安装

使用yum可以直接安装yum install keepalived

网络不允许的情况下可以下载tar或rpm进行离线安装。本文使用yum直接安装,安装过程不再赘述。

(2)keepalived配置

配置keepalived.conf文件

[root ~]# vi /etc/keepalived/keepalived.conf

master配置

! Configuration File for keepalivedglobal_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 LVS_DEVEL}vrrp_instance VI_1 {    state BACKUP   #master和slave都设置为BACKUP,    interface eth0    virtual_router_id 51    priority 100  #master和slave设置不同值,启动时会将priority大的设置为master    advert_int 1    nopreempt  #设置为不抢占模式,仅master配置。当master挂掉后,slave当选为master,恢复后不再切换                     authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.102.128 #虚拟ip    }}virtual_server 192.168.102.128 3306 {    delay_loop 2  #轮训real_server时间间隔,此处设为2秒    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 192.168.102.129 3306 {        weight 1	notify_down /usr/local/mysql/checkMysql.sh #mysql挂掉时执行的脚本,需具备执行权限        TCP_CHECK {  	    connect_timeout 10	    bingto 192.168.102.128              nb_get_retry 3              delay_before_retry 3              connect_port 3306          }    }}

slave配置

! Configuration File for keepalivedglobal_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 LVS_DEVEL}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 51    priority 90    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.102.128    }}virtual_server 192.168.102.128 3306 {    delay_loop 2    lb_algo rr    lb_kind NAT    nat_mask 255.255.255.0    persistence_timeout 50    protocol TCP    real_server 192.168.102.130 3306 {        weight 1        notify_down /usr/local/mysql/checkMysql.sh          TCP_CHECK {              connect_timeout 10              bingto 192.168.102.128                          nb_get_retry 3              delay_before_retry 3              connect_port 3306          }      }}

在/usr/local/mysql/下增加checkMysql.sh,脚本如下(留意脚本权限,需具备执行权限):

pkill keepalived

keepalived加入开机启动

chkconfig keepalived on

(3)测试keepalived是否生效

启动master和slave的mysql、keepalived,

连接192.168.102.128的数据库,查询hostname,此时vip在master机器上

停掉master的mysql服务(service mysql stop)后,vip飘到了slave上。

四、总结

    通过上述配置可初步实现数据库的高可用性,在Mysql服务出问题时实现自动切换,但在实际应用中应考虑服务宕掉时,应实现邮件通知功能,文中尚未涉及,后期实现后再做更新。此外Mysql之间出现数据不同步问题,也要谨慎处理,暂停数据同步功能,将数据处理后,方可重新开启同步。

转载于:https://my.oschina.net/blueSky4Java/blog/1572905

你可能感兴趣的文章
Java九九乘法表
查看>>
聊聊:Linux分区的那些方案
查看>>
大数据时代快速SQL引擎-Impala
查看>>
记一次IO异常捕获的过程
查看>>
控制器中如何设计MMU--虚拟内存管理机制
查看>>
Flutte部件目录-基本部件(一)
查看>>
AngularDart Material Design 按钮
查看>>
关于切换页面时自动滚动到有RecyclerView的位置的解决方法
查看>>
&&和&
查看>>
POI cell的宽度自适应
查看>>
检查ipa包是否包含手机的方法
查看>>
vim命令用法
查看>>
python复习2
查看>>
阿里中台架构
查看>>
JAVA Filter\Interceptor\Aspect 对比
查看>>
使用本地的docker客户端连接远程docker的守护进程
查看>>
《穷查理宝典》的读后感作文4000字
查看>>
centos7 安装 spark
查看>>
消息队列如何利用标签实现消息过滤
查看>>
Android中的Handler的Native层研究
查看>>