keepalive部署--双VIP

本文介绍了如何使用两台服务器和keepalive配置双VIP,以实现跨192.168.x.x和10.120.x.x两个网段的高可用服务。通过在Master和BACKUP节点上设置虚拟路由实例,实现了在不增加额外硬件成本的情况下,为不同网络环境的应用提供高可用接入能力。

在某些情况下,接入机除了对本网段提供高可用的服务能力外,还需要为其他域的应用提供高可用的接入能力。例如,接入机所在的网络环境地址为192.168.x.x,现在也需要为10.120.x.x的应用提供高可用的服务能力,怎么办?

如果不差钱,可以多部署一套高可用环境。即原先需要2台机器,现在需要4台。多出的2台服务器组成新的虚拟路由器组,为10.120.x.x网段的应用提供高可用的服务能力。

但是对于像版主这样全心全意为老板和客户省钱的程序猿们来说,上面那种方式显然不符合我们的价值观。

我们只用2台机器,就可以实现同时为2个甚至多个网段的应用提供高可用接入能力。

准备工作

  • 需要2台服务器,每个机器需要2个网卡,分别配置对应网段的IP
  • 每个网段需要准备1个VIP,作为接入地址,IP配置情况如下:
VIP IP 主机名
192.168.56.55 192.168.56.51 APP1
192.168.56.52 APP2
10.120.42.33 10.120.42.59 APP1
10.120.42.60 APP2

配置工作

本节只列出配置文件的差异,其余操作参考上一篇文章《keepalive实战

Master配置

global_defs {
   router_id APP1  
}


#vrrp_script chk_nginx {
#       script "/etc/keepalived/nginx_check.sh"
#       interval 2  #每2秒检测一次nginx的运行状态
#       weight -20  #失败一次,将自己的优先级-20
#}


