OpenShift使用KeepAlived+LVS实现外部负载均衡器
OpenShift集群资源列表
主机名 | 类型 | IP |
---|---|---|
相关节点IP | ||
master0 | master | 192.168.0.2 |
master1 | master | 192.168.0.3 |
master2 | master | 192.168.0.4 |
infra0 | infra | 192.168.0.5 |
infra1 | infra | 192.168.0.6 |
vip地址分配 | ||
master-vip | vip | 192.168.0.250 |
infra-vip | vip | 192.168.0.251 |
部署Master API负载均衡器作为集群内外访问的入口
- 在三个Master节点安装KeepAlived与LVS
1
2ansible masters -m package -a 'name=keepalived state=present'
ansible masters -m package -a 'name=ipvsadm state=present' - 选择master0作为VIP的Master节点KeepAlive健康检查类型有五种:TCP_CHECK/HTTP_GET/SSL_GET/MISC_CHECK/SMTP_CHECK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72$ cat /etc/keepalived/keepalived.conf
global_defs {
#指定keepalived在发生切换时需要发送email到的对象
notification_email {
receiver@example.com #邮件接收者
}
notification_email_from sender@example.com #邮件发送者
smtp_server 127.0.0.1 #邮件服务器地址,如未安装,使用本地
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#IP漂移协议
vrrp_instance VI_1 {
state MASTER #指定A节点为主节点 备分机上设置为BACKUP即可
interface eth0 #绑定IP漂移的网络接口,在该接口上绑定VIP
virtual_router_id 51 #VRRP组名,三个节点的设置必须一样
priority 100 #优先级,同一个 vrrp_instance 的 MASTER 优先级必须比 BACKUP 高
advert_int 1 #MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒
authentication { # 设置认证
auth_type PASS #认证方式,支持 PASS 和 HA
auth_pass 1111 #证密码为明文,同一 vrrp 实例 MASTER 与 BACKUP 使用相同的密码才能正常通信
}
virtual_ipaddress { #虚拟IP地址(VIP),可以有多个地址,每个地址占一行
192.168.0.250 #绑定VIP
}
}
#只接收8443端口过来的请求
virtual_server 192.168.232.206 8443 {
delay_loop 6 # 服务健康检查周期,6秒
lb_algo wlc # 负载均衡调度算法,一般用wrr、rr、wlc
lb_kind DR # 负载均衡转发规则。一般包括DR,NAT,TUN 3种
nat_mask 255.255.255.0
persistence_timeout 50 #会话保持时间。把用户请求请求间隔在未超过保持时间时,一直分发到某个服务节点
protocol TCP
#RS服务器1
real_server 192.168.0.2 8443 {
weight 1
#健康检查
TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
connect_timeout 10 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 3 # 重连时间间隔
connect_port 8443 # 检测端口
}
}
#RS服务器2
real_server 192.168.0.3 8443 {
weight 1
#健康检查
TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
connect_timeout 10 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 3 # 重连时间间隔
connect_port 8443 # 检测端口
}
}
#RS服务器2
real_server 192.168.0.4 8443 {
weight 1
#健康检查
TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
connect_timeout 10 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 3 # 重连时间间隔
connect_port 8443 # 检测端口
}
}
} - TCP_CHECK:TCP端口是否能通
1
2
3
4
5
6TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
connect_timeout 10 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 3 # 重连时间间隔
connect_port 6500 # 检测端口
} - HTTP_GET:请求HTTP URL的Code是否为200
1
2
3
4
5
6
7
8
9HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
} - SSL_GET:请求HTTPS URL的Code是否为200
1
2
3
4
5
6
7
8
9SSL_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
} - MISC_CHECK:脚本运行的返回码是否为0
1
2
3
4
5MISC_CHECK {
misc_path "/etc/keepalived/misc_check.sh https://192.168.0.2:6500/check_status" # 外部程序或者脚本的路径和参数
misc_timeout 10 # 脚本执行的超时时间
misc_dynamic #动态权重标志。脚本返回0则检测成功权重不变,返回1表示失败权重设置为0
} - SMTP_CHECK:SMTP健康检查器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17SMTP_CHECK
{
# 用于smtp HELO请求的可选字符串
helo_name hello
host {
# 默认值为真实服务器的IP
connect_ip 192.168.0.3
# 默认值为25
connect_port 25
}
# 连接超时时间
connect_timeout 5
# 重试失败检查的次数
retry 3
# 重试前延迟秒
delay_before_retry <INTEGER>
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论