Mysql5.6.29双主+Keepalived

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

Mysql5.6.29双主+Keepalived_第1张图片

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二进制文件开始复制的起始位置

Mysql5.6.29双主+Keepalived_第2张图片

u启动主机A的SLAVE功能

start slave;

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

u查看复制状态

show slave status \G;

Mysql5.6.29双主+Keepalived_第3张图片

show processlist \G;

Mysql5.6.29双主+Keepalived_第4张图片

(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;

Mysql5.6.29双主+Keepalived_第5张图片

u启动主机B的SLAVE功能

start slave;

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

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

show slave status \G;

Mysql5.6.29双主+Keepalived_第6张图片

show processlist \G;

Mysql5.6.29双主+Keepalived_第7张图片

3.双主复制测试

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

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

Mysql5.6.29双主+Keepalived_第8张图片

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

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

Mysql5.6.29双主+Keepalived_第9张图片

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

Mysql5.6.29双主+Keepalived_第10张图片

4.高可用配置

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

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

4.1Keepalived配置

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

! Configuration File for keepalived

#全局配置

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

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

}

}

Mysql5.6.29双主+Keepalived_第11张图片

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

Mysql5.6.29双主+Keepalived_第12张图片

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

5.高可用测试

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

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

Mysql5.6.29双主+Keepalived_第13张图片

启动BACKUP机(192.168.1.129)上的keepalived

Mysql5.6.29双主+Keepalived_第14张图片

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

Mysql5.6.29双主+Keepalived_第15张图片

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


Mysql5.6.29双主+Keepalived_第16张图片

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

Mysql5.6.29双主+Keepalived_第17张图片

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

Mysql5.6.29双主+Keepalived_第18张图片

(4)通过VIP访问数据库

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

Mysql5.6.29双主+Keepalived_第19张图片
注:图为转载,不影响配置!

你可能感兴趣的:(Mysql5.6.29双主+Keepalived)