! 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服务是否正常 |
需要修改的地方
- router_id:改成实际主机名
- vrrp_strict:生产环境建议注释掉
- IP地址:改成实际环境的IP
- digest值:根据实际页面内容重新计算
- 认证密码:auth_pass改成复杂密码
发表回复