基于puppet分布式集群管理公有云多租户的架构浅谈
基于puppet分布式集群管理公有云多租户的架构浅谈
一、架构介绍

在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥有的云主机上部署puppet-agent,定时向puppet-master进行汇报从而执行相应任务。foreman单独部署,接收每个业务集群中puppet-master收集到的puppet-agent服务器所报告的信息。foreman收集到的数据存至MySQL数据库中,并进行前端展示。其中mysql数据库使用公有云的mysql数据库资源。
对于每个租户的业务集群中puppet-master的容灾,可以通过购买云硬盘来实现。将云硬盘挂载至puppet-master上,将puppet-master上配置和证书相关文件放在云硬盘上,一旦puppet-master服务器故障,只要重新部署一台puppet-master服务器,将云硬盘挂载至相应目录,即可恢复服务
对于foreman的容灾,由于foreman的证书是由puppet-master生成的,因此当foreman发生故障时,只要创建一台云主机,将foreman的证书从puppet-master上放置到foreman相应目录中,重新部署foreman服务器并将DNS解析至当前foreman服务器即可解决故障
二、效果展示
1、多租户代理

2、puppet-master和puppet-agent运行情况展示

三、部署步骤
资源分配如下:
| 服务器名 | 服务器对应域名(主机名) | 服务器对应IP |
|---|---|---|
| foreman服务器 | foreman.sre.com | 114.67.1.2 |
| puppet-master-业务集群1服务器 | puppetmasterarea1.sre.com | 114.67.2.2 |
| puppet-master-业务集群2服务器 | puppetmasterarea2.sre.com | 114.67.3.2 |
| puppet-master-业务集群3服务器 | puppetmasterarea3.sre.com | 114.67.4.2 |
1、设置puppetmaster主服务器的yum 源
1)安装puppet5.x的yum源
#yum -y install https://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm*
2)安装EPEL
# yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y install https://yum.theforeman.org/releases/1.16/el7/x86_64/foreman-release.rpm
3)安装foreman-install
# yum -y install foreman-installer
2、停机制作镜像
停止上一步部署安装好foreman-install的puppetmaster主服务器,制作镜像(这里的镜像名为puppet_cluster)
这样做的原因:foreman-install 安装的时候默认将自己作为ca从而进行认证,在安装过程中会生成认证相关的一堆文件。利用公有云平台的优势,在安装好foreman-install之后(此时ca相关证书文件已经生成),将此时的机器做一个镜像,可以保证以后使用此镜像安装的虚拟机都能够生成相同的证书,解决了证书不统一的问题
3、安装foreman
1)用centos7.3的镜像创建一台云主机
2)在puppet-master-业务集群1服务器上生成foreman对应的证书,并将证书放置到foreman服务器上
# /opt/puppetlabs/bin/puppet cert generate foreman.sre.com
# scp /etc/puppetlabs/puppet/ssl/certs/ca.pem root@114.67.1.2:/etc/puppetlabs/puppet/ssl/certs/
# scp /etc/puppetlabs/puppet/ssl/certs/foreman.sre.com root@114.67.1.2:/etc/puppetlabs/puppet/ssl/certs/
# scp /etc/puppetlabs/puppet/ssl/private_keys/foreman.sre.com root@114.67.1.2:/etc/puppetlabs/puppet/ssl/private_keys/
# scp /etc/puppetlabs/puppet/ssl/crl.pem root@114.67.1.2:/etc/puppetlabs/puppet/ssl/
3)在foreman服务器上安装yum源及foreman-install
# yum -y install https://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm
# yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y install https://yum.theforeman.org/releases/1.16/el7/x86_64/foreman-release.rp
# yum -y install foreman-installer
4)安装foreman
由于在foreman安装的时候没有安装puppet-master相关模块,为解决依赖需要先创建一个puppet组
# groupadd puppet
下面是安装命令:
foreman-installer \
--foreman-db-type=mysql \
--foreman-db-manage=false \
--foreman-db-host=数据库地址 \
--foreman-db-database=数据库名 \
--foreman-db-username= 数据库用户名\
--foreman-db-password= 数据库密码\
--no-enable-foreman-proxy \
--no-enable-puppet \
--puppet-server-ca=false \
--foreman-proxy-puppetca=false \
--foreman-proxy-oauth-consumer-key=/etc/puppetlabs/puppet/ssl/ \
--foreman-proxy-oauth-consumer-secret=/etc/puppetlabs/puppet/ssl/
5)登录验证
此时foreman已经安装成功,这时就可以通过 https://foreman.sre.com 登录到foreman的web页面进行查看。用户名密码在成功安装之后打印在页面上
4、安装配置puppet-master服务器
这里以puppet-master-业务集群1服务器为例
1)为puppet-master挂载额外磁盘(这里在公有云上购买了一块100G的硬盘,在公有云平台上操作挂载至此主机上)
a)备份原有目录并创建挂载点目录
# mv /etc/puppetlabs /etc/puppetlabs.bak
# mkdir /etc/puppetlabs
b)分区、格式化并挂载
# fdisk -l
# fdisk /dev/vdb (这里只创建了一个主分区,创建好之后保存)
# mkfs -t ext4 /dev/vdb1
# mount -t ext4 /dev/vdb1 /etc/puppetlabs
c)设置开机自动挂载
# blkid /dev/vdb1(获得此分区的uuid)
# vim /etc/fstab
d)将原有puppet配置文件放置到云硬盘上
# cp /etc/puppetlabs.bak/* /etc/puppetlabs/
2)使用foreman-install安装配置puppet-master:
foreman-installer \
--no-enable-foreman \
--no-enable-foreman-cli \
--no-enable-foreman-plugin-bootdisk \
--no-enable-foreman-plugin-setup \
--enable-puppet \
--puppet-server-foreman-url=https://foreman.sre.com \
--enable-foreman-proxy \
--foreman-proxy-tftp=false \
--foreman-proxy-foreman-base-url=https://foreman.sre.com \
--foreman-proxy-trusted-hosts=foreman.sre.com
在此安装中未安装foreman相关组件,安装了puppet和foreman-proxy相关组件
5、安装配置puppet客户端
1)安装最新的puppet的yum源及puppet-agent,并将puppet和防火墙设置为开机自启动
# yum -y install http://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm
# yum -y install puppet-agent
# systemctl enable puppet.service
# systemctl start NetworkManager
# systemctl enable NetworkManager
2)编辑配置文件,添加如下内容
# /etc/puppetlabs/puppet/puppet.conf
runinterval = 1800
listen = true
report = true
server = puppetmasterarea1.sre.com
3)请求证书并在puppet-master授权
puppet-agent 端执行如下命令:
# puppet agent -t
puppet-master端执行如下命令:
# puppet cert sign --all
4)启动puppet服务
# systemctl start puppet.service
6、将puppet-master加入到foreman的代理中去
1)访问
2)点击:架构–>智能代理

