Keepalived 完整配置文件逐行解析

! Configuration File for keepalived          # 注释:这是keepalived的配置文件

一、全局配置(global_defs)

global_defs {
   # 【邮件通知配置】当发生主备切换时发送邮件告警
   notification_email {                     # 收件人列表
     acassen@firewall.loc                    # 第一个收件人
     failover@firewall.loc                   # 第二个收件人(故障转移通知)
     sysadmin@firewall.loc                    # 第三个收件人(系统管理员)
   }
   notification_email_from Alexandre.Cassen@firewall.loc  # 发件人地址
   smtp_server 192.168.200.1                  # SMTP邮件服务器地址
   smtp_connect_timeout 30                     # 连接SMTP服务器的超时时间(秒)

   router_id LVS_DEVEL                         # 【路由器标识】本机标识,建议改成实际主机名

   # 【VRRP协议配置】
   vrrp_skip_check_adv_addr                    # 跳过检查VRRP通告地址,提高兼容性
   vrrp_strict                                  # 【注意】严格VRRP模式,生产环境建议注释掉
   vrrp_garp_interval 0                         # 免费ARP发送间隔,0表示不限制
   vrrp_gna_interval 0                          # 免费NA发送间隔(IPv6用)
}

二、VRRP实例配置(高可用)

vrrp_instance VI_1 {                          # 定义VRRP实例,名为VI_1
    state MASTER                               # 【角色】初始状态为主节点
    interface eth0                              # 【网卡】绑定到eth0
    virtual_router_id 51                        # 【VRID】虚拟路由ID,同一组必须一致
    priority 100                                 # 【优先级】越高越容易成为MASTER
    advert_int 1                                 # 【通告间隔】每秒发送一次心跳

    authentication {                             # 【认证】同一组必须完全一致
        auth_type PASS                            # 认证类型:简单密码
        auth_pass 1111                             # 密码(最多8位)
    }

    virtual_ipaddress {                           # 【虚拟IP列表】可配置多个VIP
        192.168.200.16                             # 第一个VIP
        192.168.200.17                             # 第二个VIP
        192.168.200.18                             # 第三个VIP
    }

    # Allow packets addressed to the VIPs above to be received
    accept                                      # 【接受VIP流量】允许本机接收发往VIP的包
                                                # 通常用于DR模式,让本地也能响应VIP
}

三、虚拟服务器配置1(HTTPS负载均衡)

virtual_server 192.168.200.100 443 {           # 【虚拟服务器】VIP: 192.168.200.100, 端口: 443
    delay_loop 6                                # 【健康检查间隔】每6秒检查一次
    lb_algo rr                                   # 【负载均衡算法】rr = 轮询
    lb_kind NAT                                  # 【转发模式】NAT模式
    persistence_timeout 50                       # 【持久连接】50秒内同一用户发到同一后端
    protocol TCP                                 # 【协议】TCP

    # 后端真实服务器
    real_server 192.168.201.100 443 {            # 【后端服务器】IP和端口
        weight 1                                  # 【权重】处理能力权重

        # 【健康检查方式】SSL_GET(检查HTTPS服务)
        SSL_GET {
            url {                                 # 第一个要检查的URL
              path /                               # 检查根路径
              digest ff20ad2481f97b1754ef3e12ecd3a9cc  # 期望返回内容的MD5值
            }
            url {                                 # 第二个要检查的URL
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3                      # 连接超时3秒
            retry 3                                # 失败重试3次
            delay_before_retry 3                   # 重试前等待3秒
        }
    }
}

四、虚拟服务器配置2(带sorry_server)

virtual_server 10.10.10.2 1358 {                # 【虚拟服务器】VIP: 10.10.10.2, 端口: 1358
    delay_loop 6                                 # 每6秒检查一次
    lb_algo rr                                    # 轮询算法
    lb_kind NAT                                   # NAT模式
    persistence_timeout 50                        # 持久连接50秒
    protocol TCP                                  # TCP协议

    # 【备用服务器】当所有后端都故障时,转发到这个服务器
    sorry_server 192.168.200.200 1358            # 显示友好的维护页面

    # 第一台后端服务器
    real_server 192.168.200.2 1358 {
        weight 1

        # 【健康检查方式】HTTP_GET
        HTTP_GET {
            url {                                 # 检查第一个URL
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {                                 # 检查第二个URL
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {                                 # 检查第三个URL
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3                      # 连接超时3秒
            retry 3                                # 重试3次
            delay_before_retry 3                   # 重试前等待3秒
        }
    }

    # 第二台后端服务器
    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c  # 注意:这里的digest不同
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

五、虚拟服务器配置3(另一个应用)

virtual_server 10.10.10.3 1358 {                # 【虚拟服务器】VIP: 10.10.10.3, 端口: 1358
    delay_loop 3                                 # 【健康检查间隔】每3秒检查一次(更频繁)
    lb_algo rr                                    # 轮询算法
    lb_kind NAT                                   # NAT模式
    persistence_timeout 50                        # 持久连接50秒
    protocol TCP                                  # TCP协议

    # 第一台后端服务器
    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    # 第二台后端服务器
    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d  # 和第一台相同
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

配置要点总结

整体结构

global_defs          # 全局配置
  ↓
vrrp_instance        # VRRP高可用配置(主备切换)
  ↓
virtual_server       # LVS负载均衡配置(多个)
  ↓
real_server          # 后端真实服务器
  ↓
健康检查方式          # TCP_CHECK/HTTP_GET/SSL_GET

各模块作用

配置块作用
global_defs全局参数,如邮件告警、路由器标识
vrrp_instance实现高可用,管理VIP漂移
virtual_server定义负载均衡的VIP和端口
real_server定义后端真实服务器
HTTP_GET/SSL_GET精确检查Web服务是否正常

需要修改的地方

  1. router_id:改成实际主机名
  2. vrrp_strict:生产环境建议注释掉
  3. IP地址:改成实际环境的IP
  4. digest值:根据实际页面内容重新计算
  5. 认证密码:auth_pass改成复杂密码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注