自动化运维工具Puppet

    开发puppet模块,nginx负载均衡并反代动态请求至httpd,httpd用ajp连接器将反代请求至tomcat,并部署tomcat-session-memcached

架构图为

自动化运维工具Puppet

在master主机上开发的模块为:

1、chrony模块;

├── chrony
│   ├── files
│   │   └── chrony.conf
│   ├── lib
│   ├── manifests
│   │   └── init.pp
│   ├── spec
│   ├── templates
│   └── test

vim init.pp

class chrony {
                    package{‘chrony’:
                     ensure  => latest,
        } ->

        file{‘chrony.conf’:
                    path    => ‘/etc/chrony.conf’,
                    source  => ‘puppet:///modules/chrony/chrony.conf’,
        } ~>

        service{‘chronyd’:
                    ensure  => running,
                    enable  => true,
            }
    }
vim chrony/files/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst

#在这里输入我们要根据那个主机同步时间
server 172.16.252.187 iburst
# Ignore stratum in source selection.
stratumweight 0

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Enable kernel RTC synchronization.
rtcsync

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3

# Allow NTP client access from local network.
#allow 192.168/16

# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
bindcmdaddress ::1

# Serve time even if not synchronized to any NTP server.
#local stratum 10

keyfile /etc/chrony.keys

# Specify the key used as password for chronyc.
commandkey 1

# Generate command key if missing.
generatecommandkey

# Disable logging of client accesses.
noclientlog

# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
logchange 0.5

logdir /var/log/chrony
#log measurements statistics tracking

2、nginx模块:

── nginx
│   ├── files
│   ├── lib
│   ├── manifests
│   │   └── init.pp
│   ├── spec
│   ├── templates
│   │   └── nginx-proxy.conf.erb
│   └── tests
init.pp;