3)点击Create Smart Proxy,填写名称和foreman-proxy的地址,并提交
4)此后,puppet-agent执行后向puppet-master汇报的数据就可以通过foreman展示出来了,结果如下:
到此为止,foreman+mysql+puppet分业务集群架构部署已经完成,可以正常使用!

四、故障切换
1、foreman服务器故障
当foreman服务器发生故障时,只要重新创建一台虚拟机,按照步骤二中foreman部署相关步骤操作重新部署一次,然后将foreman.sre.com的域名解析到当前foreman服务器的ip,就可以正常使用了
2、puppet-master故障
当puppet-master发生故障时,我们首先需要将故障的puppet-master服务器所挂载的云硬盘通过在公有云平台上操作卸载掉,然后执行以下操作:
1)使用在步骤二中部署时停机制作的镜像puppet_master新建一台云主机
2)将故障puppet-master的DNS解析更改至当前新建的云主机ip
3)使用foreman-install安装配置puppet-master
foreman-installer \
--no-enable-foreman \
--no-enable-foreman-cli \
--no-enable-foreman-plugin-bootdisk \
--no-enable-foreman-plugin-setup \
--enable-puppet \
--puppet-server-foreman-url=https://foreman.sre.name \
--enable-foreman-proxy \
--foreman-proxy-tftp=false \
--foreman-proxy-foreman-base-url=https://foreman.sre.name \
--foreman-proxy-trusted-hosts=foreman.sre.name
4)为puppet-master挂载故障puppet-master所使用过的云硬盘
a)备份原有目录并创建挂载点目录
# mv /etc/puppetlabs /etc/puppetlabs.bak
# mkdir /etc/puppetlabs
b)手工挂载云硬盘
# mount -t ext4 /dev/vdb1 /etc/puppetlabs
c)设置开机自动挂载
# blkid /dev/vdb1(获得此分区的uuid)
# vim /etc/fstab

