LVSDR模式+keepalived

一.Keepalived简介

Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,

它与HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,

与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

二.Keepalvied的工作原理

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点
Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以及故障隔离,下面我们介绍一下Keepalived对服务器运行状态和故障隔离的工作原理。

Keepalived工作在TCP/IP 参考模型的 三层、四层、五层,也就是分别为:网络层,

传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

在网络层:我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP,在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除

功能:

  • 基于vrrp协议完成地址流动
  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

三.vrrp相关

1.术语

虚拟路由器:Virtual Router 
    虚拟路由器标识:VRID(0-255)
    物理路由器:
        master  :主设备
        backup  :备用设备
        priority:优先级
    VIP:Virtual IP 
    VMAC:Virutal MAC (00-00-5e-00-01-VRID)
    GraciousARP

2.技术

通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式,延迟抢占模式
实际工作中,非抢占式,
安全认证:

  • 无认证
  • 简单字符认证:预共享密钥
  • MD5

工作模式:

  • 主/备:单虚拟路径器
  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)

四.搭建设想

在这里插入图片描述
就是建立两台LVS,保证网络畅通,即使一台损坏,老化,备用服务器可以立马顶上

机器IP地址
主LVS负载调度器192.168.133.50
备LVS负载调度器192.168.133.100
RS服务器1192.168.133.75
RS服务器2192.168.133.99
客户端IP地址自定义

五.构建过程

所有主机都必须关闭防火墙

[root@host ~]# systemctl stop firewalld
[root@host ~]# setenforce 0

1.主机配置

基本配置

[root@host ~]# vi /etc/sysctl.conf

在末尾编写如下代码
在这里插入图片描述

