SaltStack实践案例二

五、Memcached配置管理

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态数据库驱动网站的访问速度。

    经常会遇到在负载均衡的环境下session问题,一般的解决办法有三种:

    Session保持;

    Session复制;

    Session共享;

    PHP可以很容易在php.ini配置中将Session存储在Memcached中,来实现Session共享,这样后端服务器有节点宕机,用户的访问请求被调度到集群中的其他节点时,用户的会话也不会丢失。

    Memcached的安装比较简单。首先安装Memcached依赖于libevent,所以要先编译安装libevent,然后编译memcached。后面我们在PHP配置管理中编写php-memcache的模块。同时还需要创建一个管理用户的配置,Memcached包括后面要配置的Nginx和PHP,都要使用www用户来进行管理。

[root@salt-master-1 ~]# mkdir -p /srv/salt/prod/libevent/files
[root@salt-master-1 ~]# mkdir -p /srv/salt/prod/memcached/files
[root@salt-master-1 ~]# mkdir /srv/salt/prod/user

    1.www用户配置

    启动Memcached需要使用www用户,包括后面我们部署Nginx和PHP都需要使用到www用户。所以我们把www用户的配置单独放置在user目录下

[root@salt-master-1 ~]# cat /srv/salt/prod/user/www.sls
www-user-group:
    group.present:
        - name: www
        - gid: 1000
    user.present:
        - name: www
        - fullname: www
        - shell: /sbin/nologin
        - uid: 1000
        - gid: 1000

    2.Libevent配置

 [root@salt-master-1 ~]# cd /srv/salt/prod/libevent/files/ && wget https://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
 [root@salt-master-1 files]# cat /srv/salt/prod/libevent/install.sls
libevent-source-install:
    file.managed:
        - name: /usr/local/src/libevent-2.0.22-stable.tar.gz
        - source: salt://libevent/files/libevent-2.0.22-stable.tar.gz
        - user: root
        - group: root
        - mode: 644
    cmd.run:
        - name: cd /usr/local/src/ && tar zxf libevent-2.0.22-stable.tar.gz && cd libevent-2.0.22-stable && ./configure --prefix=/usr/local/libevent && make && make install
        - unless: test -d /usr/local/libevent
        - require:
            - file: libevent-source-install

    3.Memcached配置

[root@salt-master-1 files]# cd /usr/local/src/ && wget  &&  cp memcached-1.4.25.tar.gz /srv/salt/prod/memcached/files/
[root@salt-master-1 src]# cat /srv/salt/prod/memcached/install.sls
include:
    - libevent.install

memcached-source-install:
    file.managed:
        - name: /usr/local/src/memcached-1.4.25.tar.gz
        - source: salt://memcached/files/memcached-1.4.25.tar.gz
        - user: root
        - group: root
        - mode: 644
    cmd.run:
       - name: cd /usr/local/src/ && tar zxf memcached-1.4.25.tar.gz && cd memcached-1.4.25 && ./configure --prefix=/usr/local/memcached --enable-64bit --with-libevent=/usr/local/libevent && make && make install
        - unless: test -d /usr/local/memcached
        - require:
           - cmd: libevent-source-install
           - file: memcached-source-install

    4.Memcached服务

[root@salt-master-1 src]# cat /srv/salt/prod/memcached/service.sls
include:
    - memcached.install
    - user.www
# 生产环境建议使用supervisor来管理memcached进程
memcached-service:
    cmd.run:
        - name: /usr/local/memcached/bin/memcached -d -m 128 -p 11211 -c 8096 -u www
        - unless: netstat -nulp | grep 11211
        - require:
            - cmd: memcached-source-install
            - user: www-user-group

    5.执行Memcached状态

[root@salt-master-1 src]# cat /srv/salt/base/top.sls
base:
    '*':
        - init.env_init
        - pkg-init
prod:
    '*':
        - cluster.haproxy-outside
        - cluster.haproxy-outside-keepalived
    'salt-minion-2.example.com':
        - memcached.service

六、Nginx配置管理

    在开始编辑写一个稍复杂的状态功能时,首先应该警醒规划。包括应该如何设计目录结构,需要应用到哪些状态模块和状态间关系,是否需要使用Grains和Pillar等

    Nginx+PHP(FastCGI)需要安装得到包首先有Nginx和PHP,需要进行编译安装,步骤:

    1).所有源码包的编译安装需要依赖一些基础软件包,像gcc、make这样的,这些在我们的环境做初始化配置的时候已经编写了pkg-init.sls.

    2).源码编译安装Nginx时需要依赖PCRE,所以需要有一个PCRE模块用来安装PCRE,然后Nginx进行include即可。

    3).需要编译安装PHP,同时除了PHP常用的模块外,还应该支持Memcached和Redis这样的生产常用的第三方模块,我们需要一个机制把它加进去。

    需要用到的功能如下:

        使用状态模块:file、cmd、service

        使用状态间关系:require、unless

        SLS之间的include

    首先创建目录如下:

[root@salt-master-1 ~]# mkdir -p /srv/salt/prod/pcre/files
[root@salt-master-1 ~]# mkdir -p /srv/salt/prod/nginx/files
[root@salt-master-1 ~]# mkdir -p /srv/salt/prod/php/files
# 创建完,把对应的源码包放到对应的目录下

    1.PCRE模块

    PCRE模块里面主要是pcre的安装,使用基本的file、cmd和状态之间的关系即可。

[root@salt-master-1 ~]# cd /srv/salt/prod/pcre/files/
[root@salt-master-1 files]# wget 

