三尺非寒 发表于 2024-8-31 17:13:21

部署 LVS(nginx)+keepalived高可用负载均衡集群

目次
一、集群的概述
1、什么是集群
2、平凡集群与负载均衡集群
2.1 平凡集群(Regular Cluster)
2.2 负载均衡集群(Load Balancing Cluster)
2.3 高可用集群(High Availability Cluster)
2.4 区别
二、Keepalive根本概述
1、vrrp(虚拟路由冗余协议)技术
1.1 vrrp协议概念
1.2 vrrp技术工作原理
1.3 vrrp状态机 
1.4 vrrp协议的抢占功能
2、keepalived 概述
2.1 keepalived 作用
2.2 Keepalived 架构
2.3 安装keepalived
2.4 keepalived的干系文件及构成
2.4.1 keepalived的干系文件
2.4.2 主设置文件的构成
2.4.3 主设置文件的全局设置详解
2.4.4 主设置文件的vrrp_instance模块详解
2.4.5 主设置文件的virtual_server模块详解
三、部署LVS+keepalived集群
1、部署master负载调度服务器
1.1 修改主设置文件
1.2 调整/proc响应参数
2、部署backup负载调度服务器
2.1 修改主设置文件
2.2 调整/proc响应参数
3、部署节点服务器1
3.1 设置虚拟网卡(VIP)
3.1.1 暂时设置虚拟回环网卡
3.1.2 永世设置虚拟回环网卡
3.2 忽略ARP哀求
3.2 安装并启动nginx软件
3.4 新建网页站点文件
3.5 关闭长连接
4、部署节点服务器2
4.1 设置虚拟网卡(VIP)
4.1.1 暂时设置虚拟回环网卡
4.1.2 永世设置虚拟回环网卡
4.2 忽略ARP哀求
4.3 安装并启动nginx软件
4.4 新建网页站点文件
4.5 关闭长连接
5、客户端测试
四、其他有用设置
1、主从抢占模式设置
1.1 抢占模式(默认模式)
1.2 非抢占模式
1.3 耽误抢占模式
2、组播/单播地点
2.1 组播地点
2.2 单播地点
3、通知脚本
3.1 设置邮箱
3.2 编写脚本
3.3 修改keepalived主设置文件
3.4 测试
4、日志功能
4.1 修改keepalived日志设置文件
4.2 修改rsyslog主设置文件
五、实现别的应用的高可用性 VRRP Script
1、VRRP Script实现步调
2、部署nginx+keepalived集群
2.1 部署master调度服务器
2.1.1 修改nginx主设置文件
2.1.2 修改keepalived主设置文件
2.2 部署backup调度服务器
六、高可用集群的脑裂问题
1、什么是脑裂
2、导致脑裂的原因
3、防备息争决脑裂问题
4、使用iptables规则模仿脑裂

一、集群的概述

1、什么是集群

在盘算机科学中,集群(Cluster)是指一组相互连接的盘算机(节点),这些盘算机协同工作以完成共同的使命。集群可以通过网络相互通讯和协作,从而形成一个团体系统
由多台主机构成,但对外只能体现为一个团体,只提供一个访问入口(域名或者ip地点),相当于一个大型盘算机
集群通常被用于提高盘算性能、可靠性和可扩展性
2、平凡集群与负载均衡集群

2.1 平凡集群(Regular Cluster)

平凡的群集的部署是通过一台度器控制调配多台节点服务器进行业务哀求的处理,但是仅仅是一台调度器,就会存在极大的单点故障风险,当该调度器的链路或则调度器自己出现故障时,就会导致整个业务的无法正常进行
2.2 负载均衡集群(Load Balancing Cluster)

负载均衡集群是一种平凡集群的特殊情势,此中引入了负载均衡器(Load Balancer)来均衡各个节点之间的工作负载。负载均衡器可以根据不同的算法(如轮询、最小连接数等)将传入的哀求分发到集群中的不同节点,以确保各个节点的负载大致均衡。负载均衡集群可以提高系统的性能和可靠性,同时还能更好地应对突发的高负载情况
2.3 高可用集群(High Availability Cluster)

高可用集群是由一台主调度器和一台或多台备用调度器。在主调度器能够正常运转时,由主调度器进行节点服务器业务的分配处理,其余备用调度器处于待机状态,不到场当前的集群运转。当主调度器出现故障无法运转时,此时备用调度器会由优先级最高的调度承担主调度器的工作,而出现故障的主调调度器便会退出当前工作,由人工维修后返回集群
2.4 区别

