• keepalived原理以及lvs、nginx跟keeplived的运用


    keepalived基础

    keepalived的原理是根据vrrp协议(主备模式)去设定的

    vrrp技术相关原理

    状态机; 

    优先级0~255 心跳线1秒

     vrrp工作模式 

    双主双备模式

    VRRP负载分担过程

    vrrp安全认证:使用共享密匙 

     keepalived工具介绍

    keepalived是专门为LVS和HA(高可用主备模式)设计的一款健康行检查工具

    举例说明:当有两台lvs服务器工作时,出现故障,而lvs本身又无法健康性检查,所以借助keepalived工具

    当主服务器出现故障,此时备服务器顶上,当主服务器恢复时,有三种模式

    1.抢占模式(当主恢复好时,立马切换到这)

    2.不抢占模式(当主恢复好时,依然在备服务器上运行)

    3.延迟抢占(当主恢复好时,多少秒从备切换到主上)

     keepalived架构

     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

    主配置文件详解: 

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

     切记:在修改配置文件的时候,记得备份,以防万一出错

    配置文件讲解

    简要来说,全局配置只需要改三处

    1.自己的ip  2.路由id名字 3.严格模式关闭

     给lvs调度器设置:

    1. state MASTER|BACKUP
    2. #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
    3. interface IFACE_NAME
    4. #绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
    5. virtual_router_id VRID
    6. #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
    7. priority 100
    8. #当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同
    9. advert_int 1
    10. #vrrp通告的时间间隔,默认1s
    11. authentication {
    12. #认证机制
    13. auth_type AH|PASS  
    14. #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
    15. auth_pass <PASSWORD>
    16. #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
    17. }
    18. include /etc/keealived/conf.d/*.conf
    19. virtual_ipaddress {
    20. #虚拟IP,生产环境可能指定上百个IP地址
    21. <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
    22. 192.168.200.100
    23. #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
    24. 192.168.200.101/24 dev eth1  
    25. #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
    26. 192.168.200.102/24 dev eth2 label eth2:1
    27. #指定VIP的网卡label
    28. }
    29. track_interface {
    30. #配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
    31. eth0
    32. eth1
    33. }

    如果当项目中,有很多的虚拟ip,则建立子配置文件

    虚拟服务器端的具体配置

    1. delay_loop 6
    2. #健康间隔时间6秒
    3. lb_algo rr
    4. #调度算法轮询
    5. lb_kind DR
    6. #lvs模式为DR
    7. persistence_timeout 0
    8. #连接保持时间改为0 否则 无法体现效果
    9. protocol TCP
    10. #采用协议

     真实服务器端配置:

    1. weight 1
    2. #45行删除
    3. #节点权重
    4. TCP_CHECK{
    5. connect_port 80
    6. #检查目标端口
    7. connect_timeout 3
    8. #连接超时
    9. nb_get_retry 3
    10. #重试次数
    11. delay_before_retry 3
    12. #重试间隔时间
    13. }
    14. }

    解释说明:检查80端口,相当于keepalived 用curl这个命令访问真是服务器的80端口,如果80端口能访问,代表活着,如果80端口检查失败,则下线,不会自动调度过去。

    超时时间3秒,如果3秒不回应,则代表此真是服务器挂掉

    重试次数3次,去访问80端口,3次以上,如果不回复,则认为此服务器挂掉

    实验操作

     

    第一步,四台服务器全部关闭防火墙,关闭防护

     

    主lvs调度服务器:

    先下载lvs keepalived

     第二步切换到主配置文件,然后备份

     第三步 修改主配置文件

     随后,ipvsadm -ln 查看一下规则  虚拟ip 跟真实ip都在里面

     备LVS服务器配置

    第一步 下载ipvsadm keepalived

    然后进入到主lvs(centos1)服务器将配置文件直接复制到备服务器里面,省的重新写配置文件了 

     然后再进入到备服务器,将data里面的keepalived配置文件移动到自己keepalived的配置文件中

     然后再keepalived配置文件中修改里面的备模式  路由id名  优先级即可

     修改过配置文件,然后重启

    然后开启ipvsadm

     

     centos3 真实服务器配置(httpd)

     加入虚拟ip  是因为DR模式,lvs服务器跟真实服务器要用相同的虚拟ip地址,真实服务器回给客户端才不会有冲突,并且要将路由转发给关了,当配置相同的虚拟ip时,客户端访问,lvs服务器跟真是服务器会同时响应,但是客户端应到lvs服务器,所以要将真实服务器的路由转发功能给关闭

    ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

    关闭路由转发

    然后给网页写入内容

     

     然后关闭长连接

    centos4真是服务器配置

    然后配置虚拟ip 并且关闭路由转发

    ifconfig lo:0 192.168.68.188 netmask 255.255.255.255

    然后关闭长连接(是为了更好的出现7-3 到7-4的转换)

    然后客服端去访问虚拟服务器

     现在模拟,当主lvs关闭keepalived服务时,7-3 7-4页面是否会出来

    客户端访问时,还是会出现7-3 7-4 是因为lvs直接到备服务器上面了

     打开备服务器,虚拟ip跑到备服务器上面了,所以还是会正常运行

    我们keepalived默认是抢占模式,可以看一下,再次打开主keepalived服务器,然后看虚拟ip

    非抢占模式:

     操作如下:

    主lvs服务器 

     nopreempt

    然后重启

     备服务器配置:

    随后,关闭主服务器,查看虚拟机ip,可以看见开启非抢占模式,主服务器关闭之后重启 虚拟ip不会回到主服务器上

    而是当主服务器关闭,切换到备服务器上,就一直在备服务器上了  可以查看备服务器

    延迟抢占

     

    preempt_delay 60 

     主服务器配置

     备服务器配置

    然后模拟主服务器关闭

     

    密码是明文传输的,可以通过抓包看见

    组播地址

     vrrp默认的单播地址是224.0.0.18

    如果要修改组播地址,主备服务器都要修改 加在严格模式下方

    vrrp_mcast_group4 234.6.6.6(这地址自定义)范围224~239

     主备的修改是一样的  都是backup

     随后,保存,然后重启

    在备服务器上抓包

    修改单播地址

    1. unicast_src_ip 192.168.68.3
    2. unicast_peer{
    3. 192.168.68.4
    4. }

     主服务器配置

    备服务器配置

    随后在备服务器上抓包 单播修改成功

    通知脚本 

    1. #!/bin/bash
    2. #
    3. contact='940132245@qq.com'
    4. notify() {
    5. mailsubject="$(hostname) to be $1, vip floating"
    6. mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
    7. echo "$mailbody" | mail -s "$mailsubject" $contact
    8. }
    9. case $1 in
    10. master)
    11. notify master
    12. ;;
    13. backup)
    14. notify backup
    15. ;;
    16. fault)
    17. notify fault
    18. ;;
    19. *)
    20. echo "Usage: $(basename $0) {master|backup|fault}"
    21. exit 1
    22. ;;
    23. esac

     在主服务器上面配置

    写一个脚本 keepalive.sh

     

    随后,给这个脚本文件加上权限

     随后,修改主配置文件

    1. notify_master "/opt/keepalive.sh master"
    2. notify_backup "/opt/keepalive.sh backup"
    3. notify_fault "/opt/keepalive.sh fault"

    随后,保存重启

     

     然后模拟master故障

    随后,打开自己的qq邮箱,会发一个邮件过来

    日志功能 

     随后,在日志文件中添加6级别

     因为修改了keepalived 跟rsyslog 所以都要重新加载

    因为把keepalived日志放在了data下面 可以查看一下

     查看一下日志

    重点! 脑裂

    脑裂的意思就是,当主服务器没有故障时,备服务器认为自己是主,虚拟ip188会出现在主备上面 

     怎么模拟脑裂?------>在备服务器上模拟屏蔽掉主服务器所有的报文,包括屏蔽vrrp协议

     在备lvs服务器上面屏蔽掉主服务器的所有流量,包括vrrp报文

    然后在主备上面ip a  都能看见虚拟机

    使用其他应用的高可用性 vrrp script 

    当有两台nginx代理服务器,nginx是无法处理自身单点故障的,可以通过keepalived来实现,如果一台nginx代理服务器出故障,直接跳到另外一台nginx代理服务器上

    keepalived利用脚本去解决nginx的高并发

     定义vrrp script

     实验操作

     主 备nginx服务器 都要下载nginx 跟keepalived

    主备服务器相同操作:

     

     然后开启nginx

     主服务器配置修改:

     

    然后重启

     随后,写一个脚本,能够让keepalived运行nginx的脚本,并且给这个脚本执行的权限

    脚本里面的内容

     

    随后,修改keepalived配置文件里面的内容

     将virtual以下的内容删除,因为不需要

    第二步,在全部配置下面写入脚本,切记!!一定是在全局配置里面写入脚本

     

    随后,在virtual里面去执行脚本

     保存,之后重新加载

     将主服务器上面的配置文件复制到备服务器上nginx配置文件中

    将主服务器上面的keepalived配置文件复制到备服务器上 

     备服务器上配置

    随后nginx配置文件拷过来之后,重启一下

     然后进入主页访问虚拟地址192.168.68.188 会出现7-3 7-4

     

    现在模拟主nginx服务器停止出现故障

    然后进入主页访问虚拟ip,还是会出现7-3 7-4 因为主nginx坏掉,是直接跳到备nginx上了

     

  • 相关阅读:
    从多表连接视图对比人大金仓和Oracle
    C++中如何描述table表格类型数据结构
    Kubernetes 集群和应用监控方案的设计与实践
    SDRAM与DRAM
    mysql主从复制docker版
    【Java】逻辑控制
    Docker常用命令
    数据治理的改造系统
    Matlab如何提取论文插图中的渐变色?一招轻松搞定
    嵌入式开发:从C语言成功过渡的3个技巧
  • 原文地址:https://blog.csdn.net/2301_81307988/article/details/136531807