Openshift结合IaaS的LB与Nginx实现高可用可伸缩外部负载均衡器
背景
- Openshift在集群部署时需要额外提供一个负载均衡器,该负载均衡器对master api及router haproxy中的80与443服务进行负载,实现高可用。
- 如果在IaaS上部署Openshift集群的话,我们很自然地会使用IaaS的LB服务,直接对LB作TCP端口负载就解决问题了,既实现了需要的负载均衡,而且还有健康检查,负载高可用,非常方便。
- 但是我们的Openshift集群并不是部署在IaaS上,而是额外部署。IaaS上的LB无法直接将集群中的服务器作为监听器的后端进行负载,这时我们就需要在Openshift集群下额外独立部署负载均衡器。考虑到保证负载均衡器的高可用性,及监控等,这会是一个比较复杂的过程。
- 那么我们是否可以结合IaaS上的LB现有的机制,制定一套既方便部署,又高可用的方案呢?答案是肯定的。
- 该篇就是介绍如何结合IaaS的LB与代理应用Nginx实现Openshift高可用的外部负载均衡
原理
- 负载均衡器应用,首先大家想到的最多的两款应用是:Nginx与Haproxy,我们选用了Nginx。
- 将IaaS的LB与Nginx结合的思路也很简单。在IaaS上部署两台主机,上面部署好代理应用,将代理的后端设置为Openshift的服务器,同时将这两台服务器作为IaaS上的LB的监听器的后台。
部署操作
IaaS上资源准备
创建VPC
IaaS
创建私网
IaaS
在私网下创建两台主机(instance1, instance2)
IaaS
创建一个LB
Iaas
搭建应用与配置
LB上创建三个监听器(8443/TCP, 443/TCP, 80/TCP)
IaaS
LB的三个监听器的后端都配置为两台Instance
IaaS
在instance上安装nginx
Instance
1
[root@i-8 root]# yum install nginx
配置nginx
Instance
openshift route服务器IP: 99.3.1.11、99.3.1.12
openshift master服务器IP: 99.3.1.1、99.3.1.2、99.3.1.31
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[root@i-8 conf.d]# cat /etc/nginx/nginx.conf
...
events {
worker_connections 1024;
}
stream{
include /etc/nginx/conf.d/tcp.conf;
}
http {
...
[root@i-8 conf.d]# cat /etc/nginx/conf.d/tcp.conf
upstream nginx80{
server 99.3.1.11:80;
server 99.3.1.12:80;
}
server {
listen 80;
proxy_pass nginx80;
}
upstream nginx443{
server 99.3.1.11:443;
server 99.3.1.12:443;
}
server {
listen 443;
proxy_pass nginx443;
}
upstream nginx8443{
server 99.3.1.1:8443;
server 99.3.1.2:8443;
server 99.3.1.3:8443;
}
server {
listen 8443;
proxy_pass nginx8443;
}启动nginx
1
2[root@i-8 root]# systemctl start nginx
[root@i-8 root]# systemctl enable nginx至此一个可监控、高可用且具有弹性伸缩功能的外部负载均衡器就完成了。
演示方法
与之前访问openshift的服务一样,只是将域名解析的IP指向IaaS的LB就可以了。
所有服务都能正常访问。同时对于不同的项目,可以通过创建不同的LB,来实现了负载均衡的扩容,Nginx应用也可以通过创建更多的Instance进行扩容。
补充说明
感谢有朋友提出了以下问题:
“nginx不好用,除非nginx plus,否则一个master api不可用,还是会访问到那个节点。haproxy配置也很简单,可以有健康检查,如果熟悉的话,最好使用haproxy来作为代理应用。”
朋友提出的问题确实是一个很严重的问题,我对haproxy确实不太熟悉~~。
但是朋友说的这个问题其实不必太担心,因为nginx默认的轮询方式的请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。所以nginx自己会对openshift的服务作了检查,来避免朋友提出的问题。
我也单独对nginx的这个健康检查作了验证,确实是有效的。
再次感谢提出问题的朋友,后序我也找时间使用haproxy作下测试。
Haproxy的配置
1 | global |