为了账号安全,请及时绑定邮箱和手机立即绑定

Openshift结合IaaS的LB与Nginx实现高可用可伸缩外部负载均衡器

标签:
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的监听器的后台。


    webp

    IaaS LB与Nginx结合提供外部负载

部署操作

IaaS上资源准备

  1. 创建VPC IaaS

  2. 创建私网 IaaS

  3. 在私网下创建两台主机(instance1, instance2) IaaS

  4. 创建一个LB Iaas

搭建应用与配置

  1. LB上创建三个监听器(8443/TCP, 443/TCP, 80/TCP) IaaS

  2. LB的三个监听器的后端都配置为两台Instance IaaS

  3. 在instance上安装nginx Instance

[root@i-8 root]# yum install nginx
  1. 配置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;
}
  1. 启动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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消