阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Marathon-lb 服务自动发现和负载均衡

175次阅读
没有评论

共计 3499 个字符,预计需要花费 9 分钟才能阅读完成。

Marathon-lb 用途
在使用 Marathon+Mesos 的容器集群中,我们会构建很多个容器,这些容器在不同的 slave 上分配了不同的随机端口,这些 Docker 容器在 HA 模式下运行,如果任何 slave 节点故障导致容器实例意外退出,它将自动重新创建到健康的节点上。所以我们不必担心高可用性问题,Marathon 会自动帮我们处理这些问题。

但是,当我们要使用这些容器处理我们的业务数据时,问题就来了。如我们有多个 nginx 提供 web 服务,我们如何分配流量?如果 slave 节点发生硬件故障,或者容器实例崩溃,那么新创建的容器 IP 和端口随时可能发生变化。我们需要确保我们的负载均衡器能够在最短时间内检测这些变化,并相应地路由流量。要解决这个问题,我们就要使用 Marathon-lb。Marathon-lb 是通过监测 Marathon 应用程序状态来管理 HAProxy 的工具。而 HAProxy 是一款快速,高效,经过测试的高可用性负载平衡器,具有许多高级功能,如健康检查,SSL,会话持久性等。

Marathon-lb 设计思想
Marathon-lb 通过调用自身的 marathon_lb.py 脚本,连接到 Marathon API 以检索所有正在运行的应用程序,根据检索的信息生成 HAProxy 配置并重新加载 HAProxy。每当应用程序状态有任何变化时,Marathon-lb 就会使用最新的 IP 和端口号更新 haproxy 配置文件,并重新加载 haproxy。默认情况下,Marathon-lb 会绑定到每个应用的服务端口,并将传入的请求发送到应用实例。

Marathon-lb 依赖于嵌入在 haproxy 中的最新 lua 支持来生成配置文件。我们需要下载并安装具有 Lua 支持的 Haproxy,需要使用 haproxy 1.6.0 以上版本。

Marathon-lb 可以直接从官方下载 docker 镜像,简单配置之后就可以和其它容器一起放在 Mesos 集群中以容器的方式运行,也可以使用传统的方法在某一两台主机上安装,设置 vip, 配置为高可用的模式,这两种方式各有优缺点,可以根据自己的业务要求进行合理规划。下面就这两种方式为大家一一介绍。

使用单独主机配置 Marathon-lb
安装 Haproxy

1、Haproxy 需要 lua5.3 及以上版本,CentOS7.2 默认的 lua 版本是 5.1.4,所以首先安装 lua5.3.4, 这里使用编译安装,需要确保系统中已经安装 gcc 和 readline-devel:

[root@marathon-lb ~]# wget http://www.lua.org/ftp/lua-5.3.4.tar.gz
[root@marathon-lb ~]# tar  xf lua-5.3.4.tar.gz 
[root@marathon-lb ~]# cd lua-5.3.4 
[root@marathon-lb lua-5.3.4]# make linux test
[root@marathon-lb lua-5.3.4]# cd src
[root@marathon-lb src]# cp lua luac /usr/bin/ 
[root@marathon-lb ~]# lua -v
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio

2、安装 Haproxy
先安装必要的模块:
[root@marathon-lb ~]# yum install openssl-devel pcre-devel zlib-devel libcurl-devel -y

下载最新的源码包安装:
[root@marathon-lb ~]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz 
[root@marathon-lb ~]# tar xf haproxy-1.7.8.tar.gz 
[root@marathon-lb ~]# cd haproxy-1.7.8
[root@marathon-lb haproxy-1.7.8]# make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1 USE_LUA=1
[root@marathon-lb haproxy-1.7.8]# make install PREFIX=/usr/local/haproxy
[root@marathon-lb haproxy-1.7.8]# haproxy -v
HA-Proxy version 1.7.8 2017/07/07
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>

安装 Marathon-lb

1、从 github 上下载安装 Marathon-lb

[root@marathon-lb ~]# git clone https://github.com/mesosphere/marathon-lb.git 
[root@marathon-lb ~]# mv marathon-lb  /
[root@marathon-lb ~]# cd /marathon-lb

2、配置 Marathon-lb 通过 Marathon API 获取容器应用状态,生成 haproxy 配置并重新加载 haproxy.
[root@marathon-lb marathon-lb]# ./marathon_lb.py \
-m http://192.168.20.41:8080  -m http://192.168.20.42:8080 \
-m http://192.168.20.43:8080  –group external –dont-bind-http-https

此时,会在 /etc/haproxy 目录下生成一个 haproxy.cfg 的文件。
提示:如果出现如下报错,请参考此链接安装 python3
/usr/bin/env: python3: No such file or directory

3、启动 haproxy
haproxy -f  /etc/haproxy/haproxy.cfg

4、发布含有 HAPROXY_GROUP 类型的标签的 app,marathon-lb 就能实时更新 haproxy 配置信息。

以容器方式配置 Marathon-lb

以容器方式配置 Marathon-lb 非常简单,只需下载镜像,启动容器两步即可完成。
1、从官方下载 Marathon-lb 容器镜像
docker pull docker.io/mesosphere/marathon-lb

2、指定 mesos 的 master 主机和 Haproxy 组,启动 Marathon-lb 容器:
docker run -d –privileged -e PORTS=9090 –net=host \
docker.io/mesosphere/marathon-lb sse \
-m http://192.168.20.41_ip:8080 -m http://192.168.20.42:8080 \
-m http://192.168.20.43:8080  –group external

这里所指定网络模式为 host.
3、发布 APP 要指定标签类型,否则不会被 marathon-lb 获取到状态信息:
{
  “id”:”nginx”,
  “labels”: {
  “HAPROXY_GROUP”:”external”,
  “HAPROXY_0_VHOST”:”nginx1.com”
  },
  “cpus”:0.2,
  “mem”:20.0,
 “instances”: 1,
 “constraints”: [[“hostname”, “UNIQUE”,””]],
 “container”: {
    “type”:”DOCKER”,
  “docker”: {
    “image”: “nginx”,
    “network”: “BRIDGE”,
    “portMappings”: [
        {“containerPort”: 80, “hostPort”: 0,”servicePort”: 0, “protocol”: “tcp”}
      ]
    }
  }
}

4、我们可以通过访问 marathon-lb 容器所在的主机 IP 来访问 nginx(指定了 VHOST 需要做解析或在本地添加 hosts 记录),使用如下格式访问 9090 端口来查看当前 haproxy 的状态:
http://192.168.20.45:9090/haproxy?stats

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146193.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计3499字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中