平凡集群是基本情势,负载均衡集群在此根本上引入负载均衡器以提高性能,高可用集群则在此根本上更加注重系统的可用性和容错本领。根据具体的需求和场景,可以选择合适的集群情势来搭建系统以满足要求
二、Keepalive根本概述

1、vrrp(虚拟路由冗余协议)技术

1.1 vrrp协议概念

vrrp技术旨在提供网络装备的冗余和高可用性。它允很多台路由器或交换机共享一个虚拟 IP 地点,从而实现对外部网络的透明故障切换
VRRP 协议工作在 OSI 模型的网络层(第三层),其基本原理是将一组路由器设置为 VRRP 组,并选择此中一台路由器作为虚拟路由器的主节点,其他路由器则成为备用节点。主节点负责处理传入流量,而备用节点则处于待命状态
1.2 vrrp技术工作原理

VRRP(Virtual Router Redundancy Protocol)的工作模式基于主备模式。在这种模式下,多个路由器或交换机被组织成一个 VRRP 组,此中包括一个主节点和一个或多个备用节点。这些节点一起协作以提供冗余和高可用性
当主节点不可用时,备用节点中优先级最高的节点将接受虚拟 IP 地点,成为新的主节点,从而实现快速故障切换。这种模式确保了即使某个节点发生故障,整个系统仍能够继承提供服务,从而实现了网络装备的冗余和高可用性


[*] VRRP 组:多个路由器被设置为一个 VRRP 组。每个组都有一个虚拟 IP 地点和一个虚拟 MAC 地点,用于代表整个组
[*] 主节点:VRRP 组中具有最高优先级的节点会成为主节点,负责处理传入流量,并使用虚拟 IP 地点提供服务 
[*] 备用节点:其他节点则成为备用节点,处于待命状态。它们监视主节点的可达性,并准备接受虚拟 IP 地点,以确保服务的连续性
[*] Hello 消息:VRRP 节点定期发送 Hello 消息以通知别的节点自己的存在。这些消息还可以用于检测对等节点的可达性
[*] 虚拟路由器(Virtual Router):是一个逻辑实体,它由一组物理路由器(Physical Routers)共同提供服务。虚拟路由器的主要目的是提供冗余和高可用性,以防止单点故障
[*] 虚拟路由器标识(Virtual Router Identifier,VRID):是VRRP协议中的一个紧张参数,用于标识一个VRRP组。在一个VRRP组中,全部的路由器都必要设置雷同的VRID,以便它们可以识别彼此,并协同工作。当一个路由器成为VRRP组的Master时,它会发送带有自己的VRID的VRRP包,以通知其他路由器它的存在
[*] 虚拟 IP 地点 (VIP):这是由 VRRP 组共享的虚拟 IP 地点。它允很多个路由器共享一个 IP 地点,以提供冗余和高可用性。VIP 通常与 VRRP 组中的主节点干系联,并且在发生故障转移时会迁徙到备用节点。
[*] 虚拟 MAC 地点 (VMAC):VMAC 是与虚拟 IP 地点干系联的虚拟 MAC 地点。当 VIP 迁徙到 VRRP 组中的另一台路由器时,VMAC 也会相应地切换到新的路由器,以确保网络装备可以精确地识别并路由流量到新的主节点(00-00-5e-00-01-VRID)
[*] 故障切换:假如一个节点停止发送 Hello 消息,其他节点会认为该节点已经失效,触发故障转移。此时,备用节点中优先级最高的节点将接受虚拟 IP 地点,并成为新的主节点
[*] 快速故障切换:VRRP 允许在几秒内完成主备节点之间的切换,从而减少服务中断时间
1.3 vrrp状态机 

https://i-blog.csdnimg.cn/blog_migrate/0e7c951979c888ce832eb3e94d31b262.png
优先级:


[*]默认0 - 255
[*]0代表主路由器主动退出
[*]255代表有装备和虚拟ip冲突
[*]可手动设置1-254
[*]优先级雷同再比较接口IP地点大小,IP地点大的优先
[*]优先级默认为100,缺省值是100 
1.4 vrrp协议的抢占功能



