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

作者:樊帅宇
时间:2017-12-29


一、架构介绍

在这里插入图片描述

  • 在此架构中,每个租户的业务集群部署一台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 [email protected]:/etc/puppetlabs/puppet/ssl/certs/
 # scp /etc/puppetlabs/puppet/ssl/certs/foreman.sre.com [email protected]:/etc/puppetlabs/puppet/ssl/certs/
 # scp /etc/puppetlabs/puppet/ssl/private_keys/foreman.sre.com [email protected]:/etc/puppetlabs/puppet/ssl/private_keys/
 # scp /etc/puppetlabs/puppet/ssl/crl.pem [email protected]:/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/
云硬盘使用参考文档:https://www.jcloud.com/help/detail/182/isCatalog/0

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)访问https://foreman.sre.com
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

在这里插入图片描述
至此,故障已恢复正常!

发布了82 篇原创文章 · 获赞 0 · 访问量 2559

猜你喜欢

转载自blog.csdn.net/zhinengyunwei/article/details/104049150
今日推荐