keepalived+LVS配置详解

您所在的位置:网站首页 lvs命令详解 keepalived+LVS配置详解

keepalived+LVS配置详解

2023-06-17 12:37| 来源: 网络整理| 查看: 265

keepalived+LVS配置详解 keepalived简介keepalived的应用场景keepalived工作原理VRRP协议核心组件分层工作工作状态 LVS简介LVS三种模式NAT模式(网络地址映射)IPTUN模式(IP隧道)DR模式(直接路由)三种模式对比 keepalived+LVS配置1.master配置2. keepalived配置文件3 修改keepalived配置文件3.1配置VIP3.2 配置负载均衡策略 4 配置web01节点(192.168.182.132)4.1 安装httpd服务4.2 调整proc响应参数4.3 设置路由 `web02的操作和上面web01一样`测试

keepalived简介

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP全名Virtual Route RedundancyProtocol(虚拟路由冗余协议),VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keepalived的应用场景 管理LVS软件基于VRRP实现高可用健康检查,故障切换 keepalived官网地址 通过官网介绍,我们可以得知keepalived提供的两个重要的功能:loadbalancing和high-availability。最初是专门为了LVS负载均衡软件设计的,可以用来管理并监控LVS集群系统中各个服务节点的状态,后来的版本中又加入了可以实现高可用的VRRP功能。

keepalived主要有两种应用场景,一个是通过配置keepalived结合ipvs做到负载均衡(LVS+Keepalived);另一个是通过自身健康检查、资源接管等功能做高可用(双机热备),实现故障转移,功能近似于Heartbeat。

keepalived工作原理 VRRP协议

keepalived是以VRRP协议为实现基础的,VRRP全称Vritual Router Redundancy Protocol,即虚拟路由冗余协议,可以认为是实现路由器高可用的协议。

VRRP是用来实现路由器冗余的协议。VRRP协议是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使得发生故障而进行设计设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具备有IP备份,优先路由选择,减少不必要的路由器通信等功能。VRRP协议将两台或多台路由器虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。然而,在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话,就是master,或者是通过算法选举产生的,master实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等,其他设备不具有该IP,状态时backup。除了接收master的VRRP状态通告信息外,不执行对外的网络功能,当主机失效时,backup将接管原先master的网络功能。VRRP协议配置时,需要配置每个路由器的虚拟路由ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0-255的整整数;同一个组中的路由器通过使用优先权值来选举MASTER。优先权大者为MASTER,优先权也是一个0-255的正整数。 在高可用场景,就是把路由器换成服务器或者服务器上的应用:

通常情况下是将两台linux服务器组成一个热备组(master-backup),同一时间热备组内只有一台主服务器(master)提供服务,同时master会虚拟出一个共用IP地址(VIP),这个VIP只存在master上并对外提供服务。

如果keepalived检测到master宕机或服务故障,备服务器(backup)会自动接管VIP成为master,keepalived并将master从热备组移除,当master恢复后,会自动加入到热备组,默认再抢占成为master,起到故障转移功能。

核心组件

keepalived是模块化设计,不同模块负责不同的功能,主要有三个模块,分别是core、check和VRRP。

core模块:为keepalived的核心组件,负责住进程启动、维护以及全局配置文件的加载和解析;check模块:负责健康检查,包括常见的各种检查方式,这里的配置决定了工作在哪个层;VRRP模块:是实现VRRP协议的。

此外还有:

system call:系统调用watch dog:监控check和vrrp进程的看管者libipfwc:iptables(ipchains)库,配置LVS会用到libipvs*:配置LVS时会用到 分层工作

keepalived做负载均衡时工作在TCP/IP协议的3/4/5层,做高可用时工作在OSI七层模型的3/4/7层,基本上一样的。

分层功能相关协议应用层网络服务和最终用户的一个接口TFTP,HTTP,SNMP,DNS,FTP,SMTP,TELNET表示层数据的表示、安全、压缩无协议会话层会话的建立、管理、中止无协议传输层定义传输数据的协议端口号,以及流程和差错校验TCP,UDP网络层进行逻辑地址寻址,实现不同网络之间的路径选择IP,ICMP,RIP,OSPF,BGP,IGMP数据链路层建立逻辑连接、硬件地址寻址、差错校验等功能SLIP,CSLIP,PPP,ARP,RARP,MTU物理层建立、连接、断开物理连接ISO2110,IEEE802,IEEE802.2

具体工作层数,区别于使用的哪一个网络协议来进行的健康检查:

