ipvsadm分发MySQL读请求
在MySQL的部署场景中,经常使用HAproxy和ipvs来作为读请求转发的网关.
ipvs的好处在于本身不需要daemon的方式来运行,而是直接作为kernel的服务来提供;
当ipvs和应用程序服务器在同一网段时,可以使用DR模式,这样可以避免在返回
数据时还需由网关来处理.
硬件:
ipvsadm服务器192.168.1.100,VIP虚拟ip配置为192.168.1.204
三台mysql从服务器:
192.168.1.135
192.168.1.136
192.168.1.137
一,安装ipvsadm
1,yum安装
#yum -y install ipvsadm
建立ipvsadm文件
#ipvsadm --save > /etc/sysconfig/ipvsadm
初始化配置
#ipvsadm -C
二,为ipvsadm服务器网卡配置一个虚拟IP
1,查看网卡名ip addr,记住en开头的网卡名,打开该网卡名的配置文件
#vi /etc/sysconfig/network-scripts/ifcfg-en你的网卡名
2,添加一行ip
IPADDR1=192.168.1.204
3,service network restart 重启网卡。
三,配置ipvsadm
1,ipvsadm -C清除之前的配置
2,在ipvs上新增一个服务器,使用负载平均分发到后端服务器的策略
#ipvsadm -A -t 192.168.1.204:3306 -s rr
3,为ipvs新增服务器增加后端真实的服务器
#ipvsadm -a -t 192.168.1.204:3306 -r 192.168.1.135:3306 -g
#ipvsadm -a -t 192.168.1.204:3306 -r 192.168.1.136:3306 -g
#ipvsadm -a -t 192.168.1.204:3306 -r 192.168.1.137:3306 -g
#ipvsadm --save
4,查看配置情况
# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:mysql rr
-> 192.168.1.135:mysql Route 1 0 0
-> 192.168.1.136:mysql Route 1 0 0
-> 192.168.1.137:mysql Route 1 0 0
四,配置Mysql从库服务器
1,在回路接口(lo网卡)上新增ipvsadm服务器的ip地址
# vi /etc/sysconfig/network-scripts/ifcfg-lo
#添加下面一行
IPADDR1=192.168.1.204
2,添加静态路由,(更多详细操作)
route add -host 192.168.1.204 dev lo
3,设置网卡通讯规则(更多细节)
# 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 #/dev/null 2>&1 是什么意思?
为了使配置永久生效,建议把配置写入/etc/sysctl.conf的文件中。
每台从库服务器都需要同样的配置。
在第三台主机上通过VIP登录mysql 3次后,可以看到ipvsadm平均分发了对从库的访问。
# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP localhost.localdomain:mysql rr -> 192.168.1.135:mysql Route 1 1 0 -> 192.168.1.136:mysql Route 1 1 0 -> 192.168.1.137:mysql Route 1 1 0
最后可以使用sysbench做压力测试。
本文在 使用IPVS分发MySQL读请求 的基础上根据自身的经验总结而来。