LVS+Keepalived实现MySQL从库读操作负载均衡配置
转载于osyunwei
说明:
操作系统:CentOS 5.X 64位
MySQL主服务器:192.168.21.126
MySQL从服务器:192.168.21.127,192.168.21.128
MySQL主从同步的数据库为:osyunweidb
实现目的:
增加两台服务器(主备),通过LVS+Keepalived实现MySQL从库读操作负载均衡
架构规划:
操作系统:CentOS 5.X 64位
LVS主服务器:192.168.21.129
LVS备服务器:192.168.21.130
LVS虚拟服务器(VIP):192.168.21.254
部署完成之后,通过VIP:192.168.21.254,根据LVS调度算法来访问后端真实的MySQL从服务器,实现负载均衡。
具体操作:
第一部分:分别在两台MySQL从服务器上操作
一、关闭SELINUX
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
二、配置防火墙,开启3306端口
vi /etc/sysconfig/iptables #编辑
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙
:wq! #保存退出
/etc/init.d/iptables restart #重启防火墙使配置生效
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
三、绑定LVS虚拟服务器(VIP):192.168.21.254到lo:0
vi /etc/rc.d/init.d/realserver #编辑,添加以下代码
#################################################
#!/bin/sh
# chkconfig: - 80 90
# description:realserver
# mysql_vip start realserver
mysql_vip=192.168.21.254 #LVS虚拟服务器(VIP)
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $mysql_vip netmask 255.255.255.255 broadcast $mysql_vip
/sbin/route add -host $mysql_vip dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $mysql_vip >/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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#################################################
chmod +x /etc/rc.d/init.d/realserver #添加脚本执行权限
chkconfig realserver on #添加开机启动
/etc/rc.d/init.d/realserver start #开启,参数stop为关闭
四、调整服务器参数,使LVS虚拟服务器(VIP)忽略ARP广播包
vi /etc/sysctl.conf #编辑
net.ipv4.ip_forward= 1 #修改0为1,开启转发
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2
:wq! #保存退出
/sbin/sysctl -p #使配置立即生效
五、设置能够远程监控MySQL主从同步状态的MySQL用户和密码
mysql -u root -p #进入MySQL控制台
insert into mysql.user(Host,User,Password) values('localhost','checkslave',password('123456')); #新建账户checkslave,密码123456
flush privileges; #刷新系统授权表
grant all on *.* to 'checkslave'@'192.168.21.129' identified by '123456' with grant option; #允许账户checkslave从LVS主服务器192.168.21.129连接到数据库服务器
grant all on *.* to 'checkslave'@'192.168.21.130' identified by '123456' with grant option; #允许账户checkslave从LVS从服务器192.168.21.130连接到数据库服务器
第二部分:分别在两台LVS主备服务器上操作
一、关闭SElinux、配置防火墙
1、vi /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效
2、vi /etc/sysconfig/iptables #编辑
-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允许VRRP(虚拟路由器冗余协议)组播地址通信
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙
:wq! #保存退出
/etc/init.d/iptables restart #重启防火墙使配置生效
二、安装lvs软件
yum install ipvsadm #Linux 2.6内核已经集成了lvs软件,此处ipvsadm为lvs管理工具
modprobe ip_vs #加载ip_vs
三、安装keepalived
yum install gcc gcc-c++ make openssl-devel kernel-devel ncurses-devel #安装编译工具包
下载keeplived:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
上传keepalived-1.2.12.tar.gz到/usr/local/src目录
cd /usr/local/src
tar zxvf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12
./configure #配置,必须看到以下提示,说明配置正确,才能继续安装
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
make #编辑
make install #安装
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/keepalived #添加执行权限
chkconfig keepalived on #设置开机启动
service keepalived start #启动
service keepalived stop #关闭
service keepalived restart #重启
四、安装perl、perl-DBI、DBD-mysql模块以及MySQL客户端 #perl脚本连接MySQL数据库需要
yum install perl perl-DBI perl-DBD-MySQL mysql #执行此命令安装
vi /tmp/test_perl.pl
#!/usr/bin/perl
print "Hello, world!\n";
:wq! #保存退出
perl /tmp/test_perl.pl #运行测试脚本,如果出现:Hello,world! 说明perl安装成功
perldoc DBI #查看DBI模块是否安装
perldoc DBD::mysql #查看DBD::mysql模块是否安装
五、配置keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf-bak
vi /etc/keepalived/keepalived.conf #编辑,修改为以下代码
##################################################################################################
! Configuration File for keepalived
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 LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #LVS备机修改为BACKUP
interface eth0
virtual_router_id 51
priority 100 #LVS备机修改为80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.21.254
}
notify_master "/etc/keepalived/clean_arp.sh" #LVS主备机都为notify_master
}
virtual_server 192.168.21.254 3306 {
delay_loop 30
lb_algo wlc
lb_kind DR
#nat_mask 255.255.255.0
persistence_timeout 120
protocol TCP
real_server 192.168.21.127 3306 {
weight 1
MISC_CHECK {
misc_path "/etc/keepalived/check_slave.pl 192.168.21.127"
misc_dynamic
}
}
real_server 192.168.21.128 3306 {
weight 1
MISC_CHECK {
misc_path "/etc/keepalived/check_slave.pl 192.168.21.128"
misc_dynamic
}
}
##################################################################################################
:wq! #保存退出
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
六、设置MySQL主从监控脚本check_slave.pl
vi /etc/keepalived/check_slave.pl #编辑,添加以下代码
##################################################################################################
#!/usr/bin/perl -w
use DBI;
use DBD::mysql;
# CONFIG VARIABLES
$SBM = 120;
$db = "osyunweidb";
$host = $ARGV[0];
$port = 3306;
$user = "checkslave";
$pw = "123456";
# SQL query
$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 eq "No" || $Slave_SQL_Running eq "No" ) {
exit 1;
} else {
if ( $Seconds_Behind_Master > $SBM ) {
exit 1;
} else {
exit 0;
}
}
##################################################################################################
:wq! #保存退出
chmod +x /etc/keepalived/check_slave.pl #添加脚本执行权限
七、设置更新LVS虚拟服务器(VIP)地址的arp记录到网关脚本
vi /etc/keepalived/clean_arp.sh #编辑,添加以下代码
#!/bin/sh
VIP=192.168.21.254
GATEWAY=192.168.21.2
/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null
:wq! #保存退出
chmod +x /etc/keepalived/clean_arp.sh #添加脚本执行权限
八、测试LVS+Keepalived是否正常运行
service keepalived restart #在两台LVS主备服务器上重启keepalived
ipvsadm -L #在两台LVS主备服务器上执行此命令,看到如下图所示
ip addr show #在两台LVS主备服务器上执行此命令,看到如下图所示
#从图中可以看到VIP:192.168.21.254现在指向的是LVS主服务器
1、关闭LVS主服务器的keepalived服务,查看LVS备服务器是否正常接管keepalived
service keepalived stop #在LVS主服务器上运行
此时,在两台LVS主备服务器上执行ip addr show命令,如下图所示
系统运维 www.osyunwei.com 温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
可以看到VIP:192.168.21.254现在指向的是LVS备服务器,说明LVS备服务器已经接管keepalived,测试成功。
2、停止MySQL从服务器192.168.21.127上面的主从同步服务
mysql -u root -p #进入MySQL控制台
slave start; #停止同步
在LVS备服务器执行ipvsadm -L命令,可以看到MySQL从服务器192.168.21.127已经从负载均衡列表中被剔除了,测试成功。
3、从客户端连接LVS虚拟服务器(VIP):192.168.21.254
telnet 192.168.21.254 3306 #执行此命令,如下图所示,说明测试成功。
tail -f /var/log/messages #查看LVS日志信息
至此,LVS+Keepalived实现MySQL从库读操作负载均衡配置完成。
LVS+Keepalived实现MySQL从库读操作负载均衡配置的更多相关文章
- LVS+Keepalived实现MySQL从库读操作负载均衡
http://www.osyunwei.com/archives/7464.html (学习运维知识好站) 说明: 操作系统:CentOS 5.X 64位 MySQL主服务器:192.168.21.1 ...
- MySQL读写分离高可用集群及读操作负载均衡(Centos7)
目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- LVS + KEEPALIVED + WINDOWS SERVER 2008 R2 ------高可用负载均衡(转)
工作原理此处不作讲解,自己去官方网站学习(http://www.linuxvirtualserver.org),这里重点讲如何配置!注:最好从官方网站对其进行了解,不至于会对某些问题产生误解,尽管是英 ...
- LVS+Keepalived实现mysql的负载均衡
1 初识LVS:Linux Virtual Server 1.1 LVS是什么 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...
- 使用LVS+keepalived实现mysql负载均衡的实践和总结
前言 经过一段时间的积累,数据库的架构就需要根据项目不断的进行变化. 从单台数据库,到了两台数据库的主从,再到读写分离,再到双主,现在进一步需要更多的数据库服务器去支撑更加可怕的访问量. 那么经过那么 ...
- python实现mysql的读写分离及负载均衡
Oracle数据库有其公司开发的配套rac来实现负载均衡,目前已知的最大节点数能到128个,但是其带来的维护成本无疑是很高的,并且rac的稳定性也并不是特别理想,尤其是节点很多的时候. 但是,相对my ...
- Atlas mysql的读写分离和负载均衡<转>
mysql的读写分离和负载均衡 http://my.oschina.net/superbigfu/blog/178134
- 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境
应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...
随机推荐
- Linux内核分析 读书笔记 (第五章)
第五章 系统调用 5.1 与内核通信 1.调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个: 为用户空间提供了硬件的抽象接口. 系统调用保证了系统的稳定和安全. 实现多任务和虚拟内 ...
- a simple example for spring AOP
/** * Created by Administrator on 2015/11/25. * a interface */public interface ArithmeticCalculator{ ...
- 《Multiplayer Game Programming》阅读笔记
在图书馆发现一本<网络多人游戏架构与编程>-- Joshua Glazer, Sanjay Madhav 著.书挺新的,17年出版的,内容很有趣,翻一翻可以学到不少在<计算机网络&g ...
- java中for循环的几种方式
比如定义一个数组int a[]={1, 2, 3, 4},下面我们罗列一下遍历这个数组的方法 1 for(;;) 这也是最常用的方法,不多做解释.代码如下 int a[] = {1, 2, 3, 4} ...
- book项目分析
需求1:用户注册 需求如下: 1)访问注册页面 2)填写注册信息,提交给服务器 3)服务器应该保存用户 4)当用户已经存在----提示用户注册 失败,用户名已存在 5)当用户不存在-----注册成功 ...
- socket.io框架
socket.io框架 一.问题背景 目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是 ...
- Android控件第4类——ProgressBar
ProgressBar是进度条,是比较常用的控件.它有一个抽象的子类——AbsSeekBar,AbsSeekBar有两个比较常用子类,SeekBar.RatingBar. 1.ProgressBar, ...
- Angular $scope和$rootScope
<!DOCTYPE html><html ng-app='myModule'><head lang="en"> <meta charset ...
- Wireshark协议分析工具应用
一.Wireshark简介与安装 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用W ...
- hive-site.xml
https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmi ...