实验前准备
主DR服务器:(ens33)192.168.188.11 ipvsadm、keepalived (ens33:0)192.168.188.188
备DR服务器:(ens33)192.168.188.12 ipvsadm、keepalived (ens33:0)192.168.188.188
Wbe服务器1:(ens33)192.168.188.13 (lo:0)192.168.188.188
Web服务器2:(ens33)192.168.188.14 (lo:0)192.168.188.188
客户端:192.168.188.1(本机Windows)
- 配置负载调度器(192.168.188.11、192.168.188.12)
- 关闭防火墙
systemctl stop firewalld
setenforce 0 - 安装ipvsadm和keepalived
yum -y install ipvsadm keepalived - 加载ipvs内核模块并查看
modprobe ip_vs
cat /proc/net/ip_vs - 配置keepalived
cd /etc/keepalived
备份配置文件
cp keepalived.conf keepalived.conf.bak
对配置文件进行修改
vim 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 127.0.0.1 smtp_connect_timeout 30 # 服务器(路由器)的名称,主备服务器名称不能一样,主写01,备写02 router_id LVS_01 vrrp_skip_check_adv_addr # 必须注释,意味着不再严格遵守VRRP协议,不注释VIP无法连接 #vrrp_strict # 下面原本还有,删不删都行 } vrrp_instance VI_1 { # 指定热备状态,MASTER代表主,BACKUP代表备 state MASTER # 指定承载VIP地址的物理接口 interface ens33 # 指定虚拟路由器的ID号,主备必须一致 virtual_router_id 10 # 优先级,数字越大代表优先级越高,主写100,备写90 priority 100 # 心跳频率(通报间隔秒数) advert_int 1 # 认证信息,主备必须一致 authentication { auth_type PASS auth_pass abc123 } # 集群的VIP地址,只有一个就只需要写一个 virtual_ipaddress { 192.168.188.188 } } # 指定虚拟服务器地址(VIP)、端口 virtual_server 192.168.188.188 80 { # 健康检查的间隔(秒) delay_loop 6 # 指定调度算法,rr是轮询 lb_algo rr # 指定集群工作模式,DR是直接路由 lb_kind DR # 连接保持时间(秒) persistence_timeout 50 protocol TCP # 指定第一个Web节点服务器的地址和端口 real_server 192.168.188.13 80 { # 权重 weight 1 # 原本的16行内容可以直接删除 # 添加以下健康检查的内容 TCP_CHECK { # 检查的端口 connect_port 80 # 连接超时时间(秒) coonect_timeout 3 # 重试次数 nb_get_retry 3 # 重试间隔 delay_before_retry 3 } } # 添加第二个Web节点服务器的地址和端口 real_server 192.168.188.14 80 { weight TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } # 底下一大堆内容可以全部删除
- 配置虚拟IP(VIP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.188.188 NETMASK=255.255.255.255
配置完重启网卡
systemctl restart network
打开虚拟网卡
ifup ens33:0
查看一下有没有生效
ip addr
启动keepalived服务
systemctl start keepalived - 启动ipvsadm服务
主DR服务器(192.168.188.11):
备份
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
配置规则
先清空
ipvsadm -C
ipvsadm -A -t 192.168.188.188:80 -s rr
ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.13:80 -g
ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.14:80 -g
查看分发策略
备DR服务器(192.168.188.12):
备份
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
不需要配置策略,直接查看
ipvsadm -ln,并没有策略 - 调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.confnet.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
- 关闭防火墙
- 配置Web节点服务器(192.168.188.13、192.168.188.14)
- 关闭防火墙
systemctl stop firewalld
setenforce 0 - 安装并启动httpd
yum -y install httpd
systemctl start httpd
检查一下端口对不对
netstat -anpt | grep :80,如果不是httpd就代表不对,端口被其他应用占用了,比如说nginx - 准备两个页面
Web服务器1(192.168.188.13):
echo 'who are you?' > /var/www/html/index.html
Web服务器2(192.168.188.14):
echo 'i am dzd!' > /var/www/html/index.html - 配置虚拟网卡(lo:0)
vim /etc/sysconfig/network-scripts/ifcfg-lo:0DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.188.188 NETMASK=255.255.255.255
重启网卡
systemctl restart network
启动虚拟网卡
ifup lo:0
查看
ip addr
添加路由规则
route add -host 192.168.10.180 dev lo:0 - 调整proc响应参数
vim /etc/sysctl.conf
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
sysctl -p
- 关闭防火墙
- 测试
- 我直接在本机的浏览器上进行的访问,在同一网段的虚拟机也可以测试
在客户端上访问http://192.168.188.188/,多刷新几次,节点服务器上的内容都能显示,说明负载均衡没问题(不显示其他内容就隔几十秒再刷新) - 在主DR服务器(192.168.188.11)上关掉Keepalived,模拟单点故障
systemctl stop keepalived
将客户端的浏览器缓存清空,再访问一次,依然能看到之前的内容,说明没有问题
- 我直接在本机的浏览器上进行的访问,在同一网段的虚拟机也可以测试