美文网首页
saltstack功能模块

saltstack功能模块

作者: 树遥儿 | 来源:发表于2017-07-21 17:02 被阅读0次

    编译安装需要依赖很多gcc的东西,放在生产环境下。

    mkdir /srv/salt/prod/pkg
    mkdir /srv/salt/prod/haproxy
    mkdir /srv/salt/prod/haproxy/files
    cd /srv/salt/prod/pkg/
    vim pkg-init.sls
    

    做pkg的初始化。

    vim pkg-init.sls
    pkg-init:   ##这回加个ID
      pkg.installed:
        - names:
          - gcc
          - gcc-c++
          - glibc
          - make
          - autoconf
          - openssl
          - openssl-devel
    

    安装haproxy

    现在安装haproxy,准备源码包。放在 /usr/local/src下。
    先解压:tar -zxf ***
    然后编译:

    make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
    

    安装完后启动脚本在源码包里面。
    cd haproxy***
    里面有个启动脚本和配置,文件在cd examples 文件里有个haproxy.init

    vim haproxy.init
    BIN=/usr/sbin/$BASENAME -->
    BIN=/usr/local/haproxy/sbin/$BASENAME 
    

    配置文件改这些,然后要cp到 /srv/salt/prod/haproxy/files/
    cp haproxy.init /srv/salt/prod/haproxy/files/
    cd /srv/salt/prod/haproxy/
    开始haproxy的安装模块

    vim install.sls
    include:
      - pkg.pkg-init
    haproxy-install: #取个ID,并无意义,方便查看
      file.managed:
        - name: /usr/local/src/haproxy-1.6**.gz
        - source: salt://haproxy/files/haproxy-1.6**.gz
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy    
    

    第一步需要将gcc那些的include进来,这样好像是可以了,但是有个问题是每次执行都要安装一遍,这样费时费力的事情,当然是要避免的。saltstack于是有个模块可以判断如果有了就不装。

    状态间关系

    • 功能:条件判断,主要用于cmd状态模块。
    • 常用方法:
      • onlyif:检查的命令,仅当“onlyif”选项指向的命令返回true时才执行name定义的命令
      • unless:用于检查的命令,仅当“unless”选项指向的命令返回false时才执行name指向的命令
      cmd.run:
        - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
        - unless: test -d /usr/local/haproxy
    

    现在这样写也没什么问题了感觉,但是如果源码包没有安装成功的话,后面的安装还是会继续,希望可以做一个依赖,当前面的没有安装成功的话,后面的就不会继续安装。所以需要学习一个依赖。
    处理状态件关系

    • 功能:处理状态间关系
    • 常用方法:
      • require #我依赖某个状态
      • require_in #我被某个状态依赖
      • watch #我关注某个状态
      • watch_in #我被某个状态关注

    haproxy-install依赖gcc的安装,和文件

      cmd.run:
        - name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
        - unless: test -d /usr/local/haproxy
        - require: 
          - pkg: pkg-init
          - file: haproxy- install
    

    在install写的是为了无论在哪里都可以引用可以执行的,不能在里面写配置文件的,因为要在其他地方安装它就错了,要把唯一的东西写在里面,比如haproxy的安装和启动脚本,无论在哪里安装都需要这些东西。然后不同的地方,用不同的业务来引用。

    下面写启动脚本,脚本是文件

    ****
          - pkg: pkg-init
          - file: haproxy- install
    /etc/init.d/haproxy:
      file.managed:
        - source: salt://haproxy/files/haproxy.init
        - user: root
        - group: root
        - mode: 755
        - require:
          - cmd: haproxy-install
    

    还要配个内核参数,可以监听非本地IP,负载均衡的时候IP只能在一台机器上,这时候备机也在监听这个地址,结果这个IP不在他的机器上,这样会报错,会起不来,所以要修改一个内核参数,可以监听非本地IP,在/proc/sys/net/ipv4/ip_nonlocal_bind,这个默认是0要改成为1.

    *
    *
    *
          - pkg: pkg-init
          - file: haproxy- install
    /etc/init.d/haproxy:
      file.managed:
        - source: salt://haproxy/files/haproxy.init
        - user: root
        - group: root
        - mode: 755
        - require:
          - cmd: haproxy-install
    
    net.ipv4.ip_nonlocal_bind:
      sysctl.present:
        - value: 1
    

    现在需要创建一个/etc/haproxy 的目录,后面放配置文件的时候用。这里可以再起个ID这样可以跟不起id的做对应。

    ***
    net.ipv4.ip_nonlocal_bind:
      sysctl.present:
        - value: 1
    
    haproxy-config-dir:
      file.directory:
        - name: /etc/haproxy
        - user: root 
        - group: root
        - mode: 755
    

    启动脚本完了,还可以加载到系统服务里面:

    ***
    haproxy-init:
      cmd.run:
        - name: chkconfig --add haproxy
        - unless: chkconfig --list | grep haproxy
        - require:
          - file: /etc/init.d/haproxy
    

    可以将

    /etc/init.d/haproxy:
      file.managed:
        - source: salt://haproxy/files/haproxy.init
        - user: root
        - group: root
        - mode: 755
        - require:
          - cmd: haproxy-install
    

    加载到haproxy-init里面,如下:

    haproxy-init:
      file.managed:
        - name: /etc/init.d/haproxy
        - source: salt://haproxy/files/haproxy.init
        - user: root
        - group: root
        - mode: 755
        - require:
          - cmd: haproxy-install
      cmd.run:
        - name: chkconfig --add haproxy
        - unless: chkconfig --list | grep haproxy
        - require:
          - file: haproxy-init   #依赖就可以直接写haproxy-init这个ID
    

    现在可以手动执行如下:

    salt ‘*’ state.sls haproxy.install env=prod

    要指定环境,不然就会默认到base环境执行。

    相关文章

      网友评论

          本文标题:saltstack功能模块

          本文链接:https://www.haomeiwen.com/subject/rjlekxtx.html