LVS+Keepalived 高可用环境部署记录(主主和主从模式)

在现代的网络服务架构中,高可用性是至关重要的。LVS(Linux Virtual Server)作为一种高性能的负载均衡解决方案,结合 Keepalived 实现高可用,能够确保服务的持续可用性。本文将详细记录 LVS+Keepalived 高可用环境在主主和主从模式下的部署过程,帮助读者理解并实践这一技术。

目录#

  1. 环境准备
  2. 主从模式部署
    • 安装 Keepalived 和 LVS
    • 配置 Keepalived
    • 配置 LVS
  3. 主主模式部署
    • 安装 Keepalived 和 LVS
    • 配置 Keepalived
    • 配置 LVS
  4. 常见实践与最佳实践
  5. 示例用法
  6. 参考

1. 环境准备#

1.1 服务器准备#

  • 至少两台服务器,假设为 Server A 和 Server B。
  • 操作系统:CentOS 7(其他 Linux 发行版也可,配置方式类似)。
  • 关闭防火墙和 SELinux(生产环境可根据实际情况配置防火墙规则):
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

1.2 安装必要软件包#

yum install -y keepalived ipvsadm

2. 主从模式部署#

2.1 安装 Keepalived 和 LVS#

在 Server A 和 Server B 上执行上述安装命令。

2.2 配置 Keepalived(以 Server A 为主服务器为例)#

编辑 /etc/keepalived/keepalived.conf:

! Configuration File for keepalived
 
global_defs {
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 实际使用的网络接口
    virtual_router_id 51
    priority 100  # 主服务器优先级高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100  # 虚拟 IP
    }
}
 
virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.1.101 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.102 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

解释:

  • global_defs:全局定义,router_id 用于标识 Keepalived 实例。
  • vrrp_instance:VRRP 实例配置,state 为主服务器状态(MASTER),interface 为网络接口,virtual_router_id 虚拟路由 ID,priority 优先级,virtual_ipaddress 虚拟 IP。
  • virtual_server:虚拟服务器配置,lb_algo 负载均衡算法(这里是加权轮询 wrr),lb_kind 负载均衡类型(DR 直接路由模式),real_server 后端真实服务器配置,TCP_CHECK 健康检查。

在 Server B 上,将 state 改为 BACKUP,priority 适当调低(如 90),其他配置类似。

2.3 配置 LVS(以 Server A 为例)#

ipvsadm -A -t 192.168.1.100:80 -s wrr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g

解释:

  • -A:添加虚拟服务器。
  • -a:添加真实服务器。
  • -t:指定虚拟服务器 IP 和端口。
  • -s:负载均衡算法。
  • -r:真实服务器 IP 和端口。
  • -g:DR 模式。

在 Server B 上同样配置,但需要注意虚拟 IP 的绑定(Keepalived 会自动处理部分)。

3. 主主模式部署#

3.1 安装 Keepalived 和 LVS#

同主从模式安装步骤。

3.2 配置 Keepalived(以 Server A 为例)#

编辑 /etc/keepalived/keepalived.conf:

! Configuration File for keepalived
 
global_defs {
   router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
 
virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.1.101 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
 
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.1.101  # 另一个虚拟 IP
    }
}
 
virtual_server 192.168.1.101 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
 
    real_server 192.168.1.102 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

解释:

  • 定义了两个 VRRP 实例(VI_1 和 VI_2),分别对应不同的虚拟 IP。
  • 每个虚拟 IP 都有自己的虚拟服务器配置,指向不同的后端真实服务器。

在 Server B 上,对于 VI_1,state 改为 BACKUP,priority 调低;对于 VI_2,state 改为 MASTER(如果 Server B 要承担另一虚拟 IP 的主角色),其他类似配置。

3.3 配置 LVS#

同主从模式配置方式,为每个虚拟 IP 配置对应的 LVS 规则。

4. 常见实践与最佳实践#

  • 健康检查优化:根据服务特点调整 TCP_CHECK 或其他检查参数,确保准确检测后端服务器状态。
  • 负载均衡算法选择:根据业务流量特性选择合适的 lb_algo(如 rr 轮询、wrr 加权轮询等)。
  • 网络优化:确保网络接口性能良好,合理设置 advert_int(VRRP 通告间隔)。

5. 示例用法#

  • 访问虚拟 IP(如 192.168.1.100),LVS 会根据配置将请求分发到后端真实服务器。
  • 模拟主服务器故障,观察 Keepalived 是否能快速切换,虚拟 IP 是否漂移到备份服务器。

6. 参考#

通过以上步骤,读者可以成功部署 LVS+Keepalived 高可用环境的主主和主从模式,实现服务的高可用性和负载均衡。在实际生产环境中,还需根据具体业务需求进行进一步的优化和调整。