• LVS+keepalived高可用负载均衡集群


    keepalived介绍

    keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。

    但是keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用。

    LVS高可用集群的组成

    主调度器+备调度器(一般是一主二备)

    主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器都处于冗余状态。备用调度器是不参与集群的运转,只有主调度器出现了故障,无法运行,此时备调度器才会承担主调度器的工作

    一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成为冗余(基于VRRP)

    • 主服务器作用:转发数据;发送报文告诉备服务器自己在线。
    • 备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器。

    VRRP:keepalived是基于VRRP协议,实现LVS的高可用。解决了调度器和单节点的故障问题。

    VRRP协议:提高网络路由器的可靠性开发的一种协议。

    选举出主和备,预先设定好了主和备的优先级,备的优先级低。一旦开启服务,优先级高的会自动抢占主的位置

    vrrp的组播通信:224.0.0.18 vrrp协议当中的主备服务器通过这个组播地址进行通信,交换主备服务器之间的运行状态。主服务器会周期性的发送VRRP报文消息,以告知其他服务器,主服务器现在的状态。

    主备切换:主服务器发生故障或者不可达,VRRP协议会把请求转义到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发送了主备切换,确保新的主服务器可以正常的处理客户端的请求。

    故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。

    高可用集群的脑裂现象以及预防措施

    高可用集群的脑裂现象及其诱发原因

     脑裂现象:主和备同时拥有vrrp地址。在高可用系统当中,联系两个节点的心跳线,本来是一体的。动作协调的高可用系统。心跳线断开之后,分裂了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。两个调度器就像脑裂人一样抢占VIP。导致主有VIP,备也有VIP,因此整个集群失败。

    解决方法

    软件层面:

    1.配置文件有问题

    2.通过tcpdump抓包分析

    3.重启两边服务

    网络层面:

    1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

    2.硬件层面:

    2.1连接主备之间的心跳线老化

    2.2网卡或者网卡驱动失效,IP地址配置冲突

    2.3 防火墙没有配置心跳线消息的传输通道

    2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

    脑裂预防预防措施 

     针对脑裂现象的产生,运维人员第一时间要做的不是处理发生故障的调度器或则故障线路,而是首先确保业务不会因此中断,进行脑裂的预防尤为重要。出现问题,先保证业务的进行,再进行排障。

    keepalived的体系和模块

    全局模块:core模块,负责整个keepalived的启动加载和维护

    VRRP模块,实现VRRP协议,主备切换

    check:负责健康检查,检查后端真实服务器的健康情况,配置在真实服务器的模块当中

    LVS+keepalived的实时和部署

    test1  主调度器 20.0.0.10
    test2  备调度器 20.0.0.20
    后端真实服务器1 : 20.0.0.50
    后端真实服务器2 : 20.0.0.90
    vip地址:20.0.0.100
    客户端:20.0.0.60

    1. test1
    2. //关闭防火墙
    3. systemctl stop firewalld
    4. setenforce 0
    5. yum -y install ipvsadm keepalived
    6. //安装所需工具
    7. cd /etc/keepalived.conf
    8. cp keepalives.conf keepalives.conf.bak
    9. //对重要文件进行备份

    1. vim keepalived.conf
    2. smtp_server 127.0.0.1 //line 10
    3. route_id LVs_01 // line 12
    4. //主备服务器名称id不能一致
    5. #vrrp_strict //line 15
    6. //取消严格遵守vrrp协议功能,注释该行
    7. state MASTER //LINE 22
    8. //表示身份,主备 备:BACKUP
    9. interface ens33 //line 24
    10. //指定vip的物理接口
    11. virtual_router_id 10 //26
    12. //虚拟路由的id号
    13. priority 100
    14. //优先级
    15. advert-int 1
    16. //发送报文的间隔时间(工作中一般为30
    17. authenication {
    18. auth_type PASS
    19. auth_pass 1111
    20. }
    21. virtuak_ipaddress {
    22. 192.168.233.100
    23. //指定集群的真实地址
    24. }
    25. virtual-server 20.0.0.100 80 {
    26. delay_loop 6
    27. //健康检查的间隔时间
    28. lb_algo rr
    29. //负载均衡的调度算法
    30. lb_kind DR //46
    31. //指定整个LVS的工作方式,要大写
    32. persistence_timeout 0 //48
    33. //连接保持时间
    34. protocol TCP
    35. //
    36. }
    37. real_server 20.0.0.30 80 { //52
    38. weight 1
    39. //后端真实服务器的轮询权重
    40. TCP_CHECK {
    41. //对真实服务器的检查
    42. connect_port 80
    43. //检测目标的端口号(此处检测是30
    44. connect_timeout 3
    45. //检测连接超时时间
    46. nb_get_retry 3
    47. //重试次数
    48. delay_before_retry 4
    49. //重试的间隔秒数
    50. }
    51. }
    52. real_server 20.0.0.40 80 { //52
    53. weight 1
    54. //后端真实服务器的轮询权重
    55. TCP_CHECK {
    56. //对真实服务器的检查
    57. connect_port 80
    58. //检测目标的端口号(此处检测是30
    59. connect_timeout 3
    60. //检测连接超时时间
    61. nb_get_retry 3
    62. //重试次数
    63. delay_before_retry 4
    64. //重试的间隔秒数
    65. }
    66. }
    67. }
    68. wq!

    1. systemctl restart keepalived.service
    2. ipvsadm -ln
    3. //重启服务并查看

    1. test2
    2. //关闭防火墙
    3. systemctl stop firewalld
    4. setenforce 0
    5. yum -y install ipvsadm keepalived
    6. cd /etc/keepalived.conf
    7. cp keepalives.conf keepalives.conf.bak
    8. scp root@192.168.233.10:/etc/keepalived/keepalived.conf /etc/keepalived
    9. //远程复制到test2本机
    10. //此处得修改route_id号等

    1. 安装nginx
    2. systemctl restrat nginx
    3. cd /usr/local/nginx/html
    4. vim index.html
    5. //制作访问页面
    6. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    7. ifup ifcfg-lo:0
    8. route add -host 20.0.0.100 dev lo:0
    9. vim /etc/sysctl.conf
    10. net.ipv4.conf.lo.arp_ignore=1
    11. //设置lo接口忽略任何接口的ARP请求
    12. net.ipv4.conf.lo.arp_announce=2
    13. //设置lo接口仅会相应本地的IP地址,其他的接口ARP请求全部忽略
    14. net.ipv4.conf.all.arp_ignore=1
    15. //所有接口忽略来自任务接口的ARP请求
    16. net.ipv4.conf.all.arp_announce=2
    17. //所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略
    18. sysctl -p
    19. //刷新

    创建页面内容

    修改内核

    添加虚拟网卡

    1. test3 test4 操作相同
    2. vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    3. DEVICE=lo:0
    4. ONBOOT=yes
    5. IPADDR=20.0.0.100
    6. NETMASK=255.255.255.255
    7. wq
    8. ifup ifcfg-lo:0
    9. route add -host 20.0.0.100 dev lo:0

    测试

    1. 本机访问
    2. curl 本机ip

    '

    1. 客户端访问
    2. curl 20.0.0.100

    下面关闭其中一个keepalived

    关闭主站

    观察备站

    curl 20.0.0.100依然可以负载均衡访问成功

    测试轮询

    查看端口加权成功

    结果

    keepalived+nginx实验

    nginx1   20.0.0.10 主
    nginx2   20.0.0.20 备

    实验开始前先备份以防报错而无法修改

    1. 主站
    2. systemctl restart nginx
    3. yum -y install keepalived
    4. cd /etc/keeplived
    5. cp keepalived.conf keepalived.conf.bak

    1. smtp_server 127.0.0.1
    2. #vrrp_strict
    3. virtual_route_id 51
    4. vrrp_script check_nginx {
    5. script "/opt/check_nginx.sh"
    6. interval 5
    7. }
    8. //添加脚本
    9. vrrp_intance VI_1 {
    10. }
    11. virtual_ipaddress {
    12. 192.168.233.100
    13. }
    14. track_script {
    15. check_nginx
    16. }
    17. scp root@192.168.233.61:/etc/keepalived/keepalived.conf /etc/keepalives/
    18. nginx2
    19. /opt
    20. vim check_nginx.sh
    21. /usr/bin/curl -I http://localhost &> /dev/null
    22. if [ $? -ne 0 ]
    23. then
    24. systemctl stop keepalived
    25. fi
    26. wq
    27. chmod 777 check_nginx.sh
    28. nginx1
    29. 拖入脚本
    30. chmod 777 check_nginx.sh
    31. systemctl restart keepalived.service
    32. ip addr
    33. nginx2
    34. 设置访问页面

    总结

    keepalived的工作方式基于VRRP协议

    1.确定主备

    2.vrrp只能有一个,出现在主服务器上。

    3.通过vrrp 组播地址 224.0.0.18 发送vrrp报文,检测主的心跳

    4.主备切换,主出现故障,vip地址会漂移到备服务器。

    5.主恢复了,vrrp地址还会回到主

    6.脑裂 主备都有VIP

    (硬件层面,软件层面)

    脑裂解决(软件层面):

    1.检查配置文件,重启

    7.keepalive不是只能和lvs搭配,也可以和其他服务配合,实现高可用

    如何解决keepalived脑裂问题

    1.硬件:准备两条心跳线,这样短一条依然能够传送心跳消息

    2.设置防火墙一定要让心跳消息通过。

    3.依靠监控软件实时检测来实现(zabbix)

    脑裂如何解决

    软件层面:

    1.配置文件有问题

    2.通过tcpdump抓包分析

    3.重启两边服务

    网络层面:

    1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

    2.硬件层面:

    2.1连接主备之间的心跳线老化

    2.2网卡或者网卡驱动失效,IP地址配置冲突

    2.3 防火墙没有配置心跳线消息的传输通道

    2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

    了解即可

    dev 开发环境 开发人员专用

    sit 测试环境 测试人员使用(开发,运维)

    pre:预生产环境 开发和运维(和最终生产环境保持一致)

    prd:生产环境(面向用户的环境)

  • 相关阅读:
    基于YOLOv5的口罩佩戴检测方法
    MybatisPlus拓展——实现多数据源操作
    golang语言系列:Git
    数字集成电路设计(二、Verilog HDL基础知识)
    深度解析:抢单模式,逆向的商业模式策略
    Roguelike 游戏中的计算哲学
    MASM 64汇编
    【LeetCode热题100】--53.最大子数组和
    flutter显示出底部控件的引导页
    将任意一组非线性增长的数均匀映射至0到1上
  • 原文地址:https://blog.csdn.net/qq_51506982/article/details/134016742