龙空技术网

LVS 和 Keepalived 介绍与实战操作演示

大数据老司机 2243

前言:

而今姐妹们对“keepalived配置域名”大约比较关心,咱们都想要了解一些“keepalived配置域名”的相关知识。那么小编也在网上搜集了一些有关“keepalived配置域名””的相关知识,希望同学们能喜欢,兄弟们一起来学习一下吧!

一、LVS 概述

LVS是Linux Virtual Server的缩写,是一种基于Linux内核实现的高可用性、高性能的负载均衡技术。它可以将来自客户端的请求分发到多台服务器上,实现多台服务器的负载均衡,提高整个系统的性能和可用性。

LVS技术主要包括以下几个组件:

LVS调度器:负责接收客户端请求并将其分发到后端的真实服务器上,根据不同的负载均衡算法进行分发。真实服务器:处理来自调度器的请求并返回响应,提供实际的服务。Keepalived:LVS的高可用组件,用于监控LVS调度器的状态并在发生故障时自动切换到备用调度器,以保证服务的高可用性。IPVS:内核中实现LVS技术的模块,实现负载均衡算法和请求分发等功能。

LVS技术广泛应用于互联网服务、网络游戏、数据中心等领域,能够提高系统的性能和可用性,降低系统的维护成本。

二、LVS 基本操作1)基本命令操作1、添加规则

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netmast] [--pepersistence_engine] [-b sched-flags] 
2、删除规则
ipvsadm -D -t|u|f service-address
3、清空定义的所有内容
ipvsadm -C
4、重载
ipvsadm -R
6、保存
ipvsadm -S [-n]
7、增、改RS规则
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
8、删除RS规则
ipvsadm -d -t|u|f service-address -r server-address
9、查看规则列表
ipvsadm -Ln|l [options] --numeric, -n: 以数字形式输出地址和端口号 --exact: 扩展信息,精确值 --stats: 统计信息 --rate: 输出速率信息
10、清空计数器
ipvsadm -Z [-t|u|f service-address]
11、ipvs规则
/proc/net/ip_vs
12、ipvs连接
/proc/net/ip_vs_conn
2)保存及重载规则1、保存

建议保存至 /etc/sysconfig/ipvsadm

ipvsadm-save -n > /PATH/TO/IPVSADM_FILEipvsadm -Sn > /PATH/TO/IPVSADM_FILEsystemctl stop ipvsadm.service
2、重载
ipvsadm-restore < /PATH/TO/IPVSADM_FILEipvsadm -R < /PATH/TO/IPVSADM_FILEsystemctl restart ipvsadm.service
三、LVS 四种模式实战操作讲解1)NAT 模式1、设计要点RIP与DIP在同一IP网络,RIP的网关要指向DIP支持端口映射Director要打开核心转发功能2、配置

1、管理集群服务:增,改,删

增、改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout]
删除:
ipvsadm -D -t|u|f service-address
service-address:
-t|u|f:-t:TCP协议的端口,VIP:TCP_PORT-u:UDP协议的端口,VIP:UDP_PORT-f:firewall MARK,标记,一个数字[-s scheduler]:指定集群的调度算法:默认为wlc

2、管理集群上的RS:增、改、删

增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]server-address:

rip[:port] 如省略port,不作端口映射选项:lvs类型:

-g:gateway, dr类型,默认-i:ipip, tun类型-m:masquerade,nat类型-w weight:权重
3、ipvs scheduleripvs scheduler:根据其调度是否考虑各RS当前的负载状态

两种:静态方法和动态方法静态方法:仅根据算法本身进行调度

