为了解决单点故障的问题,我们可以考虑使用主主复制的架构,那么如何做到高可用呢,这里我使用keepalived来实现。

其实主主复制的架构搭建很简单,就是两台虚拟机互为主从,怎么为互为法呢,单向的主从搭建我前面已经做了说明

双向的做法就是按照这个参考地址里面的流程,在从机里面执行一遍主的流程,主机的一遍从的流程!

执行结果,查看进程,效果如下:

mysql主从复制 报错1146_mysql主从复制 报错1146

mysql主从复制 报错1146_mysql_02

添加数据效果如下

mysql主从复制 报错1146_高可用_03

mysql主从复制 报错1146_高可用_04

从这个实验结果,可以发现,两边添加数据都是可行的。

 

接下来,我们就使用keepalived实现高可用。

keepalived源码安装

wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zxvf keepalived-1.3.5.tar.gz
安装openssl openssl-devel
yum -y install openssl openssl-devel
./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --
mandir=/usr/local/share/man/
make && make install

修改配置,修改后如下

! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
        #notificationd LVS_DEVEL
       notification_email {
          736904704@qq.com
        }
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_mysql_life {
    script "/etc/keepalived/chk.sh"  #具体脚本路径
    interval 2  #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 {   #VI_1 是自定义的名称;
    state MASTER   #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
    nopreempt      #开启不抢占
    interface ens33   #指定VIP需要绑定的物理网卡
    virtual_router_id 11   #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
    priority 130   #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台

    advert_int 1   #生存检测时的组播信息发送间隔,组内一致
    authentication {    #设置验证信息,组内一致
        auth_type PASS   #有PASS 和 AH 两种,常用 PASS
        auth_pass asd    #密码
    }
    virtual_ipaddress {
        192.168.1.200    #指定VIP地址,组内一致,可以设置多个IP
    }
    track_script {    #使用在这个域中使用预先定义的脚本,上面定义的
        chk_mysql_life
    }

    #notify_backup "/etc/init.d/haproxy restart"   #表示当切换到backup状态时,要执行的脚本
    #notify_fault "/etc/init.d/haproxy stop"     #故障时执行的脚本
}

两个主的配置基本相同,只有state和priority两个属性的值不同

脚本chk.sh的内容如下

#! /bin/bash
/etc/keepalived/mysql -h 192.168.1.105 -u root -p123456 -P 3307 -e "show status;" >/dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
echo " mysql login faild"
killall keepalived
exit 2
fi

对应的数据库,需要改下ip、账号密码、端口等内容即可。

两个主上都启动keepalived后,使用"ip a"命令查看,效果如下

mysql主从复制 报错1146_mysql_05

高可用即搭建后了,我们在连接mysql的时候,只需要连接这个虚拟出来的ip即可,如果其中mysql挂掉了,keepalived会漫游到一个组下的另一台,从而实现高可用。