资源列表
操作系统 | 配置 | 主机名 | IP地址 |
CentOS 7.9 | 2C4G | lb01 | 192.168.86.120 |
CentOS 7.9 | 2C4G | lb02 | 192.168.86.121 |
CentOS 7.9 | 2C4G | web01 | 192.168.86.122 |
CentOS 7.9 | 2C4G | web02 | 192.168.86.123 |
基础环境
·关闭防火墙
systemctl stop firewalld systemctl disable firewalld
·关闭内核机制
setenforce 0 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
·修改主机名
hostnamectl set-hostname lb01 hostnamectl set-hostname lb02 hostnamectl set-hostname web01 hostnamectl set-hostname web02
一、部署web节点
安装httpd服务,两台web节点都要布置
yum -y install httpd systemctl enable httpd --now echo 'this is web01' > /var/www/html/index.html
二、布置主节点
加载 ip_vs 模块
modprobe ip_vs cat /porc/net/ip_vs
安装 ipvsadm 管理工具和 Keepalived
yum -y install ipvsadm keepalived
修改配置文件
# 打开配置文件,并把所有的内容删除,把以下内容粘贴上去
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LB01
}
vrrp_instance VI_1 {
state MASTER # 两个 DS,一个为 MASTER 一个为 BACKUP
interface ens33 # 当前 IP 对应的网络接口,通过 ifconfig 查询
virtual_router_id 62 # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
priority 200 # 优先级值设定:MASTER 要比 BACKUP 的值大
advert_int 1 # 通告时间间隔:单位秒,主备要一致
authentication { # 认证机制,主从节点保持一致即可
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.86.110 # VIP,可配置多个
}
}
# web 配置
virtual_server 192.168.86.110 80 {
delay_loop 3 # 设置健康状态检查时间
lb_algo rr # 调度算法,这里用了 rr 轮询算法
lb_kind DR # 这里测试用了 Direct Route 模式
# persistence_timeout 50 # 持久连接超时时间,注意添加此项配置客户端连续请求时,请求到同一节点,测试环境建议注释掉
protocol TCP
real_server 192.168.86.121 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3 # 旧版本为 nb_get_retry
delay_before_retry 3 # 重试间隔3秒
connect_port 80
}
}
real_server 192.168.86.122 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
三、布置备份节点
加载 ip_vs 模块
modprobe ip_vs cat /porc/net/ip_vs
安装 ipvsadm 管理工具和 Keepalived
yum -y install ipvsadm keepalived
修改配置文件
# 打开配置文件,并修改以下内容
vi /etc/keepalived/keepalived.conf
router_id LB02
state BACKUP
priority 20
调整proc响应参数
echo 'net.ipv4.conf.all.send_redirects = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.default.send_redirects = 0' >> /etc/sysctl.conf
echo 'net.ipv4.conf.ens33.send_redirects = 0' >> /etc/sysctl.conf
sysctl -p
启动 Keepalived
systemctl start keepalived
四、测试
在web节点中编写脚本
[root@web01 ~]# vi start.sh
#!/bin/bash
SNS_VIP=192.168.207.200
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
[root@web01 ~]# sh start.sh start # 执行脚本
开一台客户机用curl命令测试
[root@localhost ~]# curl 192.168.86.110
this is web02
[root@localhost ~]# curl 192.168.86.110
this is web01
在客户机中编写脚本测试
[root@localhost ~]# cat test.sh
#!/bin/bash
for i in $(seq 1 1000)
do
curl 192.168.86.110
sleep 1
done
# 执行脚本,并把主节点服务器关闭测试,如果脚本没有报错就是成功了
[root@localhost ~]# sh test.sh