实验目的:
        由于现有的环境中,puppetmaster是单节点,客户端更新时出现了更新失败和时间较长等现象。
考虑将puppetmaster做成集群的模式,解决大量客户端更新延时和单节点故障问题。主要解决证书问题

环境:

puppetmaster两台:
                Puppetmaster1:10.9.24.168
                Puppetmaster2:10.9.24.184
Nginx:
                Nginx:                    10.9.24.183
Client:        
                Client:                     10.9.3.153
yum install puppet-server rubygem-mongrel

配置:
在/etc/hosts写好对应关系

Puppetmaster1:
/etc/sysconfig/puppetmaster(启用mongrel模式)
PUPPETMASTER_PORTS=( 18140 18141 18142 18143 )
PUPPETMASTER_EXTRA_OPTS="—servertype=mongrel  --ssl_client_header=HTTP_X_SSL_SUBJECT"

/etc/puppet/puppet.conf:
[main]
    bindaddress = 0.0.0.0
  (加上这句让puppetmaster监听地址为0.0.0.0,否则只以localhost监听)

netstat -antp
tcp        0      0 0.0.0.0:18140               0.0.0.0:*                   LISTEN      22822/ruby          
tcp        0      0 0.0.0.0:18141               0.0.0.0:*                   LISTEN      22872/ruby          
tcp        0      0 0.0.0.0:18142               0.0.0.0:*                   LISTEN      22922/ruby          
tcp        0      0 0.0.0.0:18143               0.0.0.0:*                   LISTEN      22972/ruby

/etc/exports:
/var/lib/puppet                10.9.24.184(rw,sync)
   (用nfs共享的模式,同步证书)

/etc/puppet//fileserver.conf:
[files]
  path /var/lib/puppet/files
        allow *

Puppetmaster2:
配置文件参照puppetmaster1
service puppetmaster start,启动puppetmaster
在/etc/fstab中加入如下:
10.9.24.168:/var/lib/puppet        /var/lib/puppet        nfs        defaults        0 0
mount -a     //挂载/var/lib/puppet

Nginx:
将puppetmaster1/var/lib/puppet下的文件拷贝到本机/var/lib/puppet下(用nfs挂载也可以)
cat /etc/nginx/nginx.conf:
user             daemon        daemon; 
worker_processes  2;
error_log  /var/log/nginx/error.log  notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}

http {
    default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
    tcp_nopush     on;
    tcp_nodelay                on;
    large_client_header_buffers     16      4k;
    proxy_buffers                   128     4k;
    keepalive_timeout  65;
   
    ssl on;
        upstream puppet-production {
                server 10.9.24.168:18140;
                server 10.9.24.168:18141;
                server 10.9.24.168:18142;
                server 10.9.24.168:18143;
                server 10.9.24.184:18140;
                server 10.9.24.184:18141;
                server 10.9.24.184:18142;
                server 10.9.24.184:18143;
        } 
    //nginx分发请求

server {
        listen       8140;
        ssl         on;
        ssl_session_timeout        5m;
        ssl_certificate                /var/lib/puppet/ssl/certs/xx.pem;
        ssl_certificate_key        /var/lib/puppet/ssl/private_keys/xx.pem;
        ssl_client_certificate        /var/lib/puppet/ssl/ca/ca_crt.pem;
        ssl_ciphers             SSLv2:-LOW:-EXPORT:RC4+RSA;
        ssl_verify_client        optional;
        ssl_crl                        /var/lib/puppet/ssl/ca/ca_crl.pem;    
  (证书位置,先复制到本地)
        access_log                  /var/log/host.access.log  main;

location / {
            proxy_pass          http://puppet-production;
            proxy_redirect      off;
            proxy_set_header    Host             $host;
            proxy_set_header    X-Real-IP        $remote_addr;
            proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header    X-Client-Verify  $ssl_client_verify;
            proxy_set_header    X-Client-DN      $ssl_client_s_dn;
            proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
            proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
            proxy_read_timeout  65;
           }
     }
}

现在puppetmaster是用同步方式实现的,可以考虑用证书链的方式实现

Client:
我故意在puppetmaster1和puppetmaster2配置不同的文件:
puppetmaster1
cat /etc/puppet/manifests/main.pp:
node default {
          file { "/tmp/temp1.txt": content => "Hello,from puppetmaster1\n"; }
        file { "/tmp/test.file":
                path => "/tmp/test.file",
                source => "puppet://puppet/files/test.file",
                owner => "root",
                group => "root",
                mode => 644,
        }
   }

puppetmaster2

node default {
          file { "/tmp/temp1.txt": content => "Hello,from puppetmaster2\n"; }
        file { "/tmp/test.file":
                path => "/tmp/test.file",
                source => "puppet://puppet/files/test.file",
                owner => "root",
                group => "root",
                mode => 644,
        }
   }

