Keepalived+Lvs+Mysql主主复制
一简单介绍
Keepalived+lvs+mysql主主复制是比較经常使用的一种Mysql高可用方案,当中lvs 提供读负载均衡,Keepalived通过虚拟vip漂移实现故障自己主动转移,而Mysql尽管配置成主主复制。可是一般都是採用单点写入来保证数据一致性。
整个方案实现很easy,仅需两台server就可以,安装配置也相对简单,但须要自己写脚本实现keepalived服务的开启和关闭,适用于仅仅有两台数据库server而且未实现读写分离的场景。
系统总体结构框图例如以下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VnX2ppYW5nMTI2Y29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
二环境搭建
2.1 环境配置例如以下
| 
 Keepalived Server  | 
 LVS Server  | 
 LVS Realserver  | 
 MySQL Master-Master  | 
 Write VIP  | 
 Read VIP  | 
 OS  | 
 MySQL  | 
| 
 Master 10.0.11.243  | 
 10.0.11.243  | 
 10.0.11.243  | 
 10.0.11.243  | 
 10.0.11.190  | 
 10.0.11.191  | 
 Centos6  | 
 Percona5.6  | 
| 
 Backup 10.0.11.244  | 
 10.0.11.244  | 
 10.0.11.244  | 
 10.0.11.244  | 
 10.0.11.190  | 
 10.0.11.191  | 
 Centos6  | 
 Percona5.6  | 
2.2 mysql master-master复制配置
主主复制配置本质上就是配置两台server互相的主从,实现比較简单,大致过程例如以下
2.2.1 在Master上创建一个复制账户
mysql>grantreplication slave on *.* to
rep71@10.0.11.244identified by‘123456’;
mysql>flushprivileges;
2.2.2 改动两台mysql配置文件my.cnf例如以下
##Replication General Config (both master and slave)
server-id= 101
log-bin= mysql-log-bin
auto-increment-increment= 2
auto-increment-offset= 1
binlog_format= row
relay_log= mysql-relay-bin
2.2.3 在Masterserver上运行show master status,记录下File和Position
mysql>show master status\G;
***************************1. row ***************************
File:mysql-log-bin.000005
Position:327933
Binlog_Do_DB:
Binlog_Ignore_DB:test,mysql,information_schema,performance_schema
2.2.4 在Slave服务上运行
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to
    -> master_host='10.0.11.243',
    -> master_user='rep71',
    -> master_password='123456',
    -> master_log_file=' mysql-log-bin.000005',
    -> master_log_pos=327933;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
