美文网首页MySQL
Mysql5.6.29双主+Keepalived

Mysql5.6.29双主+Keepalived

作者: 宇信智臻sy | 来源:发表于2016-12-30 09:40 被阅读96次

    Mysql5.6.29双主复制+Keepalived实现高可用服务

    1.准备工作

    1、节点主机系统:Linux操作系统,Centos6.5(64位)

    2、高可用集群软件:Keepalived

    3、Service:mysql

    4、Mysql版本:5.6.29

         Keepalived版本:1.2.13

    (2)主机/IP划分

    1、两台节点主机node1,node2:

    Node1: IP:192.168.1.128 host name:node1;

    Node2: IP:192.168.1.129 host name:node2;

    VIP: 192.168.1.140

    MYSQL服务器A,对于Keepalived来说则是MASTER机,首先托管着虚拟IP。

    MYSQL服务器B,对于Keepalived来说则是BACKUP机,当MASTER机出故障时,将接管VIP,接替MASTER机继续为外部提供服务,直到MASTER机恢复。

    2.MYSQL双主复制配置

    如果有正在写数据,先通过“flush tables with read lock;”命令让表只读,手工备份完后,再“unlock

    tables;”。

    2.1配置账号和权限

    在主机(MASTER)和备机BUCKUP)上,分别创建Mysql数据库账号“rep1”,密码为“123”。

    创建语句如下:

    create user 'rep1'@'%' identified by '123';

    通过如下SQL语句,授予账号“rep1”可用于复制的权限

    grant replication slave on *.* to 'rep1'@'%' identified by '123';

    “rep1” 是账号,“%”(可以指定具体IP)表示任意主机均可通过账号“rep1”复制数据,密码为“123”。执行“GRANT”语句后,再执行“flush privileges;”使授权生效。

    2.2配置MASTER

    分别对两台主机的Mysql配置文件进行修改,Msql配置文件一般为“my.cnf”(通过“./mysql

    --help | grep my.cnf”命令找到首选配置文件,这里是“/usr/local/mysql/my.cnf”),对my.cnf文件加入(或放开)下面的语句,即可开启复制功能(通过二进制日志复制)。两台主机开启binlog后,均变成MASTER机(即双主,但如果只一台开启binlog,则为主从),彼此都会向对方推送二进制日志。

    具体内容如下:

    server_id = 1#另一台此处设置为2(两台必须不同)

    log-bin = binlog  #开启binlog功能

    log-bin-index = binlog.index

    2.3配置SLAVE

    双主复制下,两台主机彼此均向对方推送日志,同时也从对方哪里接受日志。当它推送日志时,它就

    是MASTER机,当它接受数据时,它则变成SLAVE机。

    (1)配置主机A的SLAVE功能

    当主机A变成SLAVE机时,它将从主机B(MASTER)那里复制日志。

    u获取MASTER(主机B)的二进制日志文件名称和起始复制位置

    在主机B的Mysql中,执行“show master status;”命令,查看二进制日志文件名称和起始复制位置。

    u配置主机A的MASTER信息

    SQL语句如下:

    change master tomaster_host='192.168.1.129',master_port=3306, master_user='rep1', master_password='123', master_log_file='binlog.000004', master_log_pos=557;

    语句说明:

    master_host:MASTER Mysql的IP

    master_port:MASTER Mysql的端口

    master_user:MASTER Mysql用于复制的账号

    master_password:MASTER Mysql用于复制的账号对应的密码

    master_log_file:MASTER Mysql二进制文件名称

    master_log_pos:MASTER Mysql二进制文件开始复制的起始位置

    u启动主机A的SLAVE功能

    start slave;

    开启后,主机A作为SLAVE接受MASTER(主机B)推送过来的二进制日志)

    u查看复制状态

    show slave status \G;

    show processlist \G;

    (2)配置主机B的SLAVE功能

    当主机B变成SLAVE机时,它将从主机A(MASTER)那里复制日志。

    u获取MASTER(主机A)的二进制日志文件名称和复制的起始位置

    在主机A的Mysql中,执行“show master status;”命令,查看二进制日志文件名称和复制的起始位置。

    u配置主机B的MASTER信息

    change master tomaster_host='192.168.1.128',master_port=3306, master_user='rep1', master_password='123', master_log_file='binlog.000001', master_log_pos=120;

    u启动主机B的SLAVE功能

    start slave;

    开启后,主机B作为SLAVE接受主机A(MASTER)推送过来的二进制日志

    u查看复制状态(“\G”表示每列一行输出)

    show slave status \G;

    show processlist \G;

    3.双主复制测试

    (1)在主机A(192.168.1.128)的test库中创建表“repl_test”

    在主机B的test库中查询 “repl_test” 表

    从结果中可以看到,在主机A创建的表“repl_test”结构已经成功复制到主机B的MYSQL库中。

    (2)在主机B(192.168.1.129)中,对test库repl_test表插入数据。见下图。

    回到主机A(192.168.1.128),查看test数据库repl_test表,可以看在主机B(192.168.1.129)中插入的数据“from192.168.1.129”成功复制到主机A(192.168.1.128)MYSQL数据库中了。见下图。

    4.高可用配置

    高可用配置,主要是配置Keepalived,利用Keepalived设置虚拟IP,并在MASTER机与BACKUP机之间

    进行心跳检测,当MASTER机出故障时,BACKUP机立即无缝地接管虚拟IP,接替MASTER机职责继续为外部提供服务,直到MASTER机恢复。

    4.1Keepalived配置

    首先在两台主机上分别安装Keepalived,然后分别修改keepalived.conf文件,内容如下:

    ! Configuration File for keepalived

    #全局配置

    global_defs {

    notification_email {

    xxx@xxx.com

    }

    notification_email_from xxx@xxx.com

    smtp_server xxx.com

    smtp_connect_timeout 30

    router_id 1688

    }

    #VRRP监控脚本定义

    vrrp_script MONITOR_MYSQL {

    script "/usr/local/mysql/monitor/monitor.sh"#脚本路径

    interval 2#监控脚本执行频率(秒)

    weight 2

    }

    #VRRP实例

    vrrp_instance KEEPALIVED_MYSQL_1 {

    state MASTER

    interface eth0

    virtual_router_id 51#此处,MASTER与BACKUP一致

    priority 100#BACKUP配置的值比MASTER小

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    #VRRP监控脚本使用

    track_script {

    MONITOR_MYSQL

    }

    #虚拟IP配置

    virtual_ipaddress {

    192.168.119.140

    }

    }

    4.2编写Mysql服务器进程检测脚本

    Keepalived心跳检测主要检测主机是否可以访问,如果检测到托管VIP的主机不可以访问(keepalived

    进程没有在运行),它会立即将VIP转移到有效的BACKUP机上。但对于我们业务来说(MYSQL数据库读写),除了主机固然必须处在运行状态外,MYSQL数据库本身也必须正常运行,否则数据库无法读写,服务将不可用。所有我们就要编写一个脚本(命名为monitor.sh,配置到keepalived.conf中,keepalived会根据设定的频率进行调用),用于检测MYSQL数据库是否正常运行,如果检测到MYSQL数据库挂掉了,说明本机MYSQL服务器不可用,必须进行故障切换。

    脚本内容如下:

    #!/bin/bash

    #查看是否有MYSQL进程在运行(进程个数)

    mysql_process_count=`netstat -nlt | grep 3306 | wc -l`

    #查看是否有keepalived进程在运行

    keepalived_process_count=`ps -C keepalived --no-header | wc -l`

    #如果检测到没有MYSQL进程在运行(说明数据库挂掉了)

    if [ $mysql_process_count -eq 0 ] && [ $keepalived_process_count -gt 0 ]

    then

    #杀掉keepalived进程,让BACKUP机检测不到MASTER上的keepalived,从而BACKUP接管VIP

    killall keepalived

    fi

    chmod 755 /usr/local/mysql/monitor/monitor.sh

    5.高可用测试

    (1)开启两台主机上的keepalived

    启动MASTER机(192.168.1.128)上的keepalived,如图,VIP(192.168.119.140)设置成功。

    启动BACKUP机(192.168.1.129)上的keepalived

    (2)关闭MASTER机(192.168.1.128)上的MYSQL,如图,MASTER机上托管的VIP消失。

    这时观察BACKUP机(192.168.1.129),从下图可以看到,BACKUP机成功接管了VIP(192.168.119.140)。

    (3)恢复MASTER机上的MYSQL数据库,如下图,可以看到VIP(192.168.119.140)又回来了。

    再看看BACKUP机,VIP没有了,因为MASTER机上的MYSQL恢复正常,MASTER机重新接管了VIP。

    (4)通过VIP访问数据库

    如下图,通过VIP(192.168.119.140),成功访问数据库。

    注:图为转载,不影响配置!

    相关文章

      网友评论

        本文标题:Mysql5.6.29双主+Keepalived

        本文链接:https://www.haomeiwen.com/subject/lwqmvttx.html