[*]优先级:每个VRRP路由器都有一个优先级,优先级高的路由器会成为Master。当一个路由器的优先级超过当前Master的路由器,它会接受Master的角色
[*]预先抢占:在预先抢占模式下,当一个优先级更高的路由器重新上线或者其优先级超过当前Master的路由器,它会立即接受Master的角色,而不管当前Master的路由器是否正常工作
[*]非预先抢占:在非预先抢占模式下,当一个优先级更高的路由器重新上线或者其优先级超过当前Master的路由器,它不会立即接受Master的角色,而是等待当前Master的路由器失效后,才会接受Master的角色
[*]抢占耽误:抢占耽误是指在预先抢占模式下,当一个路由器的优先级超过当前Master的路由器,它必要等待一段时间(抢占耽误时间)后才能接受Master的角色。这是为了防止网络中频仍的Master切换
[*]抢占权重:抢占权重是指在预先抢占模式下,当一个路由器的优先级超过当前Master的路由器,它必要满足一定的抢占权重条件后才能接受Master的角色。这是为了防止网络中频仍的Master切换
2、keepalived 概述

2.1 keepalived 作用

keepalived 是一个用于实现高可用性的开源软件,它主要用于在Linux系统上实现负载均衡和故障转移


[*]基于vrrp协议:keepalived 可以创建一个虚拟的IP地点,这个IP地点可以被多个服务器共享。当一个服务器出现故障时,keepalived 会自动将这个IP地点转移到其他正常的服务器,以保证服务的可用性
[*]设置简朴:能为vip地点地点的节点天生ipvs规则(在设置文件中预先界说)
[*] 健康检查:keepalived 可以定期检查后端真实服务器(RS)的健康状态,假如一个服务器出现故障,keepalived 会自动将这个服务器从负载均衡中移除,以制止将哀求发送到故障的服务器。
[*]支持多种负载均衡算法:keepalived 支持多种负载均衡算法,包括轮询、加权轮询、最小连接数等
[*]支持多种通讯协议:keepalived 支持多种通讯协议,包括TCP、HTTP、SMTP
[*]基于脚本调用接口:完成脚本中界说的功能,进而影响集群事务,以此支持nginx、haproxy等服务
keepalived工具官网:http://keepalived.org/ 2.2 Keepalived 架构

#官网文档
https://keepalived.org/doc/
http://keepalived.org/documentation.html

[*] 用户空间核心组件:

[*] vrrp stack:VIP消息告示 虚拟ip
[*] checkers:监测real server(简朴来说 就是监控后端真实服务器的服务)是否存活
[*] system call:实现 vrrp 协议状态转换时调用脚本的功能
[*] SMTP:邮件组件(报警邮件)
[*] IPVS wrapper:天生IPVS规则(直接天生ipvsadm)
[*] Netlink Reflector:网络接口(将虚拟地点ip(vip)地点飘动)
WatchDog:监控历程(整个架构是否有问题)


[*] 控制组件:提供keepalived.conf 的分析器,完成Keepalived设置
[*] IO复用器:针对网络目的而优化的自己的线程抽象
[*] 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
https://i-blog.csdnimg.cn/blog_migrate/ce8c5d71ab76d14dc30f7fd5d34a6e5d.png
2.3 安装keepalived

#yum安装keepalived软件
yum install -y keepalived.x86_64 https://i-blog.csdnimg.cn/blog_migrate/ccd394f57d186e2fd596beadb0cb35fd.png
2.4 keepalived的干系文件及构成

2.4.1 keepalived的干系文件



[*] 软件包名:keepalived
[*] 主步伐文件:/usr/sbin/keepalived
[*] 主设置文件:/etc/keepalived/keepalived.conf
[*] 设置文件示例:/usr/share/doc/keepalived/
[*] Unit File:/lib/systemd/system/keepalived.service
[*] Unit File的情况设置文件:/etc/sysconfig/keepalived CentOS
2.4.2 主设置文件的构成

/etc/keepalived/keepalived.conf 设置构成


[*] GLOBAL CONFIGURATION
Global definitions(全局设置):界说邮件设置,route_id,vrrp设置。组播地点等


[*] VRRP CONFIGURATION
VRRP instance(s):界说vrrp协议中的每个vrrp虚拟路由器的规则,基本信息


[*] LVS CONFIGURATION(lvs调度服务器的规则设置)
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
2.4.3 主设置文件的全局设置详解

#vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
#keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
root@localhost
 num@qq.com
}
notification_email_from keepalived@localhost  
#发邮件的地址
smtp_server 127.0.0.1    
#邮件服务器地址
smtp_connect_timeout 30  
#邮件服务器连接timeout
router_id R1
#每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
vrrp_skip_check_adv_addr  
#对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
vrrp_garp_interval 0
#gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
vrrp_gna_interval 0
#unsolicited NA messages (不请自来)消息发送延迟
vrrp_mcast_group4 224.0.0.18
#指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18
vrrp_iptables        
#此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
} 2.4.4 主设置文件的vrrp_instance模块详解

#vim /etc/keepalived/keepalived.conf
vrrp_instance <STRING> {
#<String>为vrrp的实例名,一般为业务名称
配置参数
......
}
#配置参数:
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同

advert_int 1
#vrrp通告的时间间隔,默认1s

authentication {
#认证机制
auth_type AH|PASS  
#AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass <PASSWORD>
#预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress {
#虚拟IP,生产环境可能指定上百个IP地址
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
172.16.12.10
#指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
172.16.12.11/24 dev eth1  
#指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
172.16.12.12/24 dev eth2 label eth2:1
#指定VIP的网卡label
}
track_interface {
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
eth0
eth1

} 2.4.5 主设置文件的virtual_server模块详解

#vim /etc/keepalived/keepalived.conf
virtual_server 172.16.12.200 80 {
    delay_loop 6
    #健康间隔时间6秒
    lb_algo rr
    #调度算法轮询
    lb_kind DR
    #lvs模式为DR
    persistence_timeout 0
    #连接保持时间改为0 否则 无法体现效果
    protocol TCP
    #采用协议
   
real_server 172.16.12.12 80 {
      weight 1
      #45行删除
      #节点权重
      TCP_CHECK{
            connect_port 80
            #检查目标端口
            connect_timeout 3
            #连接超时
            nb_get_retry 3
            #重试次数
            delay_before_retry 3
            #重试间隔时间
      }
    }
real_server 172.16.12.13 80 {
      weight 1
      TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
      }
    }
三、部署LVS+keepalived集群

前提:关闭全部装备的防火墙和核心防护
#systemctl stop firewalld
#setenforce 0 https://i-blog.csdnimg.cn/blog_migrate/2d16e69a648a74cb80fef27bc1c2faac.png
1、部署master负载调度服务器

1.1 修改主设置文件

#yum install -y keepalived.x86_64
#yum安装keepalived软件
#systemctl start keepalived.service
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
#下面将修改主配置文件,为避免修改错误导致无法挽回的后果,建议备份原始主配置文件 #vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
   acassen@firewall.loc
   failover@firewall.loc
   sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 123456
    }
    virtual_ipaddress {
      172.16.12.200
    }
}

virtual_server 172.16.12.200 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 172.16.12.12 80 {
      weight 1
          TCP_CHECK {
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
      }
    }

    real_server 172.16.12.13 80 {
      weight 1
          TCP_CHECK {
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
      }
    }
}
#下面其他多余的配置可删除 https://i-blog.csdnimg.cn/blog_migrate/23a98f8a23d46a635bdb228a8a3e3147.png
https://i-blog.csdnimg.cn/blog_migrate/094b47e2a9c90063874490773f4e8947.png
 注:抓包能够得到同一热备组间master服务器与backup服务器之间告示的认证暗码是明文传输的
https://i-blog.csdnimg.cn/blog_migrate/e9dc8b3ff7c89dafe196e0d1aec2f236.png

https://i-blog.csdnimg.cn/blog_migrate/522f6df5a132cfd7dfda3b629d175c09.png
#systemctl restart keepalived.service
#ip a https://i-blog.csdnimg.cn/blog_migrate/094e6fcabeb3a6d5830cfb99606a0a37.png
#yum install -y ipvsadm.x86_64
#ipvsadm-save > /etc/sysconfig/ipvsadm
#systemctl start ipvsadm.service
#systemctl restart keepalived.service
#ipvsadm -ln https://i-blog.csdnimg.cn/blog_migrate/059397408eebd73b7656574f9f8e0adf.png
1.2 调整/proc响应参数

#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
#sysctl -p https://i-blog.csdnimg.cn/blog_migrate/e94c70d2ed82bfc146ee7b6e603fd7e0.png

2、部署backup负载调度服务器

2.1 修改主设置文件