vrrp_instance V
<think>我们正在讨论Keepalived实例配置实例通常指在同一台服务器上运行两个独立的Keepalived实例,每个实例管理不同的VRRP组(虚拟路由器)。这种配置常用于: 1. 实现更精细的故障隔离 2. 为不同服务分配独立的VIP(虚拟IP) 3. 避免单点故障扩大化 ### 实例配置核心步骤 #### 1. 创建独立配置文件 默认主配置文件为`/etc/keepalived/keepalived.conf`,实例需要: - **主实例**:保留默认配置文件 - **第二实例**:新建配置文件(如`/etc/keepalived/keepalived_second.conf`) ```bash # 复制模板创建第二实例配置 sudo cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived_second.conf ``` #### 2. 修改第二实例配置 关键调整项: - **`global_defs` 段**:添加 `vrrp_strict` 解除限制(必需)[^1] - **`vrrp_instance` 段**: - 使用不同的 `virtual_router_id`(范围1-255) - 设置不同的 `priority` - 绑定不同的物理接口或子接口(通过 `interface`) - 配置不重叠的VIP **示例配置**:`/etc/keepalived/keepalived_second.conf` ```nginx global_defs { vrrp_strict # 允许同一主机运行多实例[^2] } vrrp_instance VI_2 { # 实例名称改为唯一 state BACKUP interface eth0 # 可与主实例相同接口 virtual_router_id 52 # ⚠️必须与主实例不同 priority 90 # 设置合理优先级 advert_int 1 authentication {...} virtual_ipaddress { 192.168.1.200/24 # ⚠️不能与主实例VIP冲突 } } ``` #### 3. 启动实例服务 通过systemd创建独立服务单元: ```bash # 创建第二实例服务文件 sudo tee /etc/systemd/system/keepalived-second.service <<EOF [Unit] Description=Keepalived Second Instance After=network.target [Service] Type=forking ExecStart=/usr/sbin/keepalived -f /etc/keepalived/keepalived_second.conf ExecReload=/bin/kill -HUP \$MAINPID [Install] WantedBy=multi-user.target EOF # 启用并启动服务 sudo systemctl daemon-reload sudo systemctl enable --now keepalived-second ``` ### 配置验证命令 ```bash # 查看主实例状态 sudo systemctl status keepalived # 查看第二实例状态 sudo systemctl status keepalived-second # 检查VRRP组 sudo ip vrrp show ``` ### 典型问题排查 | 问题现象 | 解决方案 | |---------|----------| | VIP冲突 | 确保两个实例的 `virtual_ipaddress` 不重叠 | | virtual_router_id重复 | 检查所有实例的ID是否唯一(范围1-255) | | 服务端口冲突 | 默认使用224.0.0.18:112,需通过 `virtual_ipaddress_excluded` 规避[^3] | ### 实例流量隔离方案 若需物理隔离流量,可创建VLAN子接口: ```bash # 创建eth0.100子接口 sudo ip link add link eth0 name eth0.100 type vlan id 100 sudo ip addr add 192.168.100.1/24 dev eth0.100 sudo ip link set eth0.100 up ``` 在配置中将 `interface eth0.100` 绑定到第二实例。 --- §§ 相关问题 §§ 1. 如何为Keepalived实例配置独立的健康检查脚本? 2. 当使用实例时,如何避免系统资源(CPU/内存)竞争? 3. Keepalived实例与VRRP多虚拟路由器配置有何区别? 4. 在Kubernetes环境中如何部署Keepalived实例? [^1]: Keepalived官方文档 - Multiple Instances [^2]: VRRP协议RFC 3768 - Virtual Router Redundancy Protocol [^3]: Linux内核文档 - net/vrrp</think>### Keepalived 实例配置详解 实例配置指在同一台服务器上部署**两个独立的 Keepalived 进程**,分别管理不同的 VRRP 组(虚拟路由器)。这种设计常用于: 1️⃣ **服务隔离**:为不同业务分配独立 VIP 和故障转移逻辑 2️⃣ **资源优化**:避免单点故障影响所有服务 3️⃣ **高可用增强**:实现多层故障切换 --- #### 一、核心配置步骤 ##### 1. 创建独立配置文件 ```bash # 主实例配置(默认路径) /etc/keepalived/keepalived.conf # 第二实例配置(新建文件) /etc/keepalived/keepalived_second.conf ``` ##### 2. 配置关键差异项(以第二实例为例) ```nginx # /etc/keepalived/keepalived_second.conf global_defs { router_id LVS_SECOND # ⚠️ 必须与主实例不同 } vrrp_instance VI_2 { # ⚠️ 实例名称唯一 state BACKUP interface eth0 # 可复用相同网卡 virtual_router_id 52 # ⚠️ 必须与主实例不同 (1-255) priority 90 # 优先级需独立设置 advert_int 1 virtual_ipaddress { 192.168.2.100/24 # ⚠️ VIP 不能冲突 } track_script { chk_nginx_second # 独立健康检查脚本 } } ``` ##### 3. 健康检查脚本隔离 ```bash # 主实例脚本 /etc/keepalived/chk_nginx.sh # 第二实例脚本 /etc/keepalived/chk_nginx_second.sh # 内容可相同但路径不同 ``` ##### 4. 启动实例服务 ```bash # 主实例(默认服务) systemctl start keepalived # 第二实例(需创建独立服务) cp /usr/lib/systemd/system/keepalived.service /etc/systemd/system/keepalived-second.service # 修改新服务文件 ExecStart=/usr/sbin/keepalived -f /etc/keepalived/keepalived_second.conf # 启动第二实例 systemctl daemon-reload systemctl start keepalived-second ``` --- #### 二、关键注意事项 1. **资源隔离要求** - **virtual_router_id** 必须唯一(如主实例用 51,第二实例用 52) - **router_id** 在 `global_defs` 中需不同 - **VIP 地址池** 不能重叠 2. **网络端口冲突** VRRP 协议默认使用 **224.0.0.18:112**,实例需通过防火墙规则隔离: ```bash # 第二实例改用不同端口 vrrp_instance VI_2 { garp_master_delay 1 use_vmac_second # 创建虚拟MAC避免冲突[^1] } ``` 3. **脑裂风险规避** 当实例监控同一服务时,需配置互斥锁: ```bash # 在健康检查脚本中添加 if [ -f /tmp/instance1.lock ]; then exit 1 # 如果主实例在运行,本实例暂停服务 fi ``` --- #### 三、状态验证命令 ```bash # 查看主实例状态 ip vrrp show | grep VI_1 # 查看第二实例状态 ip vrrp show | grep VI_2 # 检查进程 ps aux | grep keepalived | grep -v grep ``` **预期输出**: ```bash eth0: VI_1 Master 100 # 主实例 eth0: VI_2 Backup 90 # 第二实例 ``` --- #### 四、典型问题解决方案 | 问题现象 | 解决方法 | |---------------------------|--------------------------------------------------------------------------| | VIP 无法绑定 | 检查 `virtual_router_id` 唯一性,禁用 `vrrp_strict` 模式[^2] | | 健康检查脚本冲突 | 为每个实例设置独立脚本路径,使用不同日志文件 | | 系统资源占用过高 | 限制 CPU 使用率:`cgroup/cpu.sh {cpulimit 30 -p $MAINPID}` | | 故障转移混乱 | 在 `track_script` 中添加优先级权重控制:`weight -20` | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员柒叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值