2.2.5反复以上四个步骤。在Slaveserver上创建账户rep72,show master status。在Master上start slave,这样mysql的主主同步就配置好了,分别在两台server上执行show slave status,假设结果都显示Slave_IO_Running: Yes,Slave_SQL_Running: Yes。则证明同步正常。
2.3 Keepalived的安装
2.3.1 在 master、backup server都进行安装:
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
sudotar zxvf ipvsadm-1.24.tar.gz
cdipvsadm-1.24
sudoln -s /usr/src/kernels/2.6.32-358.el6.x86_64/ /usr/src/linux
make
sudomake install
2.4 Keepalived 的安装
2.4.1在 master、backup server都进行安装:
wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
tarzxvf keepalived-1.1.19.tar.gz
cdkeepalived-1.1.19
yuminstall -y openssl openssl-devel
sudoyum install popt-devel –y
./configure--sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.18-308.el5-x86_64/
make
sudomake install
ln -s /usr/local/sbin/keepalived /sbin/
2.4.2 Master上的Keepalived 的配置
global_defs{
router_id mysqlmha1
}
vrrp_scriptcheck_run {
script"/etc/keepalived/check_mysqll.sh"
interval 1
}
vrrp_instanceVI_1 {
state MASTER
interface em1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
10.0.11.190 dev em1 label em1:1
10.0.11.191 dev em1 label em1:2
}
}
virtual_server10.0.11.190 3306 {
delay_loop6
lb_algorr
lb_kindDR
persistence_timeout20
protocolTCP
sorry_server10.0.11.244 3306
real_server10.0.11.243 3306 {
weight3
TCP_CHECK{
connect_timeout3
nb_get_retry3
delay_before_retry3
connect_port3306
}
}
}
virtual_server10.0.11.191 3306 {
delay_loop6
lb_algorr
lb_kindDR
#persistence_timeout20
protocolTCP
real_server10.0.11.243 3306 {
weight3
TCP_CHECK{
connect_timeout3
nb_get_retry3
delay_before_retry3
connect_port3306
}
}
real_server10.0.11.244 3306 {
weight3
TCP_CHECK{
connect_timeout3
nb_get_retry3
delay_before_retry3
connect_port3306
}
}
}
2.4.3 Backup 的 keepalived 的配置
global_defs {
router_id mysqlmha1
}
vrrp_script check_run {
script "/etc/keepalived/check_mysqll.sh"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface em1
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
10.0.11.190 dev em1 label em1:1
10.0.11.191 dev em1 label em1:2
}
}
virtual_server 10.0.11.190 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 20
protocol TCP
sorry_server 10.0.11.244 3306
real_server 10.0.11.243 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
virtual_server 10.0.11.191 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 20
protocol TCP
real_server 10.0.11.243 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 10.0.11.244 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
2.5 Master 和 backup 的 realserver 的配置
对于 realserver 的配置 master 和 backup 是一致的,脚本内容例如以下:
#!/bin/bash
#description: Config realserver lo and apply noarp
SNS_VIP=10.1.11.190
SNS_VIP2=10.0.11.191
/etc/rc.d/init.d/functions
case"$1" in
start)
ifconfiglo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
ifconfiglo:1 $SNS_VIP2 netmask 255.255.255.255 broadcast $SNS_VIP2
/sbin/routeadd -host $SNS_VIP dev lo:0
/sbin/routeadd -host $SNS_VIP2 dev lo:1
echo"1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo"2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo"1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce
echo"1" >/proc/sys/net/ipv4/conf/em1/arp_ignore
echo"2" >/proc/sys/net/ipv4/conf/em1/arp_announce
sysctl-p >/dev/null 2>&1
echo"RealServer Start OK"
;;
stop)
ifconfiglo:0 down
ifconfiglo:1 down
routedel $SNS_VIP >/dev/null 2>&1
routedel $SNS_VIP2 >/dev/null 2>&1
echo"0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo"0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo"0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo"0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo"0" >/proc/sys/net/ipv4/conf/em1/arp_ignore
echo"0" >/proc/sys/net/ipv4/conf/em1/arp_announce
echo"RealServer Stoped"
;;
*)
echo"Usage: $0 {start|stop}"
exit1
esac
exit0
2.6 编辑脚本控制Keepalived的开启和停止
大体意思是仅仅要检測到mysql服务停止keepalived服务也停止 ,由于keepalived是通过组播方式告诉本网段自己还活着当mysql服务停止后keepalived还依旧执行 这时就须要停止keepalived让还有一个主机获得虚拟IP,能够在后台执行这个脚本 也能够在keepalived配置文件增加这个脚本,master和slave节点都须要,仅仅是数据库username和password有差别
[root@244 ~]#more /etc/keepalived/check_mysql.sh 
#20140722
#!/bin/bash
MYSQL=/usr/bin/mysql 
MYSQL_HOST=10.0.11.243
MYSQL_USER=root 
MYSQL_PASSWORD=mysql 
CHECK_TIME=3
#mysql isworking MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth (){ 
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "showstatus;" >/dev/null 2>&1
if [ $?
= 0 ] ;then 
     MYSQL_OK=1
else
     MYSQL_OK=0
fi 
     return $MYSQL_OK 
} 
while [ $CHECK_TIME -ne 0 ] 
do
     let "CHECK_TIME -= 1"
     check_mysql_helth 
if [ $MYSQL_OK = 1 ] ; then 
     CHECK_TIME=0
     exit 0
fi 
if [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ] 
then 
     pkill keepalived 
exit 1
fi 
sleep 1
done
该脚本须要有运行权限。通过下面命令加上运行权限
# chmod +x check_mysql.sh
2.7 測试Keepalived自己主动故障转移
Master和slave上运行sudo servicekeepalived start,在master上运行ip
 a
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VnX2ppYW5nMTI2Y29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Slave上运行 ip a
从上能够看到masteMySQL上虚拟IP绑定成功,backup
 MySQL上keepalived服务正常执行,但无虚拟IP(这属于正常)
client能通过vip连接上mysql
停止master上的mysql服务,可发现Keepalived服务也会停止
这时候slave执行ip a发现绑定了虚拟ip,而且从库mysql执行正常,而client依然能通过vip连上数据库
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VnX2ppYW5nMTI2Y29t/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
重新启动master的mysql和Keepalived以后,并在slave库执行start
 slave,master执行ip a发现恢复之前的服务