[root@salt-master-1 files]# cat /srv/salt/prod/pcre/install.sls
pcre-source-install:
    file.managed:
        - name: /usr/local/src/pcre-8.37.tar.gz
        - source: salt://pcre/files/pcre-8.37.tar.gz
        - user: root
        - group: root
        - mode: 755
    cmd.run:
        - name: cd /usr/local/src/ && tar zxf pcre-8.37.tar.gz && cd pcre-8.37 && ./configure --prefix=/usr/local/pcre && make && make install
        - unless: test -d /usr/local/pcre
        - require:
            - file: pcre-source-install

    2.Nginx模块

[root@salt-master-1 files]# cd /srv/salt/prod/nginx/files/
[root@salt-master-1 files]# wget 

[root@salt-master-1 files]# cat /srv/salt/prod/nginx/install.sls
include:
    - pcre.install
    - user.www

nginx-source-install:
    file.managed:
        - name: /usr/local/src/nginx-1.9.9.tar.gz
        - source: salt://nginx/files/nginx-1.9.9.tar.gz
        - user: root
        - group: root
        - mode: 755
    cmd.run:
        - name: cd /usr/local/src && tar zxf nginx-1.9.9.tar.gz && cd nginx-1.9.9 && ./configure --prefix=/usr/local/nginx/ --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --with-pcre=/usr/local/src/pcre-8.37 && make && make install && chown -R www:www /usr/local/nginx
        - unless: test -d /usr/local/nginx
        - require:
            - user: www-user-group
            - pkg: pkg-init
            - cmd: pcre-source-install

   3.Nginx服务SLS

[root@salt-master-1 files]# cat /srv/salt/prod/nginx/service.sls
include:
    - nginx.install

nginx-init:
    file.managed:
        - name: /etc/init.d/nginx
        - source: salt://nginx/files/nginx-init
        - mode: 755
        - user: root
        - group: root
    cmd.run:
        - name: chkconfig --add nginx
        - unless: chkconfig --list | grep nginx
        - require:
            - file: nginx-init

/usr/local/nginx/conf/nginx.conf:
    file.managed:
        - source: salt://nginx/files/nginx.conf
        - user: www
        - group: www
        - mode: 644
nginx-service:
    file.directory:
        - name: /usr/local/nginx/conf/vhost
        - require:
            - cmd: nginx-source-install
    service.running:
        - name: nginx
        - enable: True
        - reload: True
        - require:
            - cmd: nginx-init
        - watch:
            - file: /usr/local/nginx/conf/nginx.conf

    4.PHP(FastCGI)配置管理

   对于PHP的源码编译安装,我们使用FastCGI模式,FastCGI模式涉及三个文件:php.ini、php-fpm.conf和fastcgi的启动脚本

[root@salt-master-1 files]# cat /srv/salt/prod/php/install.sls
pkg-php:
    pkg.installed:
        - names:
          - mysql-devel
          - openssl-devel
	  - swig
	  - libjpeg-turto
	  - libjpeg-turto-devel
	  - libpng
	  - libpng-devel
	  - freetype
	  - freetype-devel
	  - libxml2
	  - libxml2-devel
	  - zlib
	  - zlib-devel
	  - libcurl
	  - libcurl-devel
php-source-install:
    file.managed:
        - name: /usr/local/src/php-5.6.9.tar.gz
        - source: salt://php/files/php-5.6.9.tar.gz
        - user: root
        - group: root
        - mode: 755
    cmd.run:
        - name: cd /usr/local/src/ && tar zxf php-5.6.9.tar.gz && cd php-5.6.9 && ./configure --prefix=/usr/local/php-fastcgi --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-jpeg-dir --with-png-dir --with-zlib --enable-xml --with-libxml-dir --with-curl --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --with-openssl --enable-mbstring --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr/lib64 --with-gettext=/usr/lib64 --enable-sockets --with-xmlrpc --enable-zip --enable-soap --disable-debug --enable-opcache --enable-zip --enable-soap --disable-debug --enable-opcache --enable-zip --with-config-file-path=/usr/local/php-fastcgi/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www && make && make install
        - require:
            - file: php-source-install
            - user: www-user-group
        - unless: test -d /usr/local/php-fastcgi

pdo-plugin:
    cmd.run:
        - name: cd /usr/local/src/php-5.6.9/ext/pdo_mysql && /usr/local/php-fastcgi/bin/phpize && ./configure --with-php-config=/usr/local/php-fastcgi/bin/php-config && make && make install
        - unless: test -f /usr/local/php-fastcgi/lib/php/extensions/*/pdo_mysql.so
        - require:
            - cmd: php-source-install

php-ini:
    file.managed:
        - name: /usr/local/php-fastcgi-etc/php.ini
        - source: salt://php/files/php.ini-production
        - user: root
        - group: root
        - mode: 644

php-fpm:
    file.managed:
        - name: /usr/local/php-fastcgi/etc/php-fpm.conf
        - source: salt://php/files/php-fpm.conf.default
        - user: root
        - group: root
        - mode: 644

php-fastcgi-service:
    file.managed:
        - name: /etc/init.d/php-fpm
        - source: salt://php/files/init.d/php-fpm
        - user: root
        - group: root
        - mode: 755
    cmd.run:
        - name: chkconfig --add php-fpm
        - unless: chkconfig --list | grep php-fpm
        - require:
           - file: php-fastcgi-service
    service.running:
        - name: php-fpm
        - enable: True
        - require:
            - cmd: php-fastcgi-service
        - watch:
            - file: php-ini
            - file: php-fpm

    上面已经安装了PHP FastCGI的安装,服务也能正常启动,下面来看redis和memcache模块

你可能感兴趣的:(SaltStack实践案例二)