#yum install -y keepalived.x86_64
#yum安装keepalived软件
#systemctl start keepalived.service
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
#下面将修改主配置文件,为避免修改错误导致无法挽回的后果,建议备份原始主配置文件 #在master调度服务器上远程拷贝文件到backup调度服务器上
#scp /etc/keepalived/keepalived.conf 172.16.12.11:/opt https://i-blog.csdnimg.cn/blog_migrate/562b94e446186a4444a266910c7a6714.png
#cd /opt
#mv keepalived.conf /etc/keepalived/ https://i-blog.csdnimg.cn/blog_migrate/31288ab706d51e1fcfd1021ccb4ad14d.png
修改主设置文件: 
https://i-blog.csdnimg.cn/blog_migrate/36027ea6b7796802910debbb46b093d1.png
#systemctl restart keepalived.service
#ip a https://i-blog.csdnimg.cn/blog_migrate/2b51f1ea17888bfababd678833e4442b.png
#yum install -y ipvsadm.x86_64
#ipvsadm-save > /etc/sysconfig/ipvsadm
#systemctl start ipvsadm.service
#systemctl restart keepalived.service
#ipvsadm -ln https://i-blog.csdnimg.cn/blog_migrate/d54edbbfbcfa702509f03d3c4fcaa90b.png
2.2 调整/proc响应参数

#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
#sysctl -p https://i-blog.csdnimg.cn/blog_migrate/1e41f2f8a4790c87fdf329bf7e017e95.png
3、部署节点服务器1

3.1 设置虚拟网卡(VIP)

3.1.1 暂时设置虚拟回环网卡

#ifconfig lo:0 172.16.12.200/32
#ip a https://i-blog.csdnimg.cn/blog_migrate/edf77122fe46f525772c20306c962329.png
3.1.2 永世设置虚拟回环网卡

#cd /etc/sysconfig/network-scripts/
#cp ifcfg-lo ifcfg-lo:0
#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=172.16.12.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
#systemctl restart network
#ip a 3.2 忽略ARP哀求

#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
#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
#sysctl -p https://i-blog.csdnimg.cn/blog_migrate/f5db8e3ecbc1294963be99dde6258e3f.png
3.2 安装并启动nginx软件

#yum install epel-release.noarch -y
#yum install -y nginx
#systemctl start nginx 3.4 新建网页站点文件

#echo "welcome to web 1" > /usr/share/nginx/html/index.html
#cat /usr/share/nginx/html/index.html https://i-blog.csdnimg.cn/blog_migrate/c157a5016d74f83059bc8fdac9d7a449.png
3.5 关闭长连接

https://i-blog.csdnimg.cn/blog_migrate/033da0aaf6f556bc7419f452f7e51756.png
4、部署节点服务器2

4.1 设置虚拟网卡(VIP)

4.1.1 暂时设置虚拟回环网卡

#ifconfig lo:0 172.16.12.200/32
#ip a https://i-blog.csdnimg.cn/blog_migrate/54d93f201c8bc7315f24465e51f0531a.png
4.1.2 永世设置虚拟回环网卡

#cd /etc/sysconfig/network-scripts/
#cp ifcfg-lo ifcfg-lo:0
#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=172.16.12.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
#systemctl restart network
#ip a 4.2 忽略ARP哀求

#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
#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
#sysctl -p https://i-blog.csdnimg.cn/blog_migrate/9097a115d0fd77ba74a32cde7124ed4c.png
4.3 安装并启动nginx软件

#yum install epel-release.noarch -y
#yum install -y nginx
#systemctl start nginx 4.4 新建网页站点文件

#echo "welcome to web 2" > /usr/share/nginx/html/index.html
#cat /usr/share/nginx/html/index.html https://i-blog.csdnimg.cn/blog_migrate/ccd493698b797a452f0396a5f984a068.png
4.5 关闭长连接

https://i-blog.csdnimg.cn/blog_migrate/3b0f55489cec159bd417ca4c4288f902.png
5、客户端测试

(1)客户端访问虚拟地点,可以看到负载均衡(1:1)
https://i-blog.csdnimg.cn/blog_migrate/dc701e4b8fbb8a87d928c21f7d5ef942.png
(2)关闭master负载调度服务器的keepalived服务,测试客户端可否访问到网页
https://i-blog.csdnimg.cn/blog_migrate/fef46186b9c70fe1299abc5d5cf432fc.png
https://i-blog.csdnimg.cn/blog_migrate/b260cf6c0cb3bf84b9052a4c3a6f66de.png
https://i-blog.csdnimg.cn/blog_migrate/3d7708c04ee0e2b73e10a22f78336ee7.png
https://i-blog.csdnimg.cn/blog_migrate/55c0e7ebaffb7dddc410f92abed2e43c.png
(3)重新开启原来master服务器的keepalived服务,测试是否抢占虚拟地点
https://i-blog.csdnimg.cn/blog_migrate/bf46df3635cdd778c85ca4b2586aaa72.png
https://i-blog.csdnimg.cn/blog_migrate/a2d7031770f920de9e45365c582589f4.png
四、其他有用设置