Layer3:工作在三层时,keepalived会定期向热备组中的服务器发送一个ICMP数据包,来判断某台服务器是否故障,如果没有响应则将这台服务器从热备组移除。

Layer4:工作在四层时,keepalived以TCP端口的状态判断服务器是否故障,比如MySQL的3306端口,如果无法访问则将这台服务器从热备组移除。

Layer7:工作在七层时,keepalived根据用户设定的策略判断服务器上的程序是否正常运行,比如HTTP请求的方式,如果返回错误状态码则将这台服务器从热备组移除。

在Keepalived服务器群之间,只有作为主的服务器不断发送VRRP广播包,告诉备它还活着,此时备不会抢占主,只有当主不可用,既备接受不到主的VRRP广播包,这时候备就会启动相关的服务接管主的任务向外提供服务,以保证服务的正常使用。

工作状态

keepalived正常启动的时候,共启动3个进程: 一个父进程,负责监控其子进程;一个时VRRP子进程,另外一个是checkers子进程;两个子进程都被系统watchlog看管,Healthcheck子进程检查各自服务器的健康状况。如果healthchecks进程检查到master上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。

LVS简介

LVS官网 LVS中文站点 LVS 是 Linux Virtual Server 的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统,是根据iptables的实现来开发的,所以使用时会和iptables相似。

LVS三种模式 NAT模式(网络地址映射)

NAT模式工作原理是:客户端访问LVS时,LVS通过重写请求报文的目标地址,且根据预设的调度算法,将请求分派给后端真实服务器,真实服务器接收到请求处理后,发出响应报文也需要通过LVS返回,返回时需要修改报文的源地址,然后返回给客户,完成整个负载调度过程

DNAT:目标地址转换,改变的是目标地址SNAT:源地址转换,改变的是源地址

NAT 模式就是使用 SNAT 和 DNAT 技术完成报的转发,NAT 方式可支持任何的操作系统,以及私有网络,并且只需一个 Internet IP 地址,非常节省成本,但是整个系统的性能受到限制。因为执行 NAT 每次需要重写数据包,有一定的延迟,另外,大部分应用有 80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对LVS形成很大压力,容易成为瓶颈

IPTUN模式(IP隧道)

IP TUN当LVS分配请求到不同的 real server,real server 处理请求后直接回应给用户,这样 LVS 仅处理客户机与服务器的一半连接。IP TUN 技术极大地提高了 LVS 的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过 100 个节点。real server 可以在任何 LAN 或 WAN 上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。但此模式要求所有服务器必须支持 IP 隧道协议,因此只能在 linux 下使用,在 windows 无法使用。

DR模式(直接路由)

DR与 IP TUN 类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性,DR 与 IP TUN 相比,没有 IP 封装的开销,但由于采用物理层(修改 MAC地址)技术,所有服务器都必须在同一个局域网

DR和IP TUN区别 DR和IP TUN相比,没有IP封装的开销,但由于采用数据链路层(修改MAV地址)技术,所有服务器都必须在一个物理网段

三种模式对比 NAT模式IP TUN模式DR模式对服务器要求任何操做系统都支持必须支持IP隧道协议,目前只有Linux支持网络要求局域网局域网或广域网支持的节点数10-20个,据Diretor处理能力而定可以支持100个节点安全性较高,可以隐藏real server较差,real server容易暴露IP要求仅需要一个合法IP地址作为VIP除VIP外,每个服务器需要拥有合法IP地址可以直接路由至客户端拓展性差优特点地址转换封装IP地址 keepalived+LVS配置

环境说明:

系统版本软件版本节点名称节点IP地址centos7.9keepalived-2.2.7、LVS-1.27master192.168.182.130centos7.9keepalived-2.2.7、LVS-1.27backup192.168.182.131centos7.9httpd不同发行版本,httpd版本也不同web01192.168.182.132centos7.9httpd不同发行版本,httpd版本也不同web02192.168.182.133 1.master配置

// 安装前的准备工作