1、RR: roundrobin, 轮训2、WRR: Weighted RR, 加权轮训3、SH: Source Hashing, 实现session sticky, 源IP地址hash; 将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定4、DH: Destination Hashing; 目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS, 典型使用场景是正向代理缓存场景中的负载均衡,如:带宽运营商
4、实验:实现NAT模式的LVS(必须原路返回)
ip_forward=1route 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:权重,默认是1ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17:8080 -m -w 3ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.27:8080 -m2.router:路由器配置ip_forward=1route add default gw 192.168.0.200
2)DR 模式1、DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:在前端网关做静态绑定在各RS使用arptables在各RS修改内核参数,来限制arp响应和通告的级别2、限制响应级别:arp_ignore0:默认值,表示可使用本地任意接口上配置在任意地址响应1:仅在请求目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应3、限制通告级别:arp_announce0:默认值,把本机所有接口的所有信息向每个接口的网络进行通知1:尽量避免将接口信息向非直接连接网络进行通知2:必须避免将接口信息向非网络进行通告4、实验:实现DR模式的LVS(不原路返回)步骤一:准备3台虚拟机步骤二:先配置3台虚拟机的网络
eth0 配置在一个网段DIP,RIP配置在一个网段
步骤三:配置lvs的VIP
ifconfig ens33:0 192.168.182.100/24echo "1" > /proc/sys/net/ipv4/ip_forward
步骤四(RS):调整RS的响应,通告级别(每一台RS都配)
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/ens33/arp_announceecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce
步骤五:在RS上配置VIP
ifconfig lo:8 192.168.182.100 netmask 255.255.255.255
步骤六:启动RS上的httpd服务
yum install httpd -ycd /var/www/htmlvi index.htmlservice httpd start客户端验证:RIP:80能显示VIP:80不能显示
步骤七:安装 LVS---ipvsadm
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 -gipvsadm -a -t 192.168.182.128:80 -r 192.168.182.130 -gipvsadm -ln# 浏览器刷新:访问vipipvsadm -lncnetstat -natp
3)TUN模式4)FULL-NAT模式四、Keepalived + LVS 实战操作

Keepalived 是一个用于 Linux 平台的高可用性软件。它实现了虚拟路由器冗余协议 (VRRP) 和健康检查功能,可以用于确保在多台服务器之间提供服务的高可用性。Keepalived 可以检测服务器的故障,并在主服务器宕机时,自动将备份服务器提升为主服务器,确保服务的持续性和可用性。

Keepalived 可以在主备服务器之间动态分配虚拟 IP 地址,使客户端能够在主备服务器之间无缝切换,提高服务的可用性。此外,Keepalived 还支持基于文本文件的配置和基于 SNMP 的监控。它可以与常用的负载均衡器配合使用,如 HAProxy、Nginx 等。

总的来说,Keepalived 是一个功能强大的工具,可用于提供高可用性服务。它是一个免费的开源软件,广泛应用于企业和个人服务器环境中。

架构图如下:

1) keepalived 安装以及基本操作

# 安装yum install keepalived -y# 启动service keepalived start# 配置文件位置/etc/keepalived/keepalived.conf# 查看日志tail -f /var/log/message
2)具体配置步骤【步骤一】至少准备四台虚拟机【步骤二】调整RS的响应,通告级别(每一台RS都配)
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/ens33/arp_announceecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce
步骤三:在RS上配置VIP,切记(DR模式)不要忘了在RS配置VIP,要不然数据包会被丢弃
ifconfig lo:8 192.168.182.100 netmask 255.255.255.255
步骤四:在RS安装启动httpd服务
yum install httpd -ycd /var/www/htmlecho "from ooxxip" > index.htmlservice httpd start
步骤五:给两台keepalived机子安装keepalived(一主一备)
yum -y install keepalivedyum -y install ipvsadm
步骤六:配置keepalived配置文件

主节点配置:

# /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 50cd /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进程是否还存活,如果被杀死,则重启主keepalived服务换用更高级的高可用技术(zookeeper),后续会有zookeeper相应的文章

最后附上keepalived配置文件说明:

! Configuration File for keepalivedglobal_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 介绍和实战操作演示就先到这里了,有任何疑问欢迎给我留言,也可关注我的公众号【大数据与云原生技术分享】,后续会持续更新相关技术文章~。

标签: #keepalived配置域名