至此,故障已恢复正常!
基于puppet分布式集群管理公有云多租户的架构浅谈的更多相关文章
- 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建
1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...
- 基于Ceph分布式集群实现docker跨主机共享数据卷
上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...
- Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践
参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分 ...
- 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
作者:大数据女神-诺蓝(微信公号:dashujunvshen).本文是36大数据专稿,转载必须标明来源36大数据. 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要 ...
- zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)
安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网http://hadoop.apache.org/zookeeper/ 来获取,Zookee ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- Dubbo+zookeeper构建高可用分布式集群(二)-集群部署
在Dubbo+zookeeper构建高可用分布式集群(一)-单机部署中我们讲了如何单机部署.但没有将如何配置微服务.下面分别介绍单机与集群微服务如何配置注册中心. Zookeeper单机配置:方式一. ...
- CentOS6安装各种大数据软件 第六章:HBase分布式集群的配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- 新闻实时分析系统-HBase分布式集群部署与设计
HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtable 的开源实现,与 ...
随机推荐
- PHP die与exit的区别
最近听见有人说die和exit区别,bula~bula.决心一探究竟. 翻了翻PHP 5.6的源码(源码的位置为zend目录下zend_language_scanner.l大约是1014~1020行) ...
- 分布式集群下的Session存储方式窥探
传统的应用服务器,自身实现的session管理是大多是基于单机的,对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同的服务器之间跳转.那么,如何保持服务器之前的se ...
- appium+Python 启动app(三)登录
我们根据前面的知识点,用uiautomatorviewer工具来获取我们当前的元素 (注:uiautomatorviewer 是 android sdk 自带的) 知识点:appium的webdriv ...
- js的call和apply拾遗
一.产生背景 1. JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念 2.正因为上下文的不同所以call 和 apply 都是为了改变某个函数运行 ...
- EntityFramework Core 2.0自定义标量函数两种方式
前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...
- 用batch调用DB2 CLPPlus执行多个SQL文
不啰嗦直接上技能. 大概三部分组成: 1.bat文件.(run.bat) 2.辅助SQL文.(AllRun.sql) 3.要执行的SQL文.(S1.sql,S2.sql,S3.sql) +++++++ ...
- String、StringBuffer、与StringBuilder的区别
转载自博客园,原文链接:String.StringBuffer.与StringBuilder的区别 相信大家都知道StringBuffer.StringBuilder,但是这两个的用法都差不多,到底有 ...
- SpringBoot SpringSecurity4整合,灵活权限配置,弃用注解方式.
SpringSecurity 可以使用注解对方法进行细颗粒权限控制,但是很不灵活,必须在编码期间,就已经写死权限 其实关于SpringSecurity,大部分类都不需要重写,需要的只是妥善的配置. 每 ...
- 转 Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- Redis实现数据库读写分离
Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作 ...