class nginx {
        package{‘nginx’:
                ensure => latest,
                } ->
        file{‘nginx-proxy.conf’:
                path => ‘/etc/nginx/nginx.conf’,
                content => template(‘/etc/puppet/modules/nginx/templates/nginx-proxy.conf.erb’),
           } ~>
        service{‘nginx’:
                ensure => running,
                enable => true,
                restart => ‘systemctl restart nginx.service’,
                }

}
 vim nginx/templates/nginx-proxy.conf.erb
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes <%= @processorcount %>;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    upstream tcs {
        server tomcat0.zcylinux.io:80;
        server tomcat1.zcylinux.io:80;
}
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
        location ~* \.jsp$ {
                proxy_pass http://tcs;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}

3、httpd模块:

├── httpd
│   ├── files
│   ├── lib
│   ├── manifests
│   │   └── init.pp
│   ├── spec
│   ├── templates
│   │   └── zcylinux-ajp.conf.erb
│   └── tests

vim init.pp


class httpd {
        package{‘httpd’:
                ensure => latest,
             } ->
        file{‘httpd-ajp.conf’:
                path => ‘/etc/httpd/conf.d/zcylinux.conf’,
                content => template(‘/etc/puppet/modules/httpd/templates/zcylinux-ajp.conf.erb’),
           } ~>
        service{‘httpd’:
                ensure => running,
                enable => true,
                restart => ‘systemctl restart httpd.service’,
          }
}
vim httpd/templates/zcylinux-ajp.conf.erb
<VirtualHost *:80>
        ServerName <%= @fqdn %>
        ProxyRequests off
        ProxyPreserveHost on
        ProxyVia on
         <Proxy *>
                Require all granted
         </Proxy>
        ProxyPass / ajp://<%= @ipaddress %>:8009/
        ProxyPassReverse / ajp://<%= @ipaddress %>:8009/
         <Location />
                Require all granted
         </Location>
</VirtualHost>

4、jdk:

── jdk
│   ├── files
│   │   └── java.sh
│   ├── lib
│   ├── manifests
│   │   └── init.pp
│   ├── spec
│   ├── templates
│   └── tests

init.pp:

class jdk {
        package{‘java-1.8.0-openjdk-devel’:
                ensure => latest,
           }
        file{‘java.sh’:
                ensure => file,
                path => ‘/etc/profile.d/java.sh’,
                source => ‘puppet:///modules/jdk/java.sh’,
                mode => 0766,
          }
}
   vim jdk/files/java.sh

   export JAVA_HOME=/usr

5、tomcat
    ├── files
    │   ├── index-testA.jsp
    │   ├── index-testB.jsp
    │   ├── javolution-5.4.3.1.jar
    │   ├── memcached-session-manager-2.1.1.jar
    │   ├── memcached-session-manager-tc7-2.1.1.jar
    │   ├── msm-javolution-serializer-2.1.1.jar
    │   ├── server.xml
    │   ├── spymemcached-2.11.1.jar
    │   └── tomcat-users.xml
    ├── lib
    ├── manifests
    │   └── init.pp
    ├── spec
    ├── templates
    └── tests
init.pp

class tomcat {
        if $fqdn =~ /(?i-mx:tomcat0.zcylinux.io)/ {
            $index=’index-testA.jsp’
        } else {
            $index=’index-testB.jsp’
        }

        package{[‘tomcat’,’tomcat-webapps’,’tomcat-admin-webapps’,’tomcat-docs-webapp’]:
                ensure => latest,
               } ->

        file{‘server.xml’:
                path => ‘/etc/tomcat/server.xml’,
                source => ‘puppet:///modules/tomcat/server.xml’,
                owner => ‘root’,
                group => ‘tomcat’,
           } ->
        exec{‘mkdir’:
                command => ‘mkdir -p /var/lib/tomcat/webapps/test/{classes,lib,WEB-INF,META-INF}’,
                path => ‘/bin:/sbin:/usr/bin:/usr/sbin’,
                creates => ‘/var/lib/tomcat/webapps/test’,
          } ->
        file{“$index”:
                path => ‘/var/lib/tomcat/webapps/test/index.jsp’,
                source => “puppet:///modules/tomcat/$index”,
          } ->
        exec{‘chown’:
                command => ‘chown -R tomcat:tomcat /var/lib/tomcat/webapps/test/’,
                path => ‘/bin:/sbin:/usr/bin:/usr/sbin’,
          } ->
        file{‘javolution-5.4.3.1.jar’:
                path => ‘/usr/share/tomcat/lib/javolution-5.4.3.1.jar’,
                source => ‘puppet:///modules/tomcat/javolution-5.4.3.1.jar’,
        }
        file{‘memcached-session-manager-tc7-2.1.1.jar’:
                path => ‘/usr/share/tomcat/lib/memcached-session-manager-tc7-2.1.1.jar’,
                source => ‘puppet:///modules/tomcat/memcached-session-manager-tc7-2.1.1.jar’,
        }
        file{‘spymemcached-2.11.1.jar’:
                path => ‘/usr/share/tomcat/lib/spymemcached-2.11.1.jar’,
                source => ‘puppet:///modules/tomcat/spymemcached-2.11.1.jar’,
        }
        file{‘memcached-session-manager-2.1.1.jar’:
                path => ‘/usr/share/tomcat/lib/memcached-session-manager-2.1.1.jar’,
                source => ‘puppet:///modules/tomcat/memcached-session-manager-2.1.1.jar’,
        }
        file{‘msm-javolution-serializer-2.1.1.jar’:
                path => ‘/usr/share/tomcat/lib/msm-javolution-serializer-2.1.1.jar’,
                source => ‘puppet:///modules/tomcat/msm-javolution-serializer-2.1.1.jar’,
        }
        service{‘tomcat’:
                ensure => running,
                enable => true,
                restart => ‘systemctl restart tomcat.service’,
                subscribe => File[‘server.xml’],
         }

}
自动化运维工具Puppet

vim server.xml

    加入一个contest,使得能够将session保存在memcached中

自动化运维工具Puppet


编辑测试页面

vim index-testA.jsp:

<%@ page language=”java” %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color=”red”>TomcatA.magedu.com</font></h1>
    <table align=”centre” border=”1″>
      <tr>
        <td>Session ID</td>
    <% session.setAttribute(“magedu.com”,”magedu.com”); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
~        
vim index-testB.jsp:

<%@ page language=”java” %>
<html>
  <head><title>TomcatB</title></head>
  <body>
    <h1><font color=”red”>TomcatB.magedu.com</font></h1>
    <table align=”centre” border=”1″>
      <tr>
        <td>Session ID</td>
    <% session.setAttribute(“magedu.com”,”magedu.com”); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>


6、 memcached
│   ├── files
│   ├── lib
│   ├── manifests
│   │   └── init.pp
│   ├── spec
│   ├── templates
│   └── tests

init.pp

class memcached {
        package{‘memcached’:
                ensure => latest,
        } ->
        service{‘memcached’:
                ensure => running,
                enable => true,
         }
}

编辑列表清单:

  vim /etc/puppet/manifests/site.pp
        node ‘ngx.zcylinux.io’ {
                include chrony
                 include nginx
            }

        node /tomcat[0-1]\.zcylinux\.io/ {
                include chrony
                include jdk
                include tomcat
                include httpd
        }
        node /mem[1-2]\.zcylinux\.io/ {
                include chrony
                include memcached
        }

master中安装:
     注意版本:

            facter, puppet, puppet-server
我这里用的是:

自动化运维工具Puppet


agent主机上:

facter, puppet


初始化(即生成CA签署agent主机过程);

        puppet master –no-daemonize -v  可视化,观察过程

也可直接开启服务:systemctl start puppetmaster.service


agnet端请求签证:puppet agent –server master.zcylinux.io –no-daemonize -v

请求后,master端需要签署:puppet cert sign Agent端主机

之后可开启服务:systemctl start puppetagent.service

    开启后,agent端会每隔一段时间想master询问,是否有更改

也可以手动触发修改

puppet kick:手动触发修改

在agent端进行设置(默认监听在8139端口
vim puppet.conf
[agent]
listen = true
3.8版本要加在main中

自动化运维工具Puppet


vim auth.conf
path /run
method save
auth any
allow master.magedu.com
在最后的上边加入以上内容,只允许master触发

自动化运维工具Puppet


master端:
        puppet kick [–host <HOST>] [–all]



测试;

自动化运维工具Puppet自动化运维工具Puppet

成功


































































原创文章,作者:Immortals、zcy,如若转载,请注明出处:http://www.178linux.com/82861

(0)
上一篇 2017-07-28 20:40
下一篇 2017-07-29 09:37

相关推荐

  • 脚本实现httpd创建虚拟主机

    概述 本文使用脚本实现基于主机名的虚拟主机按需创建: 脚本可接受参数,提供独立站点目录; 生成独立站点首页; 脚本可接受参数,参数虚拟主机名称; 每虚拟使用单独的配置文件; 脚本可接受参数,参数虚拟主机名称; 环境 系统基于CentOS7.2,并通过yum安装httpd 2.4.6 建议关闭防火墙和selinux。 演示   客户机将域名解析写入/…

    Linux干货 2016-10-08
  • 用户管理、三种权限、三种特殊权限的使用

    用户管理、三种权限、三种特殊权限的使用 一、用户管理 1、软链接:ln  -s  相对于软链接的路径/绝对路径   软链接文件    硬链接:ln  相对路径原文件   硬链接文件 2、getent的使用    gentent p…

    系统运维 2016-08-05
  • 第二周作业新

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 pwd :显示当前所在路径   cd :切换目录   cd – :在上次目录与当前目录之间切换。   cd ~ :切换回自己的家目录   cd . :当前目录      cd .. :切换到…

    2017-02-18
  • 磁盘分区磁盘管理及挂载

    磁盘分区 fdisk提供交互式接口管理分区,操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘中。 语法: 1.查看分区使用信息:     fdisk -l [-u] [device…]:列出指定磁盘设备上的分区情况; 2.管理分区    fdisk d…

    Linux干货 2016-08-31
  • python装饰器

    装饰器本质是一个装饰器函数,在不改变一个函数的函数体本身的情况下,实现函数体本身外其他的功能 1.实现一个装饰器 def  logger(fn):                         #装饰器函数必须只能传入一个参数,那就是被装饰函数     print(‘in’)     def wrapper(*args,**kwar…

    Linux干货 2017-10-23
  • 从Linux小白到大牛——与狼共舞的日子12(上)

    马哥教育网络班21期+第12周课程练习 1、请描述一次完整的http请求处理过程; 1)建立或处理连接:客户端发送http请求报文,服务器端接收或拒绝请求; 2)接收请求:服务器端接收来自客户端对某些资源的请求; 3)处理请求:服务器端解析客户端请求报文,获取客户端请求的资源及请求方法等信息; 4)访问资源:服务器端获取客户端请求的资源; 5)构建响应报文;…

    Linux干货 2016-12-26