Client:
puppetd -t:
info: Caching catalog for taffy
info: Applying configuration version '1301714542'
notice: /Stage[main]//Node[default]/File[/tmp/test.file]/ensure: content changed '{md5}52688f6d76cbeccd058bdf6f412b4da0' to '{md5}52688f6d76cbeccd058bdf6f412b4da0'
notice: /Stage[main]//Node[default]/File[/tmp/temp1.txt]/checksum: defined 'checksum' as '{md5}1cf6c62d2c8ddde94e97aa9140861b0e'
notice: /Stage[main]//Node[default]/File[/tmp/temp1.txt]/content: defined content as 'unknown checksum'
notice: Finished catalog run in 0.13 seconds

cat /tmp/temp1.txt:
Hello,from puppetmaster1   (从puppetmaster1取过来的)

puppetd -t: (再推一次)
info: Caching catalog for taffy
info: Applying configuration version '1301505457'
--- /tmp/temp1.txt        2011-04-02 11:20:38.509009000 +0800
+++ /tmp/puppet-diffing20110402-1217-jqru9o-0        2011-04-02 11:30:10.258009000 +0800
@@ -1 +1 @@
-Hello,from puppetmaster1
+Hello,from puppetmaster2         (过来了,从puppetmaster2取出的)
info: /Stage[main]//Node[default]/File[/tmp/temp1.txt]: Filebucketed /tmp/temp1.txt to puppet with sum cab0e6a2c555b3f96f10ed2972708d34
notice: /Stage[main]//Node[default]/File[/tmp/temp1.txt]/content: content changed '{md5}cab0e6a2c555b3f96f10ed2972708d34' to 'unknown checksum'
notice: Finished catalog run in 0.11 seconds

puppet集群的更多相关文章

  1. 多puppetmaster,多ca,keepalived+haproxy(nginx)puppet集群搭建

    多puppetmaster,多ca,keepalived+haproxy(nginx)puppet集群搭建 一.服务器详情 192.168.122.111 pm01.jq.com pm01 #(pup ...

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

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  3. 利用 Puppet 实现自动化管理配置 Linux 计算机集群

    随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集群的数量也会线性增加.对于数据中心的运 ...

  4. 扩展Puppet – 建立Puppet CA集群

    扩展Puppet – 建立Puppet CA集群  (1 votes, average: 5.00 out of 5) 588 views 2012 年 3 月 4 日Puppet.运维ca.mast ...

  5. 集群工具ansible使用方法

    ansible简介 ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.与pupp ...

  6. Linux 集群

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  7. redis集群讨论

    一.生产应用场景 二.存储架构演变 三.应用最佳实践 四.运维经验总结 第1.2节:介绍redis cluster在唯品会的生产应用场景,以及存储架构的演变.第3节:redis cluster的稳定性 ...

  8. 使用Chef管理windows集群

    但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰.试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半 ...

  9. Hadoop - Ambari集群管理剖析

    1.Overview Ambari是Apache推出的一个集中管理Hadoop的集群的一个平台,可以快速帮助搭建Hadoop及相关以来组件的平台,管理集群方便.这篇博客记录Ambari的相关问题和注意 ...

随机推荐

  1. Emgu 学习之HelloWorld

    安装和配置 系统Win10,VS2013,下载Emgu安装包libemgucv-windesktop-3.4.3.3016 安装到了E:\OpenCV\emgucv-windesktop 3.4.3. ...

  2. vue-teach

    编译器的工作过程 http://www.ruanyifeng.com/blog/2014/11/compiler.html DNS 原理入门 http://www.ruanyifeng.com/blo ...

  3. C++调用windowsAPI实现目录zip压缩

    TCHAR zipname[] = "C:\\bcel"; TCHAR zipfile [FILENAME_MAX]; sprintf(zipfile, "%s.zip& ...

  4. Django2.2 会话技术cookie session token的区别以及实例介绍

    一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...

  5. 多标签分类(multi-label classification)综述

    意义 网络新闻往往含有丰富的语义,一篇文章既可以属于“经济”也可以属于“文化”.给网络新闻打多标签可以更好地反应文章的真实意义,方便日后的分类和使用. 难点 (1)类标数量不确定,有些样本可能只有一个 ...

  6. luoguP3390(矩阵快速幂模板题)

    链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...

  7. PHP中的data()函数

    date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考. 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母 ...

  8. SqlServer中插入数据后如何得到主键ID

    使用@@IDENTITY 例如:insert into student(name,age) values('fanqi',23) select @@identity 使用 OUTPUT inserte ...

  9. linux连接Windows系统之项目连接

    在桥接模式下 在linux内需要设置 防火墙关闭 在Windows中连接 linux的ip连接 ***项目 在linux中命令行输入setup-->防火墙配置-->空格-->确定-- ...

  10. idea 新建maven项目时,避免每次都需要指定自己的maven目录

    01 .File->Other Settings -> Settings for New Project 02. 将Maven home directory目录修改成我们自己安装Maven ...