[root@master ~]# systemctl disable --now firewalld //关闭防火墙 [root@master ~]# setenforce 0 //关闭selinux [root@master ~]# head -7 /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled //改为disabled [root@master opt]# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz //下载keepalived [root@master opt]# tar -zxf keepalived-2.2.7.tar.gz -C /usr/local/ //这里我解压到/usr/local 目录下,各位根据自己需求进行解压 [root@master keepalived-2.2.7]# pwd /usr/local/keepalived-2.2.7 [root@master keepalived-2.2.7]# yum -y install gcc openssl-devel libnl3-devel //解决依赖问题 [root@master ~]# modprobe ip_vs //加载ip_vs模块 [root@master ~]# modprobe ip_vs [root@master ~]# cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@master ~]# vim /etc/sysctl.conf //调整proc响应参数,并关闭linux内核重定向参数,添加下面内容 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 net.ipv4.ip_forward = 1 [root@master ~]# sysctl -p //加载,使其生效

// 编译安装keepalived

[root@master keepalived-2.2.7]# ./configure --prefix=/usr/local/keepalived [root@master keepalived-2.2.7]# make && make install

// 启动keepalived

[root@master keepalived]# pwd /usr/local/keepalived/etc/keepalived [root@master keepalived]# cp keepalived.conf.sample keepalived.conf //因为没有keepalived配置文件,并且没有配置文件keepalived是启动不了的,所以需要我们自己copy一个配置文件 [root@master keepalived]# cp keepalived.conf keepalived.conf-bak //做一个备份,这一步可做可不做 // 完成上面的步骤依旧启动不了,还需要做以下步骤 [root@master keepalived]# mkdir /etc/keepalived/ [root@master keepalived]# ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ [root@master keepalived]# vim keepalived.conf interface ens33 //找到21行,将eth0改为ens33,这里的网卡名根据自己的网卡名来修改 [root@master keepalived]# systemctl enable --now keepalived //这样就可以启动keepalived了。

// 安装LVS

[root@master keepalived]# yum -y install ipvsadm

// 在第一次启动LVS时可能会出现报错,解决措施如下

[root@master keepalived]# systemctl cat ipvsadm.service # /usr/lib/systemd/system/ipvsadm.service [Unit] Description=Initialise the Linux Virtual Server After=syslog.target network.target [Service] Type=oneshot ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm" //我们可以看到LVS启动依赖etc下的ipvsadm这个文件,但是这个文件恰恰没有。 ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm" ExecStop=/sbin/ipvsadm -C RemainAfterExit=yes [Install] WantedBy=multi-user.target [root@master keepalived]# touch /etc/sysconfig/ipvsadm //创建完成之后百年可重新启动了。 [root@master keepalived]# systemctl enable --now ipvsadm 2. keepalived配置文件

配置文件分为: 全局配置、VRRP配置、LVS配置 配置文件又包括以下模块