[root@host ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

网卡配置(直接编写keepalived.conf,可以不要设置虚拟网卡)

[root@host ~]# cd /etc/sysconfig/network-scripts/                                           进入网卡编辑
[root@host network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0                            复制文件到虚拟网卡
[root@host network-scripts]# vim ifcfg-ens33:0

在这里插入图片描述

[root@host network-scripts]# systemctl restart network
[root@host network-scripts]# ifconfig

在这里插入图片描述

ipvsamd 策略

[root@host ~]# yum install -y ipvsadm* 
[root@host ~]# modprobe ip_vs
[root@host ~]# 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@host ~]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@host ~]# systemctl start ipvsadm
[root@host ~]# ipvsadm -C                                                                         直接编写keepalived.conf以下可不用设定,因为会自动开启
[root@host ~]# ipvsadm -A -t 192.168.133.200:80 -s rr
[root@host ~]# ipvsadm -a -t 192.168.133.200:80 -r 192.168.133.99:80 -g
[root@host ~]# ipvsadm -a -t 192.168.133.200:80 -r 192.168.133.75:80 -g
[root@host ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  host:http rr
  -> 192.168.133.75:http          Route   1      0          0         
  -> 192.168.133.99:http          Route   1      0          0         
[root@host ~]# ipvsadm -ln

在这里插入图片描述

keepalived策略

[root@host ~]# yum install -y keepalived 
[root@host ~]# cd /etc/keepalived/
[root@host keepalived]# ls
keepalived.conf
[root@host keepalived]# cp keepalived.conf keepalived.conf.bak
[root@host keepalived]# ls
keepalived.conf  keepalived.conf.bak
[root@host keepalived]# vim keepalived.conf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@host keepalived]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

2.备份LVS服务器配置

网卡配置(直接编写keepalived.conf,可跳过此步骤)

[root@back ~]# systemctl restart network                                网卡配置差不多,但重启网不能用这条命令
[root@back ~]#ifup ens33:0                                            得用这条命令 但会报错,因为两个服务器的vip一样
ERROR     : [/etc/sysconfig/network-scripts/ifup-eth] Error, some other host (00:0C:29:D1:E8:8B) already uses address 192.168.133.200.

解决办法找到以下内容注释掉
在这里插入图片描述

在这里插入图片描述

[root@back ~]# ifup ens33:0                        这时再用这条命令启动网卡

第二种方法
主LVS上用ifup ens33:0 启动
备用LVS上用systemctl restart network启动,不需要修改文件即可

ipvsadm配置和keepalived策略

装好ipvsadm并设置同主机设置相同
安装keepalived后,将主机文件发往备份机

[root@host ~]# scp /etc/keepalived/keepalived.conf root@192.168.133.100:/etc/keepalived/
The authenticity of host '192.168.133.100 (192.168.133.100)' can't be established.
ECDSA key fingerprint is SHA256:eBYF1NpUpJHEFPq/PtM1L7nhNgFIIqXoIU3xGy8umVU.
ECDSA key fingerprint is MD5:b1:fa:bd:29:6c:f5:9e:aa:84:f0:6b:b2:7e:ef:3c:df.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.133.100' (ECDSA) to the list of known hosts.
root@192.168.133.100's password: 
keepalived.conf                                                                                              100% 1177     2.8MB/s   00:00  
[root@back ~]# vim /etc/keepalived/keepalived.conf 

只要更改三处
在这里插入图片描述

[root@back ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
[root@back ~]# systemctl start keepalived

3.真实主机配置

基本差不多

[root@rs1 ~]# yum install -y httpd 
[root@rs1 ~]# systemctl start httpd
[root@rs1 ~]# echo "THIS IS  server ONE1" > /var/www/html/index.html                     RS1网页
[root@rs1 ~]# cat /var/www/html/index.html
THIS IS  server ONE1

[root@rs2 ~]# echo "THIS IS  TWO2 WELCOME" > /var/www/html/index.html            RS2网页
[root@rs2 ~]# cat /var/www/html/index.html     
THIS IS  TWO2 WELCOME
[root@rs2 ~]#  vi /etc/sysctl.conf

在这里插入图片描述

[root@rs1 ~]# sysctl -p
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@rs1 ~]# cd /etc/sysconfig/network-scripts/
[root@rs1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@rs1 network-scripts]# vim ifcfg-lo:0

在这里插入图片描述

[root@rs1 network-scripts]# systemctl restart network
[root@rs2 network-scripts]# route add -host 192.168.133.200 dev lo:0

4.客户机测试

客户机访问vip"192.168.133.200"
在这里插入图片描述
在这里插入图片描述
主LVS看结果
在这里插入图片描述
备份LVS看结果
在这里插入图片描述

DOWN 掉主LVS的keepalived

[root@host ~]# systemctl stop keepalived

客户机登录正常
在这里插入图片描述
在这里插入图片描述
在备份LVS上查看登录情况
在这里插入图片描述
主备实验
工作方式:抢占式,非抢占式,延迟抢占模式
默认方式就是抢占式
在真实主机上输入命令

[root@rs1 ~]# tcpdump -i ens33 -nn host 224.0.0.18                            默认组播是224.0.0.18

可以看到都是从master上传过来的报文
在这里插入图片描述
我们停止主机上的keepalived服务

[root@host network-scripts]# systemctl stop keepalived.service

备用服务器就里面顶了上来
在这里插入图片描述
这时我们再启动主机的keepalived服务

[root@host network-scripts]# systemctl restart keepalived.service

主服务器立马抢占了服务,
在这里插入图片描述
因为实际工作中会产生掉包现象,所以不提倡用这种模式

非抢占式
在真实主机上输入命令

[root@rs1 ~]# tcpdump -i ens33 -nn host 224.0.0.18                            默认组播是224.0.0.18

目前上来的还是主机地址
在这里插入图片描述
主备服务器上的设置

[root@host keepalived]# vim keepalived.conf

在这里插入图片描述
在这里插入图片描述

[root@host keepalived]# systemctl restart keepalived.service
[root@host keepalived]# systemctl stop keepalived.service
[root@host keepalived]# systemctl start keepalived.service

这里仍然是备份服务器在工作,
在这里插入图片描述
然后我们去停掉备份服务器的keepalived的服务

[root@BACK ~]# systemctl stop keepalived.service 

这时就发现原来的主服务器就开始重新工作了
在这里插入图片描述
延迟抢占模式
可以设定多少时间后开始抢占服务

[root@host keepalived]# vim keepalived.conf

在这里插入图片描述

[root@host keepalived]# systemctl start keepalived.service
[root@host keepalived]# systemctl stop keepalived.service
[root@host keepalived]# systemctl start keepalived.service

可以看到在执行完命令后20秒主服务器抢占了备用服务器
在这里插入图片描述

六.优化功能

1.日志功能

日志都在/var/log/message里

[root@host keepalived]# vim /var/log/messages

可以看到日志很多,很不好找
在这里插入图片描述

[root@host keepalived]# keepalived --help                               查看keepalived的帮助文件

-D -S 都是日志文件有关,
在这里插入图片描述

[root@host keepalived]# ps aux |grep keep

看进程末位是有默认 -D的
在这里插入图片描述

[root@host keepalived]# vim /lib/systemd/system/keepalived.service

在这里插入图片描述

[root@host ~]# vim /etc/sysconfig/keepalived

在这里插入图片描述

[root@host ~]# vim /etc/rsyslog.conf 

在这里插入图片描述
这里增加这一行
在这里插入图片描述

[root@host ~]# systemctl restart keepalived.service rsyslog.service                                     重启服务,但会报错
Warning: keepalived.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@host ~]# systemctl daemon-reload                                                                            应该先复位再重启
[root@host ~]# systemctl restart keepalived.service rsyslog.service
[root@host ~]# cat /var/log/keepalive.log 

可以看到keepalive的日志都集中在了一个文件夹里
在这里插入图片描述

2.单播多播地址

2.1修改多播

主备服务器都要改

[root@host ~]# vim /etc/keepalived/keepalived.conf

在全局末尾增加单播地址
在这里插入图片描述

[root@host ~]# systemctl restart keepalived.service                                                  重启主机服务

可以看到单播设置成功
在这里插入图片描述

[root@host ~]# systemctl stop keepalived.service                        停止主机服务

在这里插入图片描述

[root@host ~]# systemctl restart keepalived.service                                            重启主机服务后,20秒后主机抢占服务

在这里插入图片描述

2.2单播设定

主从服务器都得设定增加,注意源地址和目标地址

[root@host ~]# vim /etc/keepalived/keepalived.conf

在这里插入图片描述
这是备用服务器上的设置
在这里插入图片描述
重启服务后就可以在真实服务器上体现出来了

[root@rs1 ~]# tcpdump -i ens33 -nn host 192.168.133.50

在这里插入图片描述

3.通知脚本

[root@localhost opt]#vim /etc/mail.rc

在底部增加以下命令
在这里插入图片描述

[root@host ~]# cd /opt
[root@host opt]# rz -E
rz waiting to receive.
[root@host opt]# ls
keepalive.sh  rh
[root@host opt]# chmod +x keepalive.sh 
[root@host opt]# vim /etc/keepalived/keepalived.conf

在这里插入图片描述

[root@host opt]# systemctl daemon-reload 
[root@host opt]# systemctl restart keepalived.service 
[root@host opt]# scp /opt/keepalive.sh root@192.168.133.99:/opt
root@192.168.133.99's password: 
keepalive.sh                                                                                                 100%  414   461.0KB/s   00:00  

查看邮箱即可看到提醒
在这里插入图片描述