LVS (Linux Virtual Server)
LVS 是基于Linux操作系统实现的一个高性能、高可用、负载均衡服务器。其可以将网络流量分发到多台服务器上,使得网络服务可以线性扩展,从而在大量用户请求时仍能保持较好的响应速度。
DR (Direct Routing)
Direct Routing 模式是LVS的工作模式之一,它是基于MAC地址的负载均衡。在这种模式下,客户端请求只经过负载均衡器到达真实服务器,而响应数据则直接从真实服务器返回给客户端,不经过负载均衡器。
Keepalived
Keepalived 是用于健康检查和故障恢复的软件。通常与LVS结合使用,以提供高可用性。如果主LVS服务器故障,Keepalived可以将服务切换到备用LVS服务器。
实验环境
实验步骤
在node11和node12上分别执行命令安装keepalived
yum -y install keepalived
在node11上修改配置文件/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
global_defs {
#指定本机keepalaved名字(主从不能重复)
router_id LVS_MASTER
}
vrrp_instance VI_1 {
#声明成主服务器(MASTER)/声明成从服务器(SLAVE)
state MASTER
#定义相应网卡接口名称
interface eth0
#虚拟路由ID(主从应同步)
virtual_router_id 51
#Keepalaved主从服务器优先级(主服务器必须大于从服务器)
priority 100
#检查间隔,默认1秒
advert_int 1
authentication {
#设置身份验证方式(PASS或HA)
auth_type PASS
#身份验证密码
auth_pass 1111
}
virtual_ipaddress {
#指定负载调度器(指定VIP的地址)
192.168.80.188
}
}
#定义虚拟主机(指定VIP地址以及端口)
virtual_server 192.168.80.188 22 {
#服务器轮询间隔时间
delay_loop 6
#指定rr轮询算法
lb_algo rr
#指定DR模式
lb_kind DR
#指定数据转发协议
protocol TCP
#定义真实后端主机(指定IP地址以及端口)
real_server 192.168.80.17 22 {
#设置服务器权重
weight 1
#对真实后端主机TCP健康检查
TCP_CHECK {
#连接超时时间
connect_timeout 3
#重试时间间隔
delay_before_retry 3
#健康检查的连接端口
connect_port 22
#重试次数
retry 3
}
}
real_server 192.168.80.18 22 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 22
#重试次数
retry 3
}
}
}
在node12上修改配置文件/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.188
}
}
virtual_server 192.168.80.188 22 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.80.17 22 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 22
retry 3
}
}
real_server 192.168.80.18 22 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 22
retry 3
}
}
}
在node11和node12上分别执行命令启动keepalived服务
systemctl start keepalived && systemctl enable keepalived && systemctl status keepalived
在登录节点node17、node18分别部署realserver.sh脚本
vim /root/realserver.sh
#!/bin/bash
#引入函数库,提供各种实用功能
. /etc/rc.d/init.d/functions
#设置虚拟IP地址
VIP=192.168.80.188
#获取当前主机名
host=` /bin/hostname `
case "$1" in
start)
#关闭lo(本地回环接口)并立即重新启动它
/sbin/ifconfig lo down
/sbin/ifconfig lo up
#设置ARP忽略和声明参数
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
#将VIP配置为lo接口的别名
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#为VIP添加静态路由,使其通过lo:0接口路由
/sbin/route add -host $VIP dev lo:0
echo "LVS-DR real server Running."
;;
stop)
#删除lo:0别名接口
/sbin/ifconfig lo:0 down
#将ARP设置恢复为默认值
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 "LVS-DR real server Stopped."
;;
status)
#检查lo:0是否配置了VIP和路由
islothere=` /sbin/ifconfig lo:0 | grep $VIP`
isrothere=` netstat -rn | grep "lo:0" | grep $VIP`
#如果lo:0或路由不存在,则显示停止状态,否则显示正在运行
if [ ! "$islothere" -o ! "isrothere" ]; then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
#如果没有给定已知参数,输出使用方法
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
在登录节点node17、node18分别执行realserver.sh脚本
chmod 700 /root/realserver.sh
bash /root/realserver.sh start