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

saltbroker:轻量级的SaltProxy解决方案

salt,broker,轻量级,的,salt,p

salt-broker: 轻量级的Salt Proxy解决方案

基本简介

当前运维系统底层采用 Salt 进行实现, 由于节点分布在全国各地, 存在南北通畅问题, 为了解决这个问题, 之前采用了 Syndic 方案, 在实际使用中发现由于Syndic采用分治机制, 弱化了MasterOfMaster, 在某些网络状况较差的情况下, 会让结果变得不可控. 为了解决该问题, 借鉴ZeroMQ文档, 开发了轻量的Salt Proxy解决方案 salt-broker

前置阅读

  • 0MQ - The Guide: Sockets and Patterns

  • Salt中ZeroMQ那点事

  • Salt中Syndic那点事

环境说明

  • CentOS6.4

  • Salt 2014.1.10 ,默认配置

  • 由于本文为原理解析, 所以采用的代码为最初版的代码, 只描述了其功能逻辑

为什么会有salt-broker?

因为采用Syndic, 在网络链路不好的情况下, syndic架构将变得不可控. 详情请访问 Salt中Syndic那点事

而由于业务系统采用Salt作为中心调度, 结果不可控将变得非常糟糕. 尝试在syndic基础上进行修改, 没有达到预期. 分析了需求, 其实自己需要的是一个强中心, 轻量级的Salt Proxy解决方案, 所以就有了 salt-broker .

salt-broker是什么?

salt-broker是轻量级的Salt proxy解决方案, 只做数据转发, 不做额外的处理. 其工作原理如下:

PUB Broker

在Master/Minions结构中, 命令分发采用ZeroMQ PUB/SUB模式, 如下图:

https://img1.php1.cn/3cdc5/3531/42f/a9411a90ee585d60.png

salt-broker中的PUB Broker在中间增加了Forwarder Proxy层, 使架构变成如下:

https://img1.php1.cn/3cdc5/3531/42f/4640add86dbd9904.png

对应代码如下:

master_pub = "tcp://%s:%s" %(self.master_ip, self.pub_port)context = zmq.Context()frontend = context.socket(zmq.SUB)frontend.connect(master_pub)backend = context.socket(zmq.PUB)backend.bind("tcp://0.0.0.0:%s" %self.pub_port)frontend.setsockopt(zmq.SUBSCRIBE, b'')while True:     message = frontend.recv_multipart()     backend.send_multipart(message)

本地建立PUB接口, 并连接Master的SUB接口, 订阅来自于Master的消息, 接收到后立马发送到本地的PUB接口. 由于Minions上指定的Master地址为salt-broker所在的地址, 所以Minions能够接受到该消息.

Ret Broker

在Master/Minions结构中, 认证,文件服务,结果收集等采用ZeroMQ ROUTER/REQ模式, 如下图:

https://img1.php1.cn/3cdc5/3531/42f/99f2802223ab69fc.png

salt-broker中的Ret Broker在原来的REQ/ROUTER之间再增加了一层ROUTER/DEALER Proxy层. 对应的代码如下:

master_ret = "tcp://%s:%s" %(self.master_ip, self.ret_port)context = zmq.Context()frontend = context.socket(zmq.ROUTER)frontend.bind("tcp://0.0.0.0:%s" %self.ret_port)backend = context.socket(zmq.DEALER)backend.connect(master_ret)zmq.device(zmq.QUEUE, frontend, backend)

本地建立ROUTER接口, 接收来自于Minions的REQ请求; 同时本地建立DEALER接口, 连接Master的Router接口, 将接收到的数据发送给远端的Master ROUTER接口.

Broker VS Syndic

salt-broker与syndic一样, 都支持多层级架构. salt-broker相对于syndic, 更为轻量级, 只做数据转发. 在超大规模场景下, salt-broker并不能有效的降低master的压力, 而syndic能够降低.

syndic本地会维护auth及文件服务系统, 而broker会将所有请求转发给Master, 即所有的Minions的最终管理都是在Master上. 由于所有管理权均在Master上, salt-broker能够解决掉之前Syndic在网络不稳定时的不可控问题.

如何使用salt-broker?

全新安装

  1. 安装salt(需提前配置EPEL)

yum -y install salt
  1. 安装salt-broker

pip install salt-broker wget https://raw.githubusercontent.com/pengyao/salt-broker/master/pkg/rpm/salt-broker -O /etc/rc.d/init.d/salt-brokerchmod +x /etc/rc.d/init.d/salt-broker
  1. 配置salt-broker

/etc/salt/broker

master: master_ip
  1. 启动salt-broker

service salt-broker start chkconfig salt-broker on
  1. 启动完毕后, 需要将minions配置文件中的master配置为salt-broker所在的主机, 同时重启minions服务

  2. 在Master接收minions的key(如果之前已accept, 无需操作本步骤)

在Syndic主机上安装

  1. 关于Syndic主机上的syndic及master服务

service salt-syndic stop service salt-master stop chkconfig salt-syndic off chkconfig salt-master off
  1. 安装salt-broker

pip install salt-broker wget https://raw.githubusercontent.com/pengyao/salt-broker/master/pkg/rpm/salt-broker -O /etc/rc.d/init.d/salt-brokerchmod +x /etc/rc.d/init.d/salt-broker
  1. 配置salt-broker

/etc/salt/broker

master: master_ip
  1. 启动salt-broker

service salt-broker start chkconfig salt-broker
  1. 启动完毕后, 需要将原syndic下的minions配置文件中的master配置为salt-broker所在的主机, 并将/etc/salt/pki/minion/minion_master.pub删掉, 然后重启minion服务

  2. 在Master接收minions的key(如果之前已accept, 无需操作本步骤)

其他注意事项

默认配置中, 使用的是pub(4505)及ret(4506)端口, 如果master端口并非该端口, 需要在/etc/salt/broker配置文件中增加:

ret_port: 'new_ret_port'publish_port: 'new_publish_port'

更改后并重启salt-broker服务.


本文转自 msj0905 51CTO博客,原文链接:http://blog.51cto.com/sky66/1686150


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 最近做项目时遇到一个问题,产品搜索后出来相关的列表,点击相关商品进入它的详情,返回后组件被重新创建,但产品需求是需要保留进入 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • Vue项目之ElementUI(Breadcrumb)动态面包屑效果
    效果面包屑作用面包屑应该是我们在项目中经常使用的一个功能,一般情况下它用来表示我们当前所处的站点位置,也可以帮助我们能够更快的回到上个层级原始方式最笨的 ... [详细]
  • 1网络设备驱动的结构Linux网络设备驱动程序体系结构如下图,从上到下依次划分为4层,依次为网路协议接口层、网络设备接口层,提供实际功能的设备驱动功能层以及网络设备与媒介层。 ... [详细]
  • 1.7.各自独立但地位平等OSI请求政府、电话公 ... [详细]
  • ZendFramework中有3种常用的前端类,分别是Zend_Cache_CoreZend_Cache_Frontend_OutputZend_Cache_Fron ... [详细]
author-avatar
En199010221
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有