1、环境准备
本机 + virtualBox + 4台centOs虚拟机,如下图
![7596c6927ee34a46c3ccb4757c2a8dfc.png](https://img-blog.csdnimg.cn/img_convert/7596c6927ee34a46c3ccb4757c2a8dfc.png)
virtualBox安装以及CentOS安装这里就不再演示,大家自行搭建;本机在本次试验中扮演的角色就是客户端,起到一个发送请求的作用,两台CentOS做负载均衡服务器(一台为主机,一台为备机),另外两台作为真实的Web服务器(安装有tomcat)。
本次实验基于DR负载均衡模式(直接路由,旭龙兄的博客有讲解),设置一个VIP(Virtual IP)为192.168.1.200,用户只需要访问这个IP地址即可获得网页服务。其中,负载均衡主机为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,如下图
![80ad03d75a42c696ab26cfe0138d6689.png](https://img-blog.csdnimg.cn/img_convert/80ad03d75a42c696ab26cfe0138d6689.png)
2、配置两台web服务器
和本地部署web项目一样,将myWeb部署到tomcat中,开启tomcat,宿主机访问(virtualBox安装linux,并搭建tomcat请点这),如下图
![e7bf9a80188b9e80f66d7c62bc6049f9.png](https://img-blog.csdnimg.cn/img_convert/e7bf9a80188b9e80f66d7c62bc6049f9.png)
![2d870380ba04e06e8de0f2c07390e67d.png](https://img-blog.csdnimg.cn/img_convert/2d870380ba04e06e8de0f2c07390e67d.png)
![5b23441d906bd63fa37e70855b25b4a9.png](https://img-blog.csdnimg.cn/img_convert/5b23441d906bd63fa37e70855b25b4a9.png)
/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.orgSNS_VIP=192.168.1.200. /etc/rc.d/init.d/functionscase "$1" instart) 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 1esacexit 0
保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start;
注意:配置real server是web服务器都需要配置的,有多少台就配置多少台!
3、配置负载服务器(master)
3.1、安装Keepalived
yum install -y keepalived
在CentOS下,通过yum install命令可以很方便地安装软件包,但是前提是你的虚拟机要联网,若没有联网则先从有网的地方下载压缩包,然后拷贝或者上传到linux系统,再进行安装;
3.2、配置keepalived
①进入keepalived.conf所在目录:cd /etc/keepalived
②首先清除掉keepalived原有配置:> keepalived.conf
③重新编辑keepalived配置文件:vi keepalived.conf
内容如下:
global_defs { notification_email { 997914490@qq.com } notification_email_from sns-lvs@gmail.com smtp_server 192.168.1.114 smtp_connection_timeout 30 router_id LVS_MASTER # 设置lvs的id,在一个网络应该是唯一的}vrrp_instance VI_1 { state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备 interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) virtual_router_id 66 # 虚拟路由编号,主从要一直 priority 100 # 优先级,数值越大,获取处理请求的优先级越高 advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数) authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 # 定义虚拟ip(VIP),可多设,每行一个 }}# 定义对外提供的LVS的VIP以及portvirtual_server 192.168.1.200 8080 { delay_loop 6 # 设置健康检查时间,单位为秒 lb_algo wrr # 设置负载调度的算法为wrr lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 persistence_timeout 0 # 同一IP 0秒内的请求都发到同个real server protocol TCP real_server 192.168.1.111 8080 { # 指定real server1的ip地址 weight 3 # 配置节点权值,数值越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.1.115 8080 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 } }}
3.3、配置负载服务器(slave)
和主负载服务器一样,先安装keepalived,然后编辑keepalived.conf,内容如下,与主负载服务器有些许差别
global_defs {
notification_email {
997914490@qq.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.1.112
smtp_connection_timeout 30
router_id LVS_BACKUP # 设置lvs的id,在一个网络应该是唯一的
}
vrrp_instance VI_1 {
state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 # 当前进行vrrp通讯的网络接口卡(当前进行vrrp通讯的网络接口卡)
virtual_router_id 66 # 虚拟路由编号,主从要一致
priority 99 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 # 定义虚拟ip(VIP),可多设,每行一个
}
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.200 8080 {
delay_loop 6 # 设置健康检查时间,单位为秒
lb_algo wrr # 设置负载调度的算法为wrr
lb_kind DR # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0 # 同一IP 0秒内的请求都发到同个real server
protocol TCP
real_server 192.168.1.111 8080 { # 指定real server1的ip地址
weight 3 # 配置节点权值,数值越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.115 8080 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
启动keepalive服务,主从都要启动!
service keepalived start
如果所有的"代码主题"都不符合你的要求,你可以参考"一键排版"下的"代码块样式"自定义
4、效果展示
4.1、负载均衡演示
![efaa5bc828cd12304c3a3f98108cfab2.png](https://img-blog.csdnimg.cn/img_convert/efaa5bc828cd12304c3a3f98108cfab2.png)
![856b7dc845b83d293f82a5056297ad39.png](https://img-blog.csdnimg.cn/img_convert/856b7dc845b83d293f82a5056297ad39.png)
这里出现了问题,发现同一个浏览器一段时间内刷新,得到的结果是同一个,也就是说同一个ip某一段时间内的请求交给了同一台real server处理,用centos上的浏览器测试也是一段时间内的请求得到的是同一个结果,但是与宿主机却有所不同,比如宿主机得到的是相同的192.168.1.115,而centos上得到的却是192.168.1.111,,可明明我配置了persistence_timeout 0,找了不少资料,还是没能解决!
4.2、故障
①、web服务器出现故障
192.168.1.115发生故障,关闭115也就是youzhibing03的tomcat服务
![c5e395e2f1619206906eb2688a4409fb.png](https://img-blog.csdnimg.cn/img_convert/c5e395e2f1619206906eb2688a4409fb.png)
那么宿主机与虚拟机上的结果都只有一个,都得到如下结果
![02bb614f22f94146105dbbd0ab81d9e1.png](https://img-blog.csdnimg.cn/img_convert/02bb614f22f94146105dbbd0ab81d9e1.png)
②、web服务器修复,重新启动115的tomcat服务
![84c4c06895ecb02a4b9f61465bfbf0d3.png](https://img-blog.csdnimg.cn/img_convert/84c4c06895ecb02a4b9f61465bfbf0d3.png)
![efaa5bc828cd12304c3a3f98108cfab2.png](https://img-blog.csdnimg.cn/img_convert/efaa5bc828cd12304c3a3f98108cfab2.png)
可虚拟机上显示的却还是192.168.111的结果
4.3、主从热备演示
①、关闭主负载服务器的keepalived服务
![554786f89c07a3a0b189dde20e020224.png](https://img-blog.csdnimg.cn/img_convert/554786f89c07a3a0b189dde20e020224.png)
刷新页面,依然能得到如下结果
![edd4824ba38f19d2ecd5d5ec937582b1.png](https://img-blog.csdnimg.cn/img_convert/edd4824ba38f19d2ecd5d5ec937582b1.png)
那么也就说明从负载服务器(brucelee)接管了,我们来看下日志
![0f44bd79346acaff301c49472a987566.png](https://img-blog.csdnimg.cn/img_convert/0f44bd79346acaff301c49472a987566.png)
![7f285a2e44a75802f86cf9b593faa4c7.png](https://img-blog.csdnimg.cn/img_convert/7f285a2e44a75802f86cf9b593faa4c7.png)
发现从负载服务器确实接管了主负载服务器的任务
②、当之前的主负载服务器(master)修复后,日志文件如下
![b6bfd7ffeb220ea2d111c6741f97ccfd.png](https://img-blog.csdnimg.cn/img_convert/b6bfd7ffeb220ea2d111c6741f97ccfd.png)
![52a4ab3e3dd5af377db50725ad8d55dd.png](https://img-blog.csdnimg.cn/img_convert/52a4ab3e3dd5af377db50725ad8d55dd.png)
主负载服务器恢复后,从负载服务器让出位置,回到最初的主从状态了!
5、总结
总的来说,最终的效果还是符合标题的,虽然在负载均衡那一块有些许疑问,好像没有达到负载均衡的目的,但是也确实只是好像,因为总体而言还是有负载均衡效果的。