2.8 測试lvs的负载均衡效果
启动 master 和 backup 的 mysql 以后,再在 master 和 backup 运行例如以下命令启
动 keepalived 和 realserver 脚本:
/etc/rc.d/init.d/realserver.sh start
/etc/rc.d/init.d/keepalived start
执行master和backup上的sudo ipvsadm -ln可看到例如以下信息
在client通过read vip连接到mysql并运行几次select,可考到inaction发生了变化。证明实现了负载均衡
Keepalived+Lvs+Mysql主主复制的更多相关文章
- 基于keepalived搭建mysql双主高可用
		
目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...
 - 通过keepalived搭建MySQL双主模式的高可用集群系统
		
1. 配置MySQL双主模式 1.修改my.cnf配置文件 默认情况下,MySQL的配置文件是/etc/my.cnf,在配置文件的[mysqld]段添加如下内容: server-id=1 log-bi ...
 - 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
		
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
 - MySQL集群(四)之keepalived实现mysql双主高可用
		
前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Kee ...
 - 一次LVS+MySQL的主主负载均衡实战
		
这是去年做的一个项目的记录,如果大家有更好的解决方案,欢迎指出. 先说说项目需求,用户需要在两个地市部署两套应用系统和两套数据库,在一个地市主用,在另一个热备:数据要互备:而且如果主用地市流量很大,可 ...
 - 使用Keepalived实现MySQL双主高可用
		
MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ...
 - (转)MySQL主主互备结合keepalived实现高可用
		
MySQL主主互备结合keepalived实现高可用 原文:http://7424593.blog.51cto.com/7414593/1741717 试验环境: master:192.168.1.2 ...
 - keepalived+mysql主主
		
实验架构图: 一.mysql 5.5双机热备份 master-master 1.系统环境 操作系统:centos6.6 masterA IP:192.168.166.161 masterB ip:19 ...
 - 编译安装keepalived,实现双主mysql高可用
		
安装keepalived 1.官网下载源码包,解压 # wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz # tar x ...
 
随机推荐
- 计划任务中使用NT AUTHORITY\SYSTEM用户和普通管理员用户有什么差别
			
原文地址:http://www.ynufe.edu.cn/metc/Article/ShowArticle.asp?ArticleID=805 系统管理员会碰到这种问题,为什么在更改系统登录用户pas ...
 - poj 1523 SPF(tarjan求割点)
			
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
 - hadoop备战:一台x86计算机搭建hadoop的全分布式集群
			
主要的软硬件配置: x86台式机,window7 64位系统 vb虚拟机(x86的台式机至少是4G内存,才干开3台虚机) centos6.4操作系统 hadoop-1.1.2.tar.gz jdk- ...
 - Oracle优化技术
			
1.基本原理 Oracle的日志:Oracle中为了提高硬盘写的效率,採用内存中数据缓冲区来保存数据,等到一定量或一定时间后才写到磁盘(DBWR). 这个时候假如断电之类的故障发生,数据缓冲区的数据将 ...
 - Coding.net代码托管空间申请与使用-安装并运行WordPress博客
			
参考: http://www.freehao123.com/coding-net/ Coding.net这是一个国内新兴的代码托管平台,功能主要包括:代码托管.在线运行环境.监控代码质量,兼有一定的社 ...
 - [spring入门学习笔记][spring的IoC原理]
			
什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...
 - 怎么实现类似星星闪烁的效果(box-shadow)
			
有时候设计希望我们能够在页面实现类似星星闪烁的效果,如图: 我的解决办法是用box-shadow: html <div class="star04 active-blink" ...
 - Android adb不是内部或外部命令 (转)
			
dos窗口运行adb命令出现错误:adb不是内部或外部命令…. 出现问题原因及解决办法: 1.没有配置相关环境变量. 只要将android 的sdk安装路径添加到系统变量Path中即可. (以win7 ...
 - 1.Asp.net处理请求的流程
			
.NET平台处理HTTP请求的过程大致如下: 1. IIS得到一个请求: 2.查询脚本映射扩展,然后把请求映射到aspnet_isapi.dll文件 3.代码进入工作者进程(IIS5里是aspnet_ ...
 - redhat换yum源
			
根据redhat操作系统版本及位数,下载对应centos的版本及位数的这些包: yum-3.2.22-40.el5.centos.noarch.rpm yum-fastestmirror-1.1.16 ...