1、主从抢占模式设置

1.1 抢占模式(默认模式)

当一个优先级更高的路由器重新上线或者其优先级超过当前Master的路由器,它会立即接受Master的角色,而不管当前Master的路由器是否正常工作
详细可参考上述的测试情况
1.2 非抢占模式

关闭默认的抢占模式,一定要将原master调度服务器主设置文件里的state修改成BACKUP,否则大概会不乐成,再添加 nopreempt 即可,那么当原master重新上线,也不会抢占当前正在工作的服务器,它现在反而会酿成了backup服务器
https://i-blog.csdnimg.cn/blog_migrate/1ad41902d52d9ac54c730daad6d720f1.png
测试: 
https://i-blog.csdnimg.cn/blog_migrate/ddbce723c1b6e752a958e740dc17247e.png
https://i-blog.csdnimg.cn/blog_migrate/fbfb357b91d5e4cb152409fe5e6686df.png
1.3 耽误抢占模式

preempt_delay60       #指定抢占延迟时间为60s,默认延迟300s https://i-blog.csdnimg.cn/blog_migrate/c6096ed9ad82d4ebb3b46a67c321534e.pnghttps://i-blog.csdnimg.cn/blog_migrate/c660d4977177d0eb041fa23c6d348fa2.png
测试: 
https://i-blog.csdnimg.cn/blog_migrate/89bb250679df626feb88c6414abc22fb.png
2、组播/单播地点

2.1 组播地点

#两个调度服务器都需要配置
vrrp_mcast_group4 234.6.6.6
#组播地址范围:224~239 https://i-blog.csdnimg.cn/blog_migrate/6fc846189d5c11c7b427706fc8648a29.png
https://i-blog.csdnimg.cn/blog_migrate/d8a4cae033904bf2af88ce582c6bd275.png
测试:
#tcpdump -i ens33 -nn src host 172.16.12.10 https://i-blog.csdnimg.cn/blog_migrate/1963f037297a38403b6fd63b483320ae.png
2.2 单播地点

默认keepalived主机之间使用多播相互告示消息,会造成网络拥塞,可以更换成单播,即只有同一热备组master和backup调度服务器之间告示信息,减少网络流量
留意:启用 vrrp_strict 时,不能启用单播,在全部节点vrrp_instance语句块中设置对方主机的IP,发起设置为专用于对应心跳线网络的地点,而非使用业务网络
unicast_src_ip 172.16.12.11
      unicast_peer {
      172.16.12.10
      } https://i-blog.csdnimg.cn/blog_migrate/dba9d96864944b4338de68ad5e862d51.png
https://i-blog.csdnimg.cn/blog_migrate/0d980e9dc40fe057ec993e9e49fc3d3f.png
 测试:
#tcpdump -i ens33 -nn src host 172.16.12.10 https://i-blog.csdnimg.cn/blog_migrate/655968eb4c8aa65a6ace01b29d71af96.png
3、通知脚本

通知脚本(notification script)是用来在状态转换发生时通知管理员或实行特定操作的脚本。当Keepalived监测到故障或状态厘革时,例如主服务器故障或切换到备用服务器,它会触发通知脚本。记录状态厘革和变乱日志,并发送电子邮件或短信通知给管理员或运维团队等操作
(1)当前节点成为主节点时触发的脚本
notify_master <STRING>|<QUOTED-STRING> (2)当前节点转为备节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING> (3)当前节点转为“失败”状态时触发的脚本
notify_fault <STRING>|<QUOTED-STRING> (4)通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
notify <STRING>|<QUOTED-STRING> (5)当停止VRRP时触发的脚本
notify_stop <STRING>|<QUOTED-STRING> 3.1 设置邮箱

#非必要
# vim /etc/mail.rc
set from=num@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=num5@qq.com
set smtp-auth-password=*******   #POP3/IMAP/SMTP/Exchange/CardDAV 授权码 3.2 编写脚本

