• 使用Keepalived实现双机热备(虚拟漂移IP地址)详细介绍


     

    🏡作者主页:点击! 

    🐧Linux基础知识(初学):点击!

    🐧Linux高级管理防护和群集专栏:点击!

    🔐Linux中firewalld防火墙:点击!

    ⏰️创作时间:2024年7月15日14点40分

    🀄️文章质量:95分


    目录

    ——前言——

    Keepalived 简介

    工作原理

    主服务器

    备服务器

    虚拟(漂移)地址测试


    ——前言——

    以下内容全是重点 请仔细阅读

    以下内容全是重点 请仔细阅读

    Keepalived 是一个用于实现高可用性。它主要用于确保服务的连续性,防止单点故障,通常应用于负载均衡和故障转移场景。

    Keepalived 简介

    1. Keepalived 是一个基于 VRRP(虚拟路由冗余协议)协议的软件实现。

    2. 它可以管理 LVS(Linux Virtual Server)集群系统,也可以单独用于实现服务的高可用。

    3. Keepalived 通过配置虚拟 IP 地址(VIP)来实现服务的故障转移。

    4. 它能够监控服务器和服务的状态,在发生故障时自动进行切换。

    特别适合需要快速故障转移和负载均衡的网络环境

    工作原理

    1. VRRP协议

      Keepalived使用VRRP(虚拟路由冗余协议)来实现高可用性。

      多台服务器组成一个VRRP组,共享一个虚拟IP地址。

      一台服务器作为主服务器,其他为备用服务器。

      主服务器定期发送VRRP通告包,如果备用服务器在一定时间内没有收到通告,就会接管虚拟IP。

    2.健康检查

    Keepalived定期检查本地和远程服务的健康状态。

    支持多种检查方式,如TCP、HTTP、SSL等。

    如果检测到服务不可用,会触发故障转移。

    3.负载均衡

    当与LVS(Linux Virtual Server)结合使用时,Keepalived可以管理LVS的配置。

    支持多种负载均衡算法,如轮询、加权轮询、最少连接等。

    4.配置管理

    通过配置文件定义VRRP实例、虚拟IP、健康检查等参数。

    支持动态配置更新,无需重启服务。

    5.故障转移

    当主服务器失效时,备用服务器会自动接管虚拟IP。

    转移过程快速,通常在几秒内完成,对用户几乎无感知。

    过这些机制,Keepalived能够有效地提供高可用性和负载均衡服务,确保系统的稳定性和可靠性。

    实验环境

    主 192.168.192.100    虚拟漂移地址 192.168.192.200

    备 192.168.192.111     虚拟漂移地址 192.168.192.200

    主服务器

    1. 安装所需组件
    2. yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl3-devel
    3. yum install -y keepalived ipvsadm

    编辑配置文件

    以下配置都是重点 大家可以一一比对

    vim /etc/keepalived/keepalived.conf
    1. ! Configuration File for keepalived
    2. global_defs {
    3. notification_email {
    4. acassen@firewall.loc
    5. failover@firewall.loc
    6. sysadmin@firewall.loc
    7. }
    8. ! 设置通知邮件的接收地址
    9. notification_email_from Alexandre.Cassen@firewall.loc ! 设置通知邮件的发送地址
    10. smtp_server 192.168.200.1 ! 设置SMTP服务器地址
    11. smtp_connect_timeout 30 ! 设置SMTP连接超时时间(秒)
    12. router_id R1 ! 设置路由器标识
    13. }
    14. vrrp_instance VI_1 {
    15. state MASTER ! 设置初始状态为主节点
    16. interface ens33 ! 设置VRRP实例绑定的网络接口
    17. virtual_router_id 2 ! 设置虚拟路由器ID
    18. priority 100 ! 设置优先级
    19. advert_int 1 ! 设置VRRP广播间隔(秒)
    20. authentication {
    21. auth_type PASS ! 设置认证类型为密码
    22. auth_pass 1111 ! 设置认证密码
    23. }
    24. virtual_ipaddress {
    25. 192.168.192.200 ! 设置虚拟IP地址
    26. }
    27. }
    28. virtual_server 192.168.192.200 80 {
    29. delay_loop 6 ! 设置健康检查间隔(秒)
    30. lb_algo rr ! 设置负载均衡算法为轮询
    31. lb_kind DR ! 设置LVS模式为直接路由
    32. nat_mask 255.255.255.0 ! 设置NAT掩码
    33. ! persistence_timeout 50 ! 会话保持时间(秒),当前被注释
    34. protocol TCP ! 设置协议为TCP
    35. real_server 192.168.192.112 80 {
    36. weight 1 ! 设置服务器权重
    37. TCP_CHECK {
    38. connect_port 80 ! 设置健康检查连接的端口
    39. connect_timeout 3 ! 设置连接超时时间(秒)
    40. nb_get_retry 3 ! 设置重试次数
    41. delay_before_retry 3 ! 设置重试间隔(秒)
    42. }
    43. }
    44. real_server 192.168.192.114 80 {
    45. weight 1
    46. TCP_CHECK {
    47. connect_port 80
    48. connect_timeout 3
    49. nb_get_retry 3
    50. delay_before_retry 3
    51. }
    52. }
    53. }

    keepalived会定期对real server进行健康检查,如果检查失败,它会尝试重新连接。如果在指定的重试次数内都无法成功连接,keepalived会将该服务器标记为不可用,并将流量转发到其他可用的服务器。


     

    1. systemctl start keepalived    #启动服务
    2. systemctl enable keepalived    #开机自启
    3. systemctl status keepalived

    备服务器

    1. 安装所需组件
    2. yum -y install gcc openssl-devel libnfnetlink-devel libnl libnl3-devel
    3. yum install -y keepalived ipvsadm

    编辑配置文件

    根据行号来修改所需的信息 我都列出来 大家自行寻找出来修改

    vim /etc/keepalived/keepalived.conf

    1. 12 router_id R2
    2. 13 }
    3. 14
    4. 15 vrrp_instance VI_1 {
    5. 16 state BACKUP
    6. 17 interface ens33
    7. 18 virtual_router_id 2
    8. 19 priority 95
    9. 20 advert_int 1
    10. 21 authentication {
    11. 22 auth_type PASS
    12. 23 auth_pass 1111
    13. 24 }
    14. 25 virtual_ipaddress {
    15. 26 192.168.192.200
    16. 27 }
    17. 28 }
    18. 30 virtual_server 192.168.192.200 80 {
    19. 31 delay_loop 6
    20. 32 lb_algo rr
    21. 33 lb_kind DR
    22. 34 nat_mask 255.255.255.0
    23. 35 # persistence_timeout 50
    24. 36 protocol TCP
    25. 37
    26. 38 real_server 192.168.192.112 80 {
    27. 39 weight 1
    28. 40 TCP_CHECK{
    29. 41 connetc_port 80
    30. 42 connect_timeout 3
    31. 43 nb_get_retry 3
    32. 44 delay_before_retry 3
    33. 45 }
    34. 46
    35. 47 real_server 192.168.192.114 80 {
    36. 48 weight 1
    37. 49 TCP_CHECK{
    38. 50 connetc_port 80
    39. 51 connect_timeout 3
    40. 52 nb_get_retry 3
    41. 53 delay_before_retry 3
    42. 54 }
    43. 55 }
    44. 56 }
    45. 57 }

    1. systemctl start keepalived #启动服务
    2. systemctl enable keepalived #开机自启
     
    

    查看是否出错

    systemctl status keepalived

    虚拟(漂移)地址测试

    在主服务器上查看

    1. [root@localhost ~]# ip a sh dev ens33
    2. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    3. link/ether 00:0c:29:af:b6:81 brd ff:ff:ff:ff:ff:ff
    4. inet 192.168.192.100/24 brd 192.168.192.255 scope global ens33
    5. valid_lft forever preferred_lft forever
    6. inet 192.168.192.200/32 scope global ens33
    7. valid_lft forever preferred_lft forever
    8. inet6 fe80::20c:29ff:feaf:b681/64 scope link
    9. valid_lft forever preferred_lft forever

    备服务器查看

    1. [root@localhost ~]# ip a sh dev ens33
    2. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    3. link/ether 00:0c:29:b2:65:cb brd ff:ff:ff:ff:ff:ff
    4. inet 192.168.192.111/24 brd 192.168.192.255 scope global ens33
    5. valid_lft forever preferred_lft forever
    6. inet6 fe80::20c:29ff:feb2:65cb/64 scope link
    7. valid_lft forever preferred_lft forever

    此刻我们关闭终止主服务器keepalived

    在查看

    主服务器

    备服务器

    "成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

    "每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

    神秘泣男子

  • 相关阅读:
    【简说八股】Redisson的守护线程是怎么实现的
    MySQL---索引+事务
    JVM系列之GC
    Nacos中AP和CP 切换
    基于pytorch的AOD-net模型构建
    玩机搞机-------安卓修改apk apk的组成和编译 一
    【大数据】季节性模型概述
    java 程序员工作问题
    动态IP与静态IP的区别,你选对了吗?
    Python解决多个服务线程/进程重复运行定时任务的问题
  • 原文地址:https://blog.csdn.net/jxjdhdnd/article/details/140438408