Keepalived及其工作原理
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
VRRP协议(虚拟路由冗余协议)
- 是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
工作原理:
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
一个合格的群集应该具备的特点:
 1.负载均衡          用于提高群集的性能   LVS  Nginx  HAProxy  SLB  F5
 2.健康检查(探针)  针对于调度器和节点服务器    Keepalived   Heartbeat
 3.故障转移          通过VIP漂移实现主备切换     VRRP   脚本
健康检查(探针)常用的工作方式:
- 发送心跳消息 : vrrp报文 ping/pong
- TCP端口检查 :向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
- HTTP URL检查::向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法。如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常 如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常
LVS+Keepalived 高可用群集部署
实验:配置
主DR 服务器:192.168.73.100
备DR 服务器:192.168.73.130
Web 服务器1:192.168.73.110
Web 服务器2:192.168.73.120
vip:192.168.73.15
nfs服务器 192.168.73.1401.配置实验环境:
systemctl stop firewalld 
systemctl disable firewalld
setenforce 02.配置两台web节点服务器
将nfs服务器的/share文件挂载再 /etc/share/nginx/html/zyz101目录中
vim /etc/fstab
192.168.73.140:/share  /usr/share/nginx/html/zyz101 nfs defaults,_netdev 0 0 
mount -a
配置网卡文件
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.73.15     #指向vip
NETMASK=255.255.255.255
service network restart 或 systemctl restart network 
修改 /etc/sysctl.conf 文件
/etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2sysctl -p #加载 设置临时路由
设置临时路由
设置临时路由
route add -host 192.168.73.15  
或者
vim /etc/rc.local
/sbin/route add -host 192.168.73.15 dev lo:0
chmod +x /etc/rc.d/rc.local
永久加载:
vim /etc/sysconfig/static-routes
any host 192.168.73.15 dev lo:0
systemctl restart network  #重启网卡3..配置负载调度器(主、备相同)
yum -y install ipvsadm keepalived   #安装keepalived
modprobe ip_vs     #开启模块
cat /proc/net/ip_vs   或者  lsmod | grep ip_vs   #查看模块
开始配置keeplived
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_01
    后面四行vrrp开头的全部删掉主配置global_defs 全局参数如下

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 51
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
        修改virtual_ipaddress {				#指定群集vip地址
        192.168.73.15
       }
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.73.15 80
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.80.110 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔


然后再real_server 添加第二个web节点的地址和端口
再删除后面的多于选项
systemctl restart keepalived
ip a  查看虚拟网卡vip地址  只有主服务器上有vip地址
systemctl restart ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
验证测试;
在客户端访问 http://192.168.73.15/zyz101/test.html 
再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived
NGINX配合keepalived实现高可用负载均衡
实验配置
主DR 服务器:192.168.73.40
备DR 服务器:192.168.73.30
Web 服务器1:192.168.73.110
Web 服务器2:192.168.73.120
vip:192.168.73.15
nfs服务器 192.168.73.1401.配置实验环境:
systemctl stop firewalld 
systemctl disable firewalld
setenforce 02.配置两台nginx服务器作为负载均衡的主备服务器
 vim /etc/nginx/nginx.conf 在event同层块配置stream 在stream块中配置upstream

nginx -t 
syatemctl enable --now nginx安装keepalived
  yum install -y keepalived.x86_64 
  cd /etc/keepalived/
  ls
  vim nginx_check.sh  #编写脚本 确保nginx服务有没有开启 没有开启就关闭keepalived
  chmod +x nginx_check.sh   #给脚本加权如下:

修改keepalived主配置文件

vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        nginx_check.sh            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.73.15           # 定义虚拟ip(VIP),可多设,每行一个
    }
}
#后面把配置lvs多余的删掉
启动keepalived和nginx 进行测试
















![[AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现](https://img-blog.csdnimg.cn/img_convert/3e1a115eb5bdf936d198273db44dc9bf.png)



