【问题标题】:How to create Floating IP and use it to configure HAProxy如何创建浮动 IP 并使用它来配置 HAProxy
【发布时间】:2016-05-30 15:43:51
【问题描述】:

我最近尝试使用 HAProxy 对我的应用程序进行负载平衡,并且能够成功地做到这一点。后来,我遇到了一个叫Floating IP的概念,可以和keepalived一起使用,让负载均衡器高可用。我无法理解如何创建浮动 IP。如何创建浮动 IP 并使用它来配置 HAProxy? 谢谢。

【问题讨论】:

    标签: load-balancing haproxy floating-ip


    【解决方案1】:

    假设:

    • 这适用于 Ubuntu 14.04
    • haproxy-primary IP: 198.51.100.10
    • haproxy-二级IP:198.51.100.20
    • 共享IP:198.51.100.50
    • 任何 DNS 规则都应指向共享 IP (198.51.100.50)

    步骤:

    1. 为keepalived添加防火墙规则#224.0.0.18是keepalived组播地址
      1. sudo ufw allow in from 198.51.100.20 to 224.0.0.18# 198.51.100.10
      2. sudo ufw allow in from 198.51.100.10 to 224.0.0.18# 198.51.100.20
    2. 允许访问共享 IP 地址
      1. 编辑/etc/sysctl.conf
      2. 设置net.ipv4.ip_nonlocal_bind=1
      3. sudo sysctl -p # 重新加载配置更改
    3. 安装keepalived
      1. sudo apt-get install keepalived
    4. 在两台服务器上配置 keepalived
      1. 编辑/创建/etc/keepalived/keepalived.conf
      2. 请参见下面的示例文件 # 主服务器和辅助服务器上的优先级必须不同!
    5. 重启keepalived
      1. sudo service keepalived 重启
    6. 监听共享 IP 地址
      1. 编辑/etc/haproxy/haproxy.cfg
      2. bind 198.51.100.50:80
    7. 重启 haproxy(在两台 haproxy 服务器上)
      1. sudo service haproxy restart
    8. 验证正确的故障转移
      1. primary: sudo ip addr show | grep eth0 # 应该列出共享 IP
      2. secondary: sudo ip addr show | grep eth0 # 不应该列出共享 IP
      3. 主要:sudo service haproxy stop
      4. primary: sudo ip addr show | grep eth0 # 不应列出共享 IP
      5. secondary: sudo ip addr show | grep eth0 # 应该列出共享 IP
      6. 主要:sudo service haproxy start
      7. primary: sudo ip addr show | grep eth0 # 应该列出共享 IP
      8. secondary: sudo ip addr show | grep eth0 # 不应该列出共享 IP

    /etc/keepalived/keepalived.conf

         vrrp_script chk_haproxy {      # Requires keepalived-1.1.13
           script "killall -0 haproxy"  # cheaper than pidof
           interval 2 # check every 2 seconds
           weight 2 # add 2 points of priority if OK
         }
         vrrp_instance VI_1 {
           interface eth0
           state MASTER
           virtual_router_id 51
           priority 101 # 101 on primary, 100 on secondary
           virtual_ipaddress {
             198.51.100.50
           }
           track_script {
             chk_haproxy
           }
         }
    

    【讨论】:

      【解决方案2】:

      Matt Rice 的回答非常好,但请注意,如果您在 Red Hat EL 7 上运行 SELinux,则需要

      sudo setsebool haproxy_connect_any on
      

      ...否则 haproxy 将无法在当前没有虚拟 IP 地址的系统上启动,并抱怨它无法绑定。

      【讨论】:

        猜你喜欢
        • 2017-06-03
        • 1970-01-01
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多