转载于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从库读操作负载均衡配置的更多相关文章

  1. LVS+Keepalived实现MySQL从库读操作负载均衡

    http://www.osyunwei.com/archives/7464.html (学习运维知识好站) 说明: 操作系统:CentOS 5.X 64位 MySQL主服务器:192.168.21.1 ...

  2. MySQL读写分离高可用集群及读操作负载均衡(Centos7)

    目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...

  3. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  4. LVS + KEEPALIVED + WINDOWS SERVER 2008 R2 ------高可用负载均衡(转)

    工作原理此处不作讲解,自己去官方网站学习(http://www.linuxvirtualserver.org),这里重点讲如何配置!注:最好从官方网站对其进行了解,不至于会对某些问题产生误解,尽管是英 ...

  5. LVS+Keepalived实现mysql的负载均衡

    1 初识LVS:Linux Virtual Server 1.1 LVS是什么       LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起 ...

  6. 使用LVS+keepalived实现mysql负载均衡的实践和总结

    前言 经过一段时间的积累,数据库的架构就需要根据项目不断的进行变化. 从单台数据库,到了两台数据库的主从,再到读写分离,再到双主,现在进一步需要更多的数据库服务器去支撑更加可怕的访问量. 那么经过那么 ...

  7. python实现mysql的读写分离及负载均衡

    Oracle数据库有其公司开发的配套rac来实现负载均衡,目前已知的最大节点数能到128个,但是其带来的维护成本无疑是很高的,并且rac的稳定性也并不是特别理想,尤其是节点很多的时候. 但是,相对my ...

  8. Atlas mysql的读写分离和负载均衡<转>

    mysql的读写分离和负载均衡 http://my.oschina.net/superbigfu/blog/178134

  9. 利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境

    应用背景: MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动 切换到另外一台主机.LVS和Keppalived可以设定一个VIP来实 ...

随机推荐

  1. 总结and规划

    不知不觉中又过去了一年,马上就要读研究生了,因此有必要对自己进行必要的总结,以及对自己有个良好的规划. 首先,描述自己当前的心情——对未来充满了恐惧和焦虑. 马上大学就要毕业了,回首经历的大学生涯,似 ...

  2. mac系统下修复第三方Python包bug

    发现问题 今天在github上fork了CI 3.x的中文手册,按照README文档一步步进行Sphinx和相关工具的安装,最终build生成html版手册.操作到第6步执行`make html`的时 ...

  3. SCRUM 12.21

    从爬虫遇到的问题中我们学会了: 1.有的网站是有反爬虫机制的,外卖网站(我们猜测基本所有盈利性质的网站可能都是)全部都有. 2.我们对于反爬虫机制有了一定的了解.   本次爬虫测试中,我们最后连美团网 ...

  4. 个人作业Week3

    个人作业week3 一.  调研,评测 1.我的使用体验 版本:IOS版   BUG_1: 点击单词本中的“同步”后,会提示登录Microsoft账户.登录成功立即开始同步单词本.在单词本同步过程中, ...

  5. Oracle的安装与配置

    好久不来博客园了,有种熟悉而又陌生的感觉. 今天我装一下Oracle数据库,从头开始,因为昨天在虚拟机装了,不能用,卸掉了,系统也卸掉了,今天重新装,包括系统. 系统装好了,Oracle准备好了. 这 ...

  6. 分布式版本控制系统Git的安装与使用(作业2)

    (本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103) 分布式版本控制系统Git的安装与使用 一.安装Git b ...

  7. Spring Framework: @RestController vs @Controller

    https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annota ...

  8. GitLab添加ssh-key,操作无需每次输入账号密码

    git config --global credential.helper store 然后操作pull/push 会让输入用户名密码,第一次输入进去.下次再操作pull/push时就不需要输入用户名 ...

  9. taskService 流程任务组件

    act_ru_task:任务表act_ru_identitylink:权限表(流程定义和用户组(用户)之间的权限数据)act_ru_variable:参数表act_hi_attachment:任务附件 ...

  10. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...