背景
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 LB与Nginx结合提供外部负载
部署操作
IaaS上资源准备
创建VPC
IaaS
创建私网
IaaS
在私网下创建两台主机(instance1, instance2)
IaaS
创建一个LB
Iaas
搭建应用与配置
LB上创建三个监听器(8443/TCP, 443/TCP, 80/TCP)
IaaS
LB的三个监听器的后端都配置为两台Instance
IaaS
在instance上安装nginx
Instance
[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.3
[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.confupstream 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
[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的配置
global ...... maxconn 20000 nbthread 2 ......frontend f_8443 *:8443 use_backend b_8443 mode tcpbackend b_8443 mode tcp balance roundrobin server master1 99.3.1.1:8443 server master2 99.3.1.2:8443 server master3 99.3.1.3:8443frontend f_443 *:443 use_backend b_443 mode tcpbackend b_443 mode tcp balance roundrobin server infra1 99.3.1.11:443 server infra2 99.3.1.12:443frontend f_80 *:80 use_backend b_80 mode tcpbackend b_80 balance roundrobin server infra1 99.3.1.11:80 server infra2 99.3.1.12:80
作者:潘晓华Michael
链接:https://www.jianshu.com/p/9890e1d3849c
共同学习,写下你的评论
评论加载中...
作者其他优质文章