成功最有效的方法就是向有经验的人学习!

Mysql+Keepalived高可用性双主配置

在生产环境中,一台mysql服务器存在单点故障,所以我们要确保mysql的高可用性,也就是说两台mysql服务器如果其中有一台挂了,那么另外一台就会接替其进行工作。
Mysql的高可用方案一般有以下几种:
keepalived+双主,MHA,PXC,MMM.Heartbeat+DRBD等,比较常用的还是keepalived+双主MHA和PXC。

本章主要利用了keepalived实现Mysql数据库的高可用。

 

keepalived+mysql双主来实现mysql-HA,我们必须要保证两台mysql数据库的数据是完全一样的,基本思路是两台mysql互为主从关系,也就是我们常说的双主,然后通过keepalived配置虚拟IP地址,实现当其中一台mysql数据库挂掉后,应用能够自动的切换到另外一台mysql数据库,保证系统的高可用性。
测试环境:

 OS:Centos7.3x86_64
Mysql版本:Mysql5.7.18
keepalived:keepalived-1.2.13
Master:192.168.137.100
Slave:192.168.137.110

在测试环境中,关闭selinux以及firewalld防火墙

简单的说主主同步就是两台mysql服务器互为主从关系,在任何一台机器上写入都会同步,具体的原理这里不做要多解释。

一、配置Master服务器:

1、首先需要在master主上面开启bin-log日志,打开mysql主配置文件添加以下几行

vim /etc/my.cnf  
log-bin=mysql-bin          //打开日志  
server-id=10               //这个id号是唯一的,master和slave不能一样

开启之后重启mysql服务即可。

systemctl restart mysqld

2、将master设为slave的主服务器
在master主机上创建授权账户,允许slave(192.168.137.110)主机上连接

mysql> grant replication slave on *.* to 'rep'@'192.168.137.110' identified by 'pwd123';  
Query OK, 0 rows affected, 1 warning (0.61 sec)

查看master的当前binlog状态信息

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

请记住以上的File 和pos号,以下会用的到

二、配置从服务器

1、在slave主机上将master设为自己的主服务器并开启bin-log日志。配置如下:

vim  /etc/my.cnf

log-bin=mysql-bin    //开启日志
server-id=30    //此id不能和master相同

开启之后重启mysql服务即可。

mysql> change master to  
    -> master_host='192.168.137.100',  
    -> master_user='rep',  
    -> master_password='pwd123',  
    -> master_log_file='mysql-bin.000002',  
    -> master_log_pos=450;  
Query OK, 0 rows affected, 2 warnings (0.08 sec)

2、查看从服务器状态,以下两个值必须为yes,代表从服务器能够正常的连接主服务器。

 Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

3、将slave设为master的主服务器。

在slave主机上创建授权账户,允许master(192.168.137.100)主机上连接

mysql> grant replication slave on *.* to 'rep'@'192.168.137.100' identified by 'pwd123';  
Query OK, 0 rows affected, 1 warning (0.30 sec)

查看slave的当前binlog状态信息

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

记住以上的File和Pos值 以下会用得到

在master服务器上将slave设为自己的主服务器并且开启slave功能

mysql> change master to  
    -> master_host='192.168.137.110',  
    -> master_user='rep',  
    -> master_password='pwd123',  
    -> master_log_file='mysql-bin.000001',  
    -> master_log_pos=450;  
Query OK, 0 rows affected, 2 warnings (0.14 sec)  
  
mysql> start slave;  
Query OK, 0 rows affected (0.08 sec)

查看主服务器的状态以下两个值必须为yes,代表主服务器能够正常的连接从服务器。Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

三、测试主主同步。

1、在master主机上创建一个库为test,并且在test库中创建一张表为tb1

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

在从服务器验证是否有主创建的库和表

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

在从服务器中向tb1表中插入数据,在主服务上查看是否同步

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

此时mysql主主同步,正式完成!!!

四、keepalived的安装配置

1、在master和slave主机上安装keepalived

在编译安装keepalived之前先安装openssl、popt-devel等支持库

[root@master ~]# yum install -y openssl-devel popt-devel
Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

2、编译安装keepalived

将安装目录指定为根目录,配置完成后执行make && make install 如下:

