Puppetmaster高可用和可扩展的方案设计
Puppet是当前devops中常用于管理系统配置和应用部署,多数会使用其C/S架构的方式来进行部署,其中puppetmaster是集群中配置管理的核心节点。在实际的生产环境中,如果因为master节点性能不够或者发生意外宕机,可能会影响到实际业务,因此维护一个高可用和可扩展的puppetmaster池子是一个首要任务。
这里我使用了一种常规的方案:前端使用apache/nginx做负载均衡,使用packmaker/keepalived来做健康检查和故障切换,来做HA,后端起多个puppetmaster实例做横向扩展,来提高处理能力。
方案验证
这里,我将在在每台Master Node上起两个puppetmaster实例,前端使用Apache作负载均衡,keepalived做健康检查。唯一的难点是证书同步问题,在部署中将把我们将证书设成自动认证,只接受fqdn是*.clustername.ustack.com的机器,就不需同步证书了。
| IP | 主机名 | 角色 | vip |
|---|---|---|---|
| 192.168.1.53 | ha-puppet1.ustack.com | puppet master | 192.168.1.103 |
| 192.168.1.54 | ha-puppet2.ustack.com | puppet master | 192.168.1.104 |
配置细节
客户端 配置文件
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync=true [agent]
server = ha-puppet.ustack.com
report = true
pluginsync = true
listen = true
runinterval = 300
Master node的配置选项
[master]
autosign = $confdir/autosign.conf { mode = 664 }
autosign.conf
*.ustack.com
服务器端配置信息
192.168.2.53
loadbalancer配置
apache的proxy监听在8140端口,后面可以配置多个puppetmaster进程
<Proxy balancer://puppetmaster>
BalancerMember http://127.0.0.1:18140
BalancerMember http://127.0.0.1:18141
</Proxy> Listen 8140
<VirtualHost *:8140> SSLEngine on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP SSLCertificateFile /var/lib/puppet/ssl/certs/ha-puppet.ustack.com.pem
SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/ha-puppet.ustack.com.pem
SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
# CRL checking should be enabled; if you have problems with Apache complaining about the CRL, disable the next line
SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +ExportCertData # The following client headers allow the same configuration to work with Pound.
RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
RequestHeader unset X-Forwarded-For # you probably want to tune these settings
PassengerHighPerformance on
PassengerMaxPoolSize 12
PassengerPoolIdleTime 1500
# PassengerMaxRequests 1000
PassengerStatThrottleRate 120 RackAutoDetect On
DocumentRoot /etc/puppet/rack/public/
<Directory /etc/puppet/rack>
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
<Location />
SetHandler balancer-manager
Order allow,deny
Allow from all
</Location> ProxyPass / balancer://puppetmaster/
ProxyPassReverse / balancer://puppetmaster/
ProxyPreserveHost On CustomLog /var/log/httpd/balance-8140-access.log combined
ErrorLog /var/log/httpd/balance-8140-error.log
CustomLog /var/log/httpd/balancer_ssl_requests.log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
第一个puppetmaster的vhost配置文件,puppetmaster实例的数量可以水平扩展:
Listen 18140
<VirtualHost *:18140> SSLEngine off # The following client headers allow the same configuration to work with Pound.
SetEnvIf set X-Client-Verify "(.*)" SSL_CLIENT_VERIFY=$1
SetEnvIf set X-Client-DN "(.*)" SSL_CLIENT_S_DN=$1 # you probably want to tune these settings
PassengerHighPerformance on
PassengerMaxPoolSize 12
PassengerPoolIdleTime 1500
# PassengerMaxRequests 1000
PassengerStatThrottleRate 120 RackAutoDetect On
DocumentRoot /etc/puppet/rack/18140/public/
<Directory /etc/puppet/rack/18140/>
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
CustomLog /var/log/httpd/puppetmaster-18140-access.log combined
ErrorLog /var/log/httpd/puppetmaster-18140-error.log
</VirtualHost>
rack配置文件
拷贝rack配置文件给第一个puppetmaster:
rsync -avxH /etc/puppet/rack/{,18140}/
Keepalived配置文件
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc }
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server localhost
smtp_connect_timeout 30
router_id route-45
} vrrp_script chk_http_port {
script "/usr/bin/killall -0 httpd"
interval 2
weight 2
} vrrp_instance 45 {
virtual_router_id 45 priority 100
state BACKUP interface eth0 virtual_ipaddress {
192.168.2.103
} track_script {
chk_http_port
}
} vrrp_instance 46 {
virtual_router_id 46 priority 101
state MASTER interface eth0 virtual_ipaddress {
192.168.2.104
} track_script {
chk_http_port
}
}
192.168.2.54
apache的配置文件和53相同,唯一区别就是keepalived的配置文件上的IP地址互为热备,在此就不再赘述。
验证
在dnspod上绑定192.168.1.103/4到ha-puppet.ustack.com。
并在ha-puppet1上使用以下manifests文件:
node /default/ {
notify {'Hello,I am Master 1':}
}
node 'nginx.novalocal' inherits default{}
在ha-puppet2上使用以下manifests文件:
node /default/ {
notify {'Hello,I am Master 2':}
}
node 'nginx.novalocal' inherits default{}
测试结果,前两次是:
notice: Hello,I am Master 2
notice: /Stage[main]//Node[default]/Notify[Hello,I am Master 2]/message: defined 'message' as 'Hello,I am Master 2'
notice: Finished catalog run in 0.12 seconds
随后出现:
notice: Hello,I am Master 1
notice: /Stage[main]//Node[default]/Notify[Hello,I am Master 1]/message: defined 'message' as 'Hello,I am Master 1'
notice: Finished catalog run in 0.10 seconds
结论
以上方案验证通过,手动部署很简单,难点在于把它们设计成puppet module来进行部署时,需要考虑到所有的服务器需要使用同一个证书,因此需要在启动第一台puppetmaster的时候,根据设定的fqdn生成证书,然后修改hostname,同时把证书和配置文件同步到其他服务器上去。
Puppetmaster高可用和可扩展的方案设计的更多相关文章
- 【云原生小课堂】高性能、高可用、可扩展的MySQL集群如何组建?
本期[云原生小课堂]将带你入门PXC--公认的MySQL集群优选方案.
- windows NLB+ARR实现Web负载均衡高可用/可伸缩
基于IIS的ARR负载均衡 基于NLB负载均衡 这两篇分别分ARR 和 NLB基本配置,下面我们讲讲,如何组合使用,搭配成高可用/可伸缩集群. 什么是高可用,可伸缩 ? 高可用:是指系统经过专门设计减 ...
- Linux-实现双主模型的nginx的高可用
实现双主模型的ngnix高可用(一) 准备:主机7台 client: 172.18.x.x 调度器:keepalived+nginx 带172.18.x.x/16 网卡 192.168.234.27 ...
- 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群
为了实现服务的高可用和可扩展,在网上找了几天的资料,现在终于配置完毕,现将心得公布处理,希望对和我一样刚入门的菜鸟能有一些帮助. 一.理论知识(原理) 我们不仅要知其然,而且要知其所以然,所以先给大家 ...
- Linux集群介绍、keepalived介绍及配置高可用集群
7月3日任务 18.1 集群介绍18.2 keepalived介绍18.3/18.4/18.5 用keepalived配置高可用集群扩展heartbeat和keepalived比较http://blo ...
- 一套高可用、易伸缩、高并发的IM群聊架构方案设计实践
本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io.应作者要求,如需转载,请联系作者获得授权. 一.引言 ...
- Redis系列(四)-低成本高可用方案设计
关于Redis高可用方案,看到较多的是keepalived.zookeeper方案. keepalived是主备模式,意味着总有一台浪费着.zookeeper工作量成本偏高. 本文主要介绍下使用官方s ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 11、可扩展MySQL+12、高可用
11.1.扩展MySQL 静态分片:根据key取hash,然后取模: 动态分片:用一个表来维护key与分片id的关系: 11.2.负载均衡 12. 12.2导致宕机得原因: 35%环境+35%性能+2 ...
随机推荐
- [Node.js]操作redis
摘要 在实际开发中,免不了要操作mysql,mongodb,redis等数据存储服务器.这里先简单介绍如何操作redis. 一个例子 关于redis服务端的安装这里不再介绍,重点不在这里.感兴趣的可以 ...
- C#中使用throw和throw ex抛出异常的区别
通常,我们使用try/catch/finally语句块来捕获异常,就像在这里说的.在抛出异常的时候,使用throw和throw ex有什么区别呢? 假设,按如下的方式调用几个方法: →在Main方法中 ...
- WordPress主题开发: 制作文章页面single.php
可以调用的文章内容: 调用文章标题:<?php the_title(); ?> 调用文章内容:<?php the_content(); ?> 调用文章摘要:<?php t ...
- nginx网站攻击防护
1.上上个月架构全部迁移上云以后,总的来说比较稳定,业务量也上来,可爱的坏人也来了,7X24小时不停恶意攻击我的网站,第一次收到报警是网站流入流量1分钟以内连续3次超过1000000bps,换算下1M ...
- .NET:注意 Primitive 这个小坑
背景 有个需求,需要递归遍历类型的所有属性(属性的属性),然后对不同的类型做不同的处理,或者只是将类型分为三类:Primitive.Complex 和 Collection.因为 MS 的 Type ...
- java对象的六大原则
对象的六大原则: 1.单一职责原则(Single Responsibility Principle SRP) 2.开闭原则(Open Close Principle OCP) 3.里氏替换原则(Li ...
- Linux为sh脚本文件添加执行权限
chmod是权限管理命令change the permissions mode of a file的缩写..u代表所有者,x代表执行权限. + 表示增加权限.chmod u+x file.sh 就表示 ...
- 《iOS 7 应用开发实战详解》
<iOS 7 应用开发实战详解> 基本信息 作者: 朱元波 管蕾 出版社:人民邮电出版社 ISBN:9787115343697 上架时间:2014-4-25 出版日期:2014 年5 ...
- Restful API 的设计规范(转)
1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类.URI规范 不用大写; 用中杠-而不用下杠_; 参数列表要encode; URI中的名词表示资源集合,使用复数形式; 资源集合与 ...
- IDEA远程debug的使用
1.打开配置页面 2.添加远程调试配置 3.进行参数配置 不同的jdk版本,配置的参数是不一样的! 其中Host为远程服务器的地址,Port为远程debug的端口,注意要与前面设置的address保持 ...