#cd /opt
#vim keepalive.sh
#!/bin/bash
contact='num@qq.com'   #qq邮箱
notify() {
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
#chmod +x keepalived.sh 3.3 修改keepalived主设置文件

#vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
……
   notify_master "/opt/keepalive.sh master"
   notify_backup "/opt/keepalive.sh backup"
   notify_fault "/opt/keepalive.sh fault"
}
#systemctl restart keepalived.service https://i-blog.csdnimg.cn/blog_migrate/d792b1118c88f6532fdf8c032bb976ee.png
3.4 测试

模仿master调度服务器宕机
#systemctl restart keepalived.service
#killall keepalived https://i-blog.csdnimg.cn/blog_migrate/57c9cc0ffb479a1f1604fbb94808dab4.png
4、日志功能

开启keepalived单独日志功能
4.1 修改keepalived日志设置文件

https://i-blog.csdnimg.cn/blog_migrate/e0700d9e1a592bc008c0922cbd28ff57.png
# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
#systemctl restart keepalived.service https://i-blog.csdnimg.cn/blog_migrate/2b1746d80384feb5b3aea9a87920e352.png
4.2 修改rsyslog主设置文件

#vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalive.log
#systemctl restart rsyslog.service https://i-blog.csdnimg.cn/blog_migrate/abb99ef2b20d2e8d258da57200889f1a.png
测试: 
#systemctl restart keepalived.service
#find /var/log/ -name "keepalive*"    #查看是否生成独立的keepalived日志文件
/var/log/keepalive.log
#cat /var/log/keepalive.log   #查看日志 https://i-blog.csdnimg.cn/blog_migrate/f9efefa407141eb381fa041a69c8a7cf.png
五、实现别的应用的高可用性 VRRP Script

1、VRRP Script实现步调

keepalived使用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现别的应用的高可用性功能
VRRP Script 技术,分以下两步实现
(1)界说脚本
vrrp_script:自界说资源监控脚本,vrrp实例根据脚本返回值,公共界说,可被多个实例调用,界说在vrrp实例之外的独立设置块,一样平常放在global_defs设置块之后。通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING>   #此脚本返回值为非0时,会触发下面OPTIONS执行
OPTIONS
} vrrp_script <SCRIPT_NAME> {                                 #定义一个检测脚本,在global_defs 之外配置
   script <STRING>|<QUOTED-STRING>                 #shell命令或脚本路径(注意执行权限)
   interval <INTEGER>                                         #间隔时间,单位为秒,默认1秒
   timeout <INTEGER>                                                 #超时时间
   weight<INTEGER:-254..254>                         #默认为0,如果设置此值为负数,当上面脚本返回值为非0时,会将此值与本节点权重相加可以降低本节点权重,即表示fall. 如果是正数,当脚本返回值为0,会将此值与本节点权重相加可以提高本节点权重,即表示 rise.通常使用负值
   fall <INTEGER>                                               #执行脚本连续几次都失败,则转换为失败,建议设为2以上
   rise <INTEGER>                                               #执行脚本连续几次都成功,把服务器从失败标记为成功
   user USERNAME                                 #执行监测脚本的用户或组      
   init_fail                                                         #设置默认标记为失败状态,监测成功之后再转换为成功状态
} (2) 调用脚本
track_script:调用vrrp_script界说的脚本去监控资源,界说在VRRP实例之内,调用事先界说的vrrp_script
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
} 2、部署nginx+keepalived集群

前提:两个调度服务器都必要安装并开启nginx软件,关闭ipvsadm软件
#yum install epel-release.noarch -y
#yum install -y nginx
#systemctl start nginx #systemctl stop ipvsadm 两个调度服务器都要备份nginx主设置文件 
#cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
#下面将修改nginx主配置文件,为避免修改错误导致无法挽回的后果,建议备份原始主配置文件 2.1 部署master调度服务器

2.1.1 修改nginx主设置文件

#vim /etc/nginx/nginx.conf
#在http模块下配置
upstream web {
      server 172.16.12.12;
      server 172.16.12.13;
      }

#在server模块下配置
   location / {
         proxy_pass http://web;
         }
#systemctl restart nginx https://i-blog.csdnimg.cn/blog_migrate/e81ee6fad02122032d85d9d8f50a53e9.png
2.1.2 修改keepalived主设置文件

