通过keepalived搭建Mysql主主互备模式的高可用集群系统

本文介绍了通过Mysql主主互备模式和keepalived实现高可用集群的详细步骤。包括配置Mysql主从复制、创建复制用户和授权、配置keepalived实现故障切换,以及测试集群的读写和故障转移功能。
摘要由CSDN通过智能技术生成

一、原理
Mysql集群具有高可用、可扩展、易管理、低成本的特点。这里简单介绍mysql双主互备的架构,主要设计思路是通过mysql replication技术将两台mysql server互相将对方作为自己的master,自己同时做为对方的slave来进行复制。同时将采用keepalived来实现mysql的自动failover。这个架构中,虽然两台mysql server互为主从,但同一时刻,只有一个mysql server可读写,另一个mysql server只具有读的操作,这样可保持数据的一直性!!

二、MySQL主主互备模式的配置
Mysql主从复制的配置还是比较简单,只需要修改mysql的配置文件就行。
主机名 操作系统 Mysql版本 主机IP Mysql VIP
DB1 Centos 7 Mysql5.6.17 192.168.0.119 192.168.0.120
DB2 Centos7 Mysql5.6.17 192.168.0.105
修改mysql配置文件
在主机DB1上,编辑/etc/my.cnf在“[mysqld]”下添加以下内容
server-id=1
log-bin=mysql-bin
relay-log=mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=information_schema.%
replicate-wild-ignore-table=performance_schema.%
然后在主机DB2上,做同样的修改
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=information_schema.%
replicate-wild-ignore-table=performance_schema.%

三、创建复制用户并授权
首先在DB1的mysql库中创建复制用户,
grant replication slave on . to ‘wpd’@’192.168.0.105’ identified by ‘’;
查看节点的状态
show master status;
在DB2上将DB1设为自己的主服务器
change master to
master_host=’192.168.0.119’,
master_user=’wpd’,
master_password=’’,
master_log_file=’mysql-bin.000001’,
master_log_pos=329;
这里需要注意的是master_log_file和master_log_pos这两个选项是DB1上 show master status 查询到的结果。
接着就可以在DB2上启动slave服务了,start slave,查看slave的运行状态 show slave status \G;如果一切运行正常,到这样DB1到DB2的mysql主从复制已经完成。接下来就是DB2到DB1的主从复制,配置和上面的过程完全相同!这样,DB1和DB2的双主模式已经配置完成!

四、配置keepalived实现mysql双主高可用
首先在DB1和DB2上安装keepalived,安装完成后进行keepalived的配置!
在DB1上的配置/etc/keepalived/keepalived.conf
global_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 MYSQLHA_DEVEL
}
vrrp_script check_mysqld{
script “/etc/keepalived/mysqlcheck/check_slave.pl 127.0.0.1” #检测mysql复制状态的脚本
Interval 2
}
vrrp_instance HA_1{
state BACKUP #在DB1和DB2上均配置为BACKUP
interface eth0
virtual_router_id 80
priority 100
advent_int 2
nopreempt #不抢占模式,只在优先级高的机器上设置即可

authentication{
auth_type PASS
auth_pass qweasdzxc
}

track_script{
check_mysqld
}

virtual_ipaddress{
192.168.0.120/24 dev eth0 #mysql的对外服务IP
}
}
紧接着将配置好的文件,复制到DB2主机上,然后在DB2上把keepalived.conf中priority的值改为90,同时去掉nopreempt选项!
在完成所有配置后,分别在DB1和DB2上启动keepalived服务。
五、测试mysql主从同步功能
在远程客户端登录VIP测试
数据复制功能测试
测试keepalived实现mysql故障转移
PS:check_slave.pl的内容为:

#!/usr/bin/perl -w
Use DBI;
Use DBD::mysql;

#CONFIGVARIABLES
$SBM = 120;
$db = “ixdba”;
$host = $ARGV[0];
$port = 3306;
$user = “root”;
$pw = “xxxxxx”;

#SQLquery
$query = “show slave status”;

 $dbh = DBI->connect(“DBI::mysql:$db:$host:$port”, $user, $pw, { RaiseError => 0,PrintError => 0 });

if(!defined($dbh)){
	exit 1;
}

$sqlQuery=$dbh->prepare($query);
$sqlQuery->execute;

$Slave_IO_Running= “”;
$Slave_SQL_Running= “”;
$Seconds_Behind_Master= “”;

while(my$ref=$sqlQuery->fetchrow_hashref()){
	$Slave_IO_Running= $ref->{‘Slave_IO_Running’};
	$Slave_SQL_Running= $ref->{‘Slave_SQL_Running’};
	$Seconds_Behind_Master= $ref->{‘Seconds_Behind_Master’};
}

$sqlQuery->finish;
$dbh->disconnect();

if($Slave_IO_Running= “NO” || $Slave_SQL_Running= “NO”){
	exit 1;
}else{
	if($Seconds_Behind_Master>$SBM){
		exit 1;
		}else{
			exit 0;
		}
}

这个是用perl写的检测mysql复制状态的脚本,ixdba是本例中的一个数据库名,只需要修改文件中的数据库名,数据库端口,用户名和密码即可直接使用,但是要保证脚本具有执行权限!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值