LOBAL CONFIGURATIONBFO CONFIGURATIONVRRP CONFIGURATIONLVS CONFIGURATION ! Configuration File for keepalived global_defs { //全局定义部分 notification_email { //设置报警邮件地址,可设置多个 [email protected] //接收通知邮件的地址 [email protected] [email protected] } notification_email_from [email protected] //设置发送邮件通知地址 smtp_server 192.168.200.1 //设置 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_instance VI_1 { //VRRP实例部分定义,VI_1自定义的名称 state MASTER // 指定keepalived的角色,必须大写,可选值为MASTER|BACKUP interface eth0 //网卡设置,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地址,可以设置多个 192.168.200.16 192.168.200.17 192.168.200.18 track_script { // 脚本监控状态 chk_nginx_service // 可加权重,但会覆盖声明的脚本权重值chk_nginx_service weight -20 } notify_master “写脚本的绝对路径” //当前节点成为master时,通知脚本执行此脚本 notify_backup “写脚本的绝对路径” //当前节点成为master时,通知脚本执行此脚本 notify_fault “写脚本绝对路径” //当前节点出现故障时,执行此脚本 } } virtual_server 192.168.200.100 443 { // 定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开 delay_loop 6 // 每隔6秒查询realserver状态 lb_algo rr // 后端调试算法(load balancing algorithm) lb_kind NAT //LVS调度类型NAT/DR/TUN persistence_timeout 50 // 同一IP的连接60秒内被分配到同一台realserver protocol TCP // 用TCP协议检查realserver状态 real_server 192.168.201.100 443 { weight 1 //权重值越大优先级越高,优先级越大lvs就越优先访问 SSL_GET { // keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } url { path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 3秒无响应为超时 retry 3 //重连次数 delay_before_retry 3 //重连间隔时间 connect_port 80 //健康检查realserver的端口 } } } 3 修改keepalived配置文件 [root@master ~]# vim /etc/keepalived/keepalived.conf router_id LVS_01 //修改此行,指定服务器名称,主备服务器名称须不同这里我修改为LVS_01 !vrrp_strict //注释掉此行内容 state MASTER //指定热备状态,主就改为MASTER,备就为BACKUP interface ens33 //网卡名也要和自己的网卡名匹配 virtual_router_id 51 nopreempt //设置为非抢占模式,就是MASTER挂了之后BACKUP就不会去替代,如果想设置可以加上此行,这里我们不加 virtual_ipaddress { //指定集群的VIP 192.168.182.100 virtual_server 192.168.182.100 80 { //指定虚拟服务器地址(VIP)、端口号,定义虚拟服务器和web服务器 delay_loop 6 //健康检查时间间隔,就是每隔6秒,检查MASTER是否存活 lb_algo rr //指定调度算法,轮询(rr) protocol TCP //应用服务使用的是tcp协议 persistence_timeout 0 //连接保持时间默认是秒 real_server 192.168.182.132 80 { //第一个web服务器的ip加端口号 weight 1 节点权重 TCP_CHECK { connect_port 80 //检查目标端口 connect_timeout 3 //添加连接超时 nb_get_retry 3 //添加重试次数 !retry 3 delay_before_retry 3 //添加重试间隔 } } real_server 192.168.182.133 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@master ~]# systemctl restart keepalived.service //修改完之后重启keepalived 3.1配置VIP [root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 //添加下面两行内容结即可 IPADDR1=192.168.182.100 //VIP地址 NETMASK1=255.255.255.255 //VIP的子网掩码 [root@master ~]# systemctl restart network //重启网卡服务 [root@master ~]# ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:95:56:2e brd ff:ff:ff:ff:ff:ff inet 192.168.182.130/24 brd 192.168.182.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.182.100/32 scope global ens33 //这里就是我们刚才添加的VIP 3.2 配置负载均衡策略 [root@master ~]# ipvsadm-save > /etc/sysconfig/ipvsadm //这条命令是用来保存负载分配策略的 [root@master ~]# ipvsadm -C //此命令是用来清空分配策略的 [root@master ~]# ipvsadm -A -t 192.168.182.100:80 -s rr //A表示的是添加虚拟服务器,t是指定VIP和端口号,s是指定算法,rr表示的是轮询算法 [root@master ~]# ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.132:80 -g //a是添加真实服务器地址,r指定RIP以及端口号,RIP也就是后端服务器ip地址,g表示的是DR模式 [root@master ~]# ipvsadm -a -t 192.168.182.100:80 -r 192.168.182.133:80 -g //132和133分别是web01和02 [root@master ~]# ipvsadm -ln //查看节点状态 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.182.100:80 rr TCP 10.10.10.2:1358 rr persistent 50 -> 192.168.200.200:1358 Masq 1 0 0

backup也就是192.168.182.131的配置和上面的步骤一样,除以下地方不同之外,其他都一样

[root@backup ~]# vim /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 keepalived配置文件中根据你BACKUP进行修改 router_id LVS_02 state BACKUP priority 90 //优先级要比主上面小 4 配置web01节点(192.168.182.132) // 关闭防火墙和selinux [root@web01 ~]# systemctl disable --now firewalld [root@web01 ~]# setenforce 0 [root@web01 ~]# head -7 /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled 4.1 安装httpd服务 [root@web01 ~]# yum -y install httpd [root@web01 ~]# systemctl enable --now httpd //设置开机自启 [root@web01 ~]# touch /var/www/html/index.html [root@web01 ~]# vim /var/www/html/index.html this is web01 [root@web01 ~]# systemctl restart httpd [root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo DEVICE=lo:1 IPADDR1=192.168.182.100 NETMASK1=255.255.255.255 [root@web01 ~]# systemctl restart network [root@web01 ~]# ifup lo:1 //开启网卡 没有ifconfig命令,解决措施 [root@web01 ~]# yum -y install net-tools [root@web01 ~]# ifconfig lo:1 //查看lo:1,网卡 lo:1: flags=73 mtu 65536 inet 192.168.182.100 netmask 255.255.255.255 loop txqueuelen 1000 (Local Loopback) 4.2 调整proc响应参数 [root@web01 ~]# vim /etc/sysctl.conf net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@web01 ~]# sysctl -p 4.3 设置路由 [root@web01 ~]# route add -host 192.168.182.100 dev lo:1 [root@web01 ~]# route -n web02的操作和上面web01一样 测试

关闭master上的keepalived [root@master keepalived]# systemctl stop keepalived.service



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3