先编写脚本:
#vim /etc/keepalived/ng.sh
#!/bin/bash
killall -0 nginx
#chmod +x /etc/keepalived/ng.sh https://i-blog.csdnimg.cn/blog_migrate/b14babed93834efe01117daa5d1c551a.png
修改keepalived主设置文件:
#vim /etc/keepalived/keepalived.conf
vrrp_script check_down {
      script"/etc/keepalived/ng.sh"
      interval 1
      weight -30
      fall3
      rise 2
      timeout 2
}


track_script {
      check_down
      }
#systemctl restart keepalived.service https://i-blog.csdnimg.cn/blog_migrate/2fda1b36305becf6d6b0b29e67bce0e9.png
2.2 部署backup调度服务器

其实,backup调度服务器的nginx设置文件和keepalived设置文件其实一样的,只必要master调度服务器将设置文件长途拷贝并更换到backup调度服务器的设置文件即可
#scp /etc/nginx/nginx.conf 172.16.12.11:/etc/nginx/
#scp /etc/keepalived/keepalived.conf 172.16.12.11:/etc/keepalived/keepalived.conf
#scp /etc/keepalived/ng.sh 172.16.12.11:/etc/keepalived/ng.sh https://i-blog.csdnimg.cn/blog_migrate/a1344746227b0d770b6782e553801b4e.png
https://i-blog.csdnimg.cn/blog_migrate/4edc95cc4f325188f31181c58ecab4cc.png
#systemctl restart nginx
#systemctl restart keepalived.service https://i-blog.csdnimg.cn/blog_migrate/f6f718f3dfba84231ffa45cd477d8505.png
至于节点服务器1和节点服务器2的设置和之前的一样就行
测试:此时master调度服务器正在工作,客户端能访问到
https://i-blog.csdnimg.cn/blog_migrate/2278ec3903d1ce071084891e75c88c33.png
关闭master负载调度服务器的nginx服务,测试客户端可否访问到网页
https://i-blog.csdnimg.cn/blog_migrate/1ccf62d24d469ef70c73e616e65b6c89.png
 此时当master调度服务器的nginx服务故障后,backup调度服务器会顶上进行工作
https://i-blog.csdnimg.cn/blog_migrate/f5c77554d987d1a23f0deba2266b451a.png
https://i-blog.csdnimg.cn/blog_migrate/2a4306a4aa30464b594012c90902a258.png

六、高可用集群的脑裂问题

1、什么是脑裂



[*]在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,原来为一团体、动作协调的HA系统就分裂成为2个独立的个体
[*]由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人"一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、双方“服务"都起不来了;或者双方“服务”都起来了,但同时读写“共享存储”,导致数据损坏 
2、导致脑裂的原因

硬件原因:


[*]高可用服务器各节点之间心跳线链路发生故障,导致无法正常通讯
[*]因心跳线坏了(包括断了,老化)
[*]因网卡及干系驱动坏了,ip设置及冲突问题(网卡直连)
[*]因心跳线间连接的装备故障(网卡及交换机)
[*]因仲裁的机器出问题(采取仲裁的方案)。
运用设置原因:


[*]高可用服务器上开启了 iptables 防火墙阻挡了心跳消息传输
[*]高可用服务器上心跳网卡地点等信息设置不精确,导致发送心跳失败
[*]其他服务设置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等
[*]Keepalived 设置里同一VRRP实例假如 virtual_router_id 两端参数设置不同等也会导致裂脑问题发生
3、防备息争决脑裂问题



[*]同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,如许一条线路断了,别的一条还是好的,依然能传送心跳消息
[*]当检查脑裂时强行关闭一个心跳节点(这个功能必要特殊装备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机下令关闭主节点的电源
[*]创建完善的监控系统,实时监测集群的状态和健康状况,及时发现潜在的问题并采取相应的步伐 
4、使用iptables规则模仿脑裂

#在backup调度服务器上配置iptables规则,拒绝接受来自master调度服务器的数据包
#iptables -A INPUT -s 172.16.12.10 -j REJECT https://i-blog.csdnimg.cn/blog_migrate/ca120987903ef0eb57dfe9d9e413e2d4.png
https://i-blog.csdnimg.cn/blog_migrate/64840eb1ad4936d26b1cfb7f027a6eed.png
如许就有整个集群就会有两个调度服务器在工作,争抢“共享资源”、争起“应用服务”,导致发生严重后果

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 部署 LVS(nginx)+keepalived高可用负载均衡集群