LVS是Linux Virtual Server的缩写,是一种基于Linux内核实现的高可用性、高性能的负载均衡技术。它可以将来自客户端的请求分发到多台服务器上,实现多台服务器的负载均衡,提高整个系统的性能和可用性。
LVS技术主要包括以下几个组件:
LVS技术广泛应用于互联网服务、网络游戏、数据中心等领域,能够提高系统的性能和可用性,降低系统的维护成本。
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netmast] [--pepersistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -Ln|l [options]
--numeric, -n: 以数字形式输出地址和端口号
--exact: 扩展信息,精确值
--stats: 统计信息
--rate: 输出速率信息
ipvsadm -Z [-t|u|f service-address]
/proc/net/ip_vs
/proc/net/ip_vs_conn
建议保存至 /etc/sysconfig/ipvsadm
ipvsadm-save -n > /PATH/TO/IPVSADM_FILE
ipvsadm -Sn > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
ipvsadm-restore < /PATH/TO/IPVSADM_FILE
ipvsadm -R < /PATH/TO/IPVSADM_FILE
systemctl restart ipvsadm.service
1、管理集群服务:增,改,删
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout]
ipvsadm -D -t|u|f service-address
-t|u|f:
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法:默认为wlc
2、管理集群上的RS:增、改、删
-g:gateway, dr类型,默认
-i:ipip, tun类型
-m:masquerade,nat类型
-w weight:权重
1、RR: roundrobin, 轮训
2、WRR: Weighted RR, 加权轮训
3、SH: Source Hashing, 实现session sticky, 源IP地址hash; 将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH: Destination Hashing; 目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS, 典型使用场景是正向代理缓存场景中的负载均衡,如:带宽运营商
ip_forward=1
route add default gw 192.168.0.201
# -t:tcp, -s wrr:加权 轮训
ipvsadm -A -t 172.20.0.200:80 -s wrr
# -m: NAT模式;默认:DR模式,不支持映射到不同端口;-w:权重,默认是1
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17:8080 -m -w 3
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.27:8080 -m
2.router:路由器配置
ip_forward=1
route add default gw 192.168.0.200
eth0 配置在一个网段
DIP,RIP配置在一个网段
ifconfig ens33:0 192.168.182.100/24
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:8 192.168.182.100 netmask 255.255.255.255
yum install httpd -y
cd /var/www/html
vi index.html
service httpd start
客户端验证:RIP:80能显示
VIP:80不能显示
yum install ipvsadm -y
# -t:tcp, -s rr:轮训
ipvsadm -A -t 192.168.182.100:80 -s rr
# -m: NAT模式;默认:DR模式,不支持映射到不同端口;-w:权重,默认是1;-g:DR模型,-m:NET模型
ipvsadm -a -t 192.168.182.128:80 -r 192.168.182.129 -g
ipvsadm -a -t 192.168.182.128:80 -r 192.168.182.130 -g
ipvsadm -ln
# 浏览器刷新:访问vip
ipvsadm -lnc
netstat -natp
Keepalived 是一个用于 Linux 平台的高可用性软件。它实现了虚拟路由器冗余协议 (VRRP) 和健康检查功能,可以用于确保在多台服务器之间提供服务的高可用性。Keepalived 可以检测服务器的故障,并在主服务器宕机时,自动将备份服务器提升为主服务器,确保服务的持续性和可用性。
Keepalived 可以在主备服务器之间动态分配虚拟 IP 地址,使客户端能够在主备服务器之间无缝切换,提高服务的可用性。此外,Keepalived 还支持基于文本文件的配置和基于 SNMP 的监控。它可以与常用的负载均衡器配合使用,如 HAProxy、Nginx 等。
总的来说,Keepalived 是一个功能强大的工具,可用于提供高可用性服务。它是一个免费的开源软件,广泛应用于企业和个人服务器环境中。
架构图如下:
# 安装
yum install keepalived -y
# 启动
service keepalived start
# 配置文件位置
/etc/keepalived/keepalived.conf
# 查看日志
tail -f /var/log/message
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:8 192.168.182.100 netmask 255.255.255.255
yum install httpd -y
cd /var/www/html
echo "from ooxxip" > index.html
service httpd start
yum -y install keepalived
yum -y install ipvsadm
主节点配置:
# /etc/keepalived/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 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict 如果还是访问不了VIP,可以把这行注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
# 主
state MASTER
# 备
# state BACKUP
interface ens33
virtual_router_id 51
# 主
priority 100
# 备
# priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.182.100/32 dev ens33 label ens33:7
}
}
virtual_server 192.168.182.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.182.130 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.182.131 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
从节点配置:
# 复制一份修改好的配置到从主机,修改 1、state BACKUP,2、priority 50
cd /etc/keepalived/ && scp ./keepalived.conf root@192.168.182.129:`pwd`
# 启动
/bin/systemctl start keepalived.service
# RS切记关闭防火墙,如果web也访问不了,lvs也可以关闭防火墙试试
systemctl stop firewalld
# 查看是否配置了VIP
#查看是否配置了规则
# 主未挂,备则会自动配置规则,但是不会配置VIP,保证只有一个VIP对外提供服务
# 一旦主挂了,则备接管(测试,down掉主网卡:ifconfig ens33 down)
缺点:脑裂问题
【分析原因】:keepalived自身不是高可用,主进程可能会被杀死,但是进程杀死后,没有回收VIP,导致主keepalived无法广播,备keepalived得不到主的广播信号,导致备也会配上VIP,使得主备都有VIP,最后CIP访问VIP的三次握手可能会被打散到主备keepalived上,无法建立连接,导致无法访问。
【解决方案】:
最后附上keepalived配置文件说明:
! Configuration File for keepalived
global_defs { #全局定义部分
notification_email { #设置报警邮件地址,可设置多个
acassen@firewall.loc #接收通知的邮件地址
}
notification_email_from test0@163.com #设置 发送邮件通知的地址
smtp_server smtp.163.com #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
smtp_connect_timeout 30 #设置 连接 smtp server的超时时间
router_id LVS_DEVEL #主机标识,用于邮件通知
vrrp_skip_check_adv_addr
vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播
vrrp_garp_interval 0
vrrp_gna_interval 0
script_user keepalived_script #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
enable_script_security #如过路径为非root可写,不要配置脚本为root用户执行。
}
vrrp_script chk_nginx_service { #VRRP 脚本声明
script "/etc/keepalived/chk_nginx.sh" #周期性执行的脚本
interval 3 #运行脚本的间隔时间,秒
weight -20 #权重,priority值减去此值要小于备服务的priority值
fall 3 #检测几次失败才为失败,整数
rise 2 #检测几次状态为正常的,才确认正常,整数
user keepalived_script #执行脚本的用户或组
}
vrrp_instance VI_1 { #vrrp 实例部分定义,VI_1自定义名称
state MASTER #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
interface ens33 #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
virtual_router_id 51 #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
priority 100 #定义优先级,数字越大,优先级越高。
advert_int 1 #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
authentication { #设置验证类型和密码,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.119.130
}
track_script { #脚本监控状态
chk_nginx_service #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
}
notify_master "/etc/keepalived/start_haproxy.sh start" #当前节点成为master时,通知脚本执行任务
notify_backup "/etc/keepalived/start_haproxy.sh stop" #当前节点成为backup时,通知脚本执行任务
notify_fault "/etc/keepalived/start_haproxy.sh stop" #当当前节点出现故障,执行的任务;
}
virtual_server 192.168.119.130 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #后端调试算法(load balancing algorithm)
lb_kind DR #LVS调度类型NAT/DR/TUN
#persistence_timeout 60 同一IP的连接60秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.119.120 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
real_server 192.168.119.121 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
}
vrrp_instance VI_2 { #vrrp 实例部分定义,VI_1自定义名称
state BACKUP #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP 分别表示(主|备)
interface ens33 #网卡设置,绑定vip的子接口,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
virtual_router_id 52 #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
priority 90 #定义优先级,数字越大,优先级越高。
advert_int 1 #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
authentication { #设置验证类型和密码,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.119.131
}
}
virtual_server 192.168.119.131 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #后端调试算法(load balancing algorithm)
lb_kind DR #LVS调度类型NAT/DR/TUN
#persistence_timeout 60 #同一IP的连接60秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.119.120 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
real_server 192.168.119.121 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
}
LVS + Keepalived 介绍和实战操作演示就先到这里了,有任何疑问欢迎给我留言,也可关注我的公众号【大数据与云原生技术分享】,后续会持续更新相关技术文章~。
更新时间:2024-08-08
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号