[root@master ~]# tar zxf keepalived-1.2.13.tar.gz   
[root@master ~]# cd keepalived-1.2.13/  
[root@master keepalived-1.2.13]# ./configure --prefix= / && make && make install
Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

添加keepalived为系统服务

[root@master keepalived-1.2.13]# chkconfig --add keepalived  
[root@master keepalived-1.2.13]# chkconfig keepalived on

此时master主机的keepalived正式安装完成,在slave主机上安装keepalived和master的安装步骤是一样的,这里不在做演示。

3、配置keepalived主配置文件,如下:

! Configuration File for keepalived

global_defs {
   router_id Master   //表示运行keepalived服务器的一个标识
}

vrrp_instance VI_1 {
    state MASTER        //指定keepalived的角色
    interface eno16777728   //指定HA检测的网络接口
    virtual_router_id 51    //虚拟路由标识
    priority 100            //用来选举master的,也就是优先级
    advert_int 1            //发vrrp包的时间间隔,多久进行一次master选举(可以认为是健康查检时间间隔)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {        //VIP区域,指定VIP地址
        192.168.137.150/24
    }
}

virtual_server 192.168.137.150 3306 {       //设置虚拟服务器,需要指定虚拟地址和服务端口号
    delay_loop 6           //设置运行情况检查时间,单位是秒
    lb_algo rr             //设置后端调度算法,这里设置为rr,轮询算法
    lb_kind DR            //设置lvs实现负载均衡的机制,有net,yun,dr三个模式可选
    persistence_timeout 50    //会话保持的时间,单位是秒。
    protocol TCP       //指定转发协议的类型,有tcp/udp两种
    
    real_server 192.168.137.100 3306 {      //配置服务节点,需要指定real server的真实IP地址
        weight 1
        notify_down /etc/keepalived/bin/mysql.sh
        TCP_CHECK {
        connect_timeout 3    //连接超时时间
        nb_get_retry 3     //重连次数
        delay_before_retry 3    //重连间隔时间
        connect_port 3306      //健康检查端口
        }
    }
}

配置完成后启动keepalived服务

/etc/init.d/keepalived start

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

 

配置从服务器的keepalived主配置文件

其实从服务器的keepalived主配置和主的差不多都一样 我这边直接复制一份主keepalived主配置文件到从服务器上然后在做修改,内容如下:

! Configuration File for keepalived

global_defs {
   router_id Slave
}

vrrp_instance VI_1 {
    state Slave
    interface eno16777728
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.137.150/24
    }
}

virtual_server 192.168.137.150 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.137.110 3306 {
        weight 1
        notify_down /etc/keepalived/bin/mysql.sh
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 3306
        }
    }
}

随后启动从服务器的keepalived

[root@slave ~]# /etc/init.d/keepalived start  
Starting keepalived (via systemctl):                       [  OK  ]

master和slave上都添加了检测脚本,作用是当mysql停止工作时自动关闭本机的keepalived,从而实现将故障机器剔除。
mkdir /etc/keepalived/bin/mysql.sh

cat mysql.sh  
#!/bin/bash  
pkill keepalived  
/sbin/ifdown eno16777728 && /sbin/ifup eno16777728                
chmod +x bin/mysql.sh

4、测试

在master和slave主机上分别执行ip addr show命令查看master和slave对vip地址的控制权

master的查看结果如下:

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

 

slave查看结果如下:

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

从以上图中可以看出master是主服务器slave是备用服务器

mysql远程登录测试:

我们需要找一台已经安装好mysql的客户端,然后登录VIP,看是否能登陆,在登录之两台mysql服务器都需要授权允许从远程登录

如下:

mysql> grant all on *.* to root@'%' identified by 'pwd123';  
Query OK, 0 rows affected, 1 warning (0.17 sec)  

授权完后客户端测试

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

 

以上图中显示的server-id是主服务器的id那么我们把主服务器干掉。再来查看server-id如果变成从服务器的server-id那么已经配置成功!如下:

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

主服务器挂掉后再看从服务器ip

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

验证客户端

Mysql+Keepalived高可用性双主配置

Mysql+Keepalived高可用性双主配置

以上说明主服务器挂掉以后从服务器会接管主服务器的工作,不会影响效率,此时整个测试完成。

赞(0) 打赏
未经允许不得转载:陈桂林博客 » Mysql+Keepalived高可用性双主配置
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册