热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

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

安装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


推荐阅读
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 标题: ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 最近帮人用Apache+Tomcat在同一台IP的服务器上设置多域名指向不同网站站点,花费了不少的时间。尤其是配置信息的时候,从网上找的资料有很多是错误的,误认不浅。所以今天特意把 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • 本文整理了Java中org.apache.hadoop.hbase.client.Increment.getDurability()方法的一些代码示例,展示了 ... [详细]
author-avatar
大海2502902497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有