Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2802734
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Mysql/postgreSQL

2015-01-17 20:31:56

                            使用IPVS分发MySQL读请求

     在MySQL的部署场景中,经常使用HAproxy和ipvs来作为读请求转发的网关.
ipvs的好处在于本身不需要daemon的方式来运行,而是直接作为kernel的服务来提供;
当ipvs和应用程序服务器在同一网段时,可以使用DR模式,这样可以避免在返回
数据时还需由网关来处理.

   本例使用了4台Mysql从库,1台主机充当ipvs服务器.

VIP:192.168.10.225
RIP1:192.168.10.145
RIP2:192.168.10.150
RIP3:192.168.10.151
RIP4:192.168.10.180

 在ipvs主机上安装ipvs模块,由于系统是2.6.18-194的内核,因此下载了 ipvs 1.4.6的版本

[root@db135 ~]# uname -r
2.6.18-194.el5

[root@db135 ~]#ln -s /usr/src/kernels/2.6.18-194.el5-x86_64/ /usr/src/linux


[root@db135 soft]# cd ipvsadm-1.24
[root@db135 ipvsadm-1.24]# make
[root@db135 ipvsadm-1.24]# make install

检查是否安装成功

[root@db135 ipvsadm-1.24]# ipvsadm --version
ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1)

[root@db135 ipvsadm-1.24]# lsmod | grep ip_vs
ip_vs_rr               35009  1
ip_vs_wrr              35905  0
ip_vs                 122113  5 ip_vs_rr,ip_vs_wrr

模块已成功加载

现在开始配置ipvs,先为转发的网卡配置一个虚拟ip


[root@db135 ~]#ifconfig eth0:1 192.168.10.225  netmask 255.255.255.255 up
[root@db135 ~]#route add -host 192.168.10.225 dev eth0:1

清除原来的ipvs配置
[root@db135 ~]#ipvsadm -C

在ipvs上新增一个服务器,使用负载平均分发到后端服务器的策略
[root@db135 ~]#ipvsadm -A -t 192.168.10.225:3307  -s rr

为ipvs新增服务器增加后端真实的服务器

[root@db135 ~]#ipvsadm -a -t 192.168.10.225:3307 -r 192.168.10.145:3307 -g

[root@db135 ~]#ipvsadm -a -t 192.168.10.225:3307 -r 192.168.10.150:3307 -g

[root@db135 ~]#ipvsadm -a -t 192.168.10.225:3307 -r 192.168.10.151:3307 -g

[root@db135 ~]#ipvsadm -a -t 192.168.10.225:3307 -r 192.168.10.180:3307 -g


查看现在的ipvsadm的配置情况

[root@db135 ipvsadm-1.24]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.225:opsession-prxy rr
  -> 192.168.10.140:opsession-prxy Route   1      0          0        
  -> 192.168.10.150:opsession-prxy Route   1      0          0 
  -> 192.168.10.151:opsession-prxy Route   1      0          0 
  -> 192.168.10.180:opsession-prxy Route   1      0          0 

 

在145,150,151和180的机器上分别执行以下命令

 [root@c12 ~]#  ifconfig lo:0 192.168.10.225 netmask 255.255.255.255   up
 [root@c12 ~]# route add -host 192.168.10.225 dev lo:0
 [root@c12 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
 [root@c12 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
 [root@c12 ~]#echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
 [root@c12 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
 [root@c12 ~]# sysctl -p >/dev/null 2>&1
为了使配置永久生效,建议把配置写入/etc/sysctl.conf的文件中.


至此使用ipvs充当mysql读请求转发网关配置完成,使用sysbenc做压力测试,可以看到客户连接能够均匀的在四台服务器上被分发.

[root@db135 ipvsadm-1.24]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.225:opsession-prxy rr
  -> 192.168.10.140:opsession-prxy Route   1      64          0        
  -> 192.168.10.150:opsession-prxy Route   1      64          0 
  -> 192.168.10.151:opsession-prxy Route   1      64          0 
  -> 192.168.10.180:opsession-prxy Route   1      63          1 

 

    

阅读(3202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~