主从热备+负载均衡(LVS + keepalived)
Posted Web编程开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主从热备+负载均衡(LVS + keepalived)相关的知识,希望对你有一定的参考价值。
作者丨youzhibing2904
链接:
https://www.cnblogs.com/youzhibing/p/5021224.html
码云(gitee):https://gitee.com/youzhibing
环境准备
本机 + virtualBox + 4台centOs虚拟机,如下图
virtualBox安装以及CentOS安装这里就不再演示,大家自行搭建;本机在本次试验中扮演的角色就是客户端,起到一个发送请求的作用,两台CentOS做负载均衡服务器(一台为主机,一台为备机),另外两台作为真实的Web服务器(安装有tomcat)。
192.168.1.114(master),备机为
192.168.1.112(brucelee)。Web服务器A为
192.168.1.111(youzhibing),Web服务器B为
192.168.1.115(youzhibing03),四台机器命名除了master
外都不太规范,但不影响实验。四台CentOS的防火墙都需要关
闭。利用Xshell链接CentOS,如下图
配置两台web服务器
和本地部署web项目一样,将myWeb部署到tomcat中,开启tomcat,宿主机访问(virtualBox安装linux,并搭建tomcat请点这),如下图
将这两台web服务器都配置成lvs的real server,编辑realserver脚本文件,进入指定文件夹:cd /etc/init.d/,编辑脚本文件:vim realserver,如下图
/etc/init.d/realserver 内容如下
#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org
SNS_VIP=192.168.1.200
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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 $SNS_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 755 realserver,开启realserver服务:service realserver start;
注意:配置real server是web服务器都需要配置的,有多少台就配置多少台!
配置负载服务器(master)
安装Keepalived
yum install -y keepalived
在CentOS下,通过yum install命令可以很方便地安装软件包,但是前提是你的虚拟机要联网,若没有联网则先从有网的地方下载压缩包,然后拷贝或者上传到linux系统,再进行安装;
配置keepalived
①进入keepalived.conf所在目录:cd
/etc/keepalived
②首先清除掉keepalived原有配置:>
keepalived.conf
③重新编辑keepalived配置文件:vi keepalived.conf
内容如下:
配置负载服务器(slave)
和主负载服务器一样,先安装keepalived,然后编辑keepalived.conf,内容如下,与主负载服务器有些许差别
启动keepalive服务,主从都要启动!
service keepalived start
如果所有的"代码主题"都不符合你的要求,你可以参考"一键排版"下的"代码块样式"自定义
效果展示
负载均衡演示
这里出现了问题,发现同一个浏览器一段时间内刷新,得到的结果是同一个,也就是说同一个ip某一段时间内的请求交给了同一台real server处理,用centos上的浏览器测试也是一段时间内的请求得到的是同一个结果,但是与宿主机却有所不同,比如宿主机得到的是相同的192.168.1.115,而centos上得到的却是192.168.1.111,,可明明我配置了persistence_timeout 0,找了不少资料,还是没能解决!希望知道的朋友可以不吝赐教,在评论区进行留言,谢谢了!
a.web服务器出现故障
192.168.1.115发生故障,关闭115也就是youzhibing03的tomcat服务
那么宿主机与虚拟机上的结果都只有一个,都得到如下结果
b.web服务器修复,重新启动115的tomcat服务
宿主机得到如下结果
可虚拟机上显示的却还是192.168.111的结果
主从热备演示
a、关闭主负载服务器的keepalived服务
刷新页面,依然能得到如下结果
那么也就说明从负载服务器(brucelee)接管了,我们来看下日志
发现从负载服务器确实接管了主负载服务器的任务
b.当之前的主负载服务器(master)修复后,日志文件如下
主负载服务器恢复后,从负载服务器让出位置,回到最初的主从状态了!
总结
总的来说,最终的效果还是符合标题的,虽然在负载均衡那一块有些许疑问,好像没有达到负载均衡的目的,但是也确实只是好像,因为总体而言还是有负载均衡效果的,比如宿主机的得到的是115的结果,而虚拟机上的得到的是111的结果;
目前流行的LVS解决方案中,在Web服务器端也有采用了nginx+Tomcat这样的搭配类型,静态文件和动态文件分开进行处理,也不失为一种有效的尝试。在以后的日子里,我会陆续进行实践,并分享给大家!
后话
这篇博客其实周六就写好了,但是一直纠结负载均衡那个位置,迟迟没有发表出来,也是希望对自己和对大家负责吧;但是有好心不一定就有好的结果,查阅了不少资料,也进行了不少修改,可负载均衡的效果一直没有改变(不是没有哦!),离我预期的有些出入,虽然有出入,但我认为负载均衡的效果是存在的,只是与单个浏览器刷新而得到两个效果之间轮流切换有一些不同罢了!
另外提一点,如果大家想亲手实践下的话,我建议大家的硬件不要太低了,我的i7处理器 + 4G内存,运行主机 +4台虚拟机有点卡,建议大家内存上大点,最好8G以上;
最后强调一点:实践是检验真理的唯一标准! 有些许的冲动就赶快去实践!
推荐↓↓↓
长
按
关
注
以上是关于主从热备+负载均衡(LVS + keepalived)的主要内容,如果未能解决你的问题,请参考以下文章