• saltstack之haproxy的安装配置


    使用saltstack编译安装haproxy:

    由于编译安装haproxy,所以安装之前需要建立编译环境,将编译环境需要安装的包单独放置在一个目录中,当编译haproxy或其他时,直接include这个编译环境就行:
    创建相应的目录,并在目录下创建相应的sls配置文件
    mkdir /srv/salt/prod/pkg
    mkdir /srv/salt/prod/haproxy
    mkdir /srv/salt/prod/haproxy/files
    

     在创建上述目录之前需要修改salt的master配置文件,打开prod环境:

    [root@node1 base]# egrep -v "^$|^#" /etc/salt/master
    publisher_acl:
      wadeson:
        - test.ping
        - network.*
      jsonhc:
        - node1*:
          - test.ping
    file_roots:
      base:
        - /srv/salt/base
      test:
        - /srv/salt/test
      prod:
        - /srv/salt/prod
    pillar_roots:
      base:
        - /srv/pillar/base
    

     1、构建编译环境:

    [root@node1 pkg]# pwd
    /srv/salt/prod/pkg
    [root@node1 prod]# cat pkg/pkg-init.sls 
    pkg-init:
      pkg.installed:
        - names:
          - gcc
          - gcc-c++
          - glibc
          - make
          - autoconf
          - openssl
          - openssl-devel
    

     构建编译开发环境,如果上述不满足需求,可以更换为下面:

    # cat pkg_group-init.sls 
    pkg_group-init:
      cmd.run:
        - name: yum groupinstall "Development tools" "Server Platform Development"
        - unless: yum grouplist|grep "Development tools"
    

     2、使用saltstack进行编译安装haproxy

    2.1将下载好的haproxy源码包放置在haproxy目录下面的files目录中(files目录提供需要用的源码包,文件等)

    [root@node1 prod]# ll haproxy/files/
    总用量 1552
    -rw-r--r-- 1 root root 1580214 6月  18 21:45 haproxy-1.6.13.tar.gz
    -rwxr-xr-x 1 root root    2395 10月  9 22:25 haproxy.init
    

     2.2haproxy的源码包和启动脚本准备好后,开始进行安装haproxy

    [root@node1 haproxy]# pwd
    /srv/salt/prod/haproxy
    [root@node1 haproxy]# cat install.sls 
    include:
      - pkg.pkg-init          pkg.pkg-init前面的pkg是以目录prod为基准,也就是目录根
    
    haproxy-install:                  haproxy的安装
      file.managed:
        - name: /usr/local/src/haproxy-1.6.13.tar.gz
        - source: salt://haproxy/files/haproxy-1.6.13.tar.gz
        - user: root
        - group: root
        - mode: 755
      cmd.run:
        - name: cd /usr/local/src/ && tar xf haproxy-1.6.13.tar.gz && cd haproxy-1.6.13 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
        - unless: test -d /usr/local/haproxy                  判断目录,如果存在即返回TRUE则不会执行name中的命令
        - require:
          - pkg: pkg-init                 haproxy的安装依赖编译环境的安装,如果编译环境安装失败,haproxy安装将不会进行
          - file: haproxy-install       haproxy的安装也依赖于/usr/local/src/haproxy-1.6.13.tar.gz
    
    haproxy-init:                     为haproxy提供启动脚本,并添加到启动项
      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: /etc/init.d/haproxy
    
    net.ipv4.ip_nonlocal_bind:                   能够监听本机以外的ip(keepalived的vip漂移做准备)
      sysctl.present:
        - value: 1
    
    haproxy-config-dir:                         为haproxy创建配置目录
      file.directory:
        - name: /etc/haproxy
        - user: root
        - group: root
        - mode: 755 

     haproxy的安装sls写完后,验证是否成功,当前目录为:

    [root@node1 haproxy]# ll
    total 8
    drwxr-xr-x 2 root root 4096 Oct  9 23:40 files
    -rw-r--r-- 1 root root 1033 Oct 10 11:12 install.sls
    [root@node1 haproxy]# pwd
    /srv/salt/prod/haproxy
    

     salt默认是从base环境下面进行查找sls文件(如果没有添加到top.sls文件中),于是需要如下操作来执行install这个sls文件:

      salt 'node1' state.sls haproxy.install env=prod 这种报错

    查找文档:salt.modules.state.sls(mods, saltenv=None, test=None, exclude=None, queue=False, env=None, **kwargs)

    于是解决办法为:salt 'node1' state.sls haproxy.install saltenv=prod

    3、安装完haproxy后,并且haproxy已经有了启动脚本,接下来需要给haproxy提供配置文件,最后将haproxy服务开启,由于根据业务需求的不同,可能用到的haproxy的配置文件会有区别,

    所以这里将配置文件与haproxy的安装分隔开进行状态管理配置,以后minion的haproxy可以根据配置文件的不同而提供安装

    [root@node1 haproxy]# mkdir /srv/salt/prod/cluster
    [root@node1 haproxy]# mkdir /srv/salt/prod/cluster/files
    [root@node1 haproxy]# pwd
    /srv/salt/prod/haproxy
    [root@node1 files]# ll
    总用量 4
    -rw-r--r-- 1 root root 1252 10月  9 22:25 haproxy-outside.cfg
    [root@node1 files]# pwd
    /srv/salt/prod/cluster/files
    

     开始编译状态配置文件,将haproxy的安装与配置文件结合起来,并且将haproxy的服务开启

    [root@node1 cluster]# cat haproxy-outside.sls 
    include:
      - haproxy.install                include进来haproxy的安装
    
    haproxy-service:                      启动haproxy服务
      file.managed:                         复制配置文件
        - name: /etc/haproxy/haproxy.cfg
        - source: salt://cluster/files/haproxy-outside.cfg
        - user: root
        - group: root
        - mode: 644
      service.running:                        开启haproxy服务,并添加到开机启动
        - name: haproxy
        - enable: True
        - reload: True                  当该服务有reload则,当配置文件发生变化时,会reload,而不是restart
        - require: 
          - cmd: haproxy-init
        - watch:                      监控某状态,当配置文件发生变化,自动reload(没有reload则会restart)
          - file: haproxy-service            
    

     上述sls文件中,第一步骤是haproxy的安装,接下来才是给安装好的haproxy提供配置文件,最后才是将haproxy服务开启(如果需要开机启动则添加enable)

     将上述haproxy整个项目添加到base环境下面的top.sls中

    [root@node1 base]# cat top.sls 
    base:
      '*':
        - init.env_init
    
    prod:
      'node1':
        - cluster.haproxy-outside 

     于是haproxy的整个项目执行命令为salt '*' state.highstate

      当配置文件修改后,然后执行salt '*' state.highstate ,会根据watch的定义
      - watch: 监控某状态,当配置文件发生变化,自动reload(没有reload则会restart)
      - file: haproxy-service
      来reload服务haproxy:
    下面是整个haproxy项目的框架构图
    [root@node1 salt]# tree
    .
    ├── base
    │   ├── init
    │   │   ├── audit.sls
    │   │   ├── dns.sls
    │   │   ├── env_init.sls
    │   │   ├── files
    │   │   │   ├── echo.sh
    │   │   │   ├── resolv.conf
    │   │   │   ├── test.txt
    │   │   │   ├── zabbix-agent-3.0.10-1.el6.x86_64.rpm
    │   │   │   └── zabbix-sender-3.0.10-1.el6.x86_64.rpm
    │   │   ├── history.sls
    │   │   ├── sysctl.sls
    │   │   └── zabbix_agent.sls
    │   ├── _modules
    │   ├── test
    │   │   ├── create_file.sls
    │   │   ├── file-manage.sls
    │   │   ├── file.text
    │   │   ├── httpd-remove.sls
    │   │   ├── if_unless.sls
    │   │   └── test1.sls
    │   └── top.sls
    ├── prod
    │   ├── cluster
    │   │   ├── files
    │   │   │   └── haproxy-outside.cfg
    │   │   └── haproxy-outside.sls
    │   ├── haproxy
    │   │   ├── files
    │   │   │   ├── haproxy-1.6.13.tar.gz
    │   │   │   └── haproxy.init
    │   │   └── install.sls
    │   └── pkg
    │       └── pkg-init.sls
    └── test
    

      haproxy-outside.sls中包含haproxy的安装,配置文件的添加,haproxy服务的启动,而haproxy的安装包含编译环境的构建,haproxy编译安装的命令步骤,启动脚本的添加

  • 相关阅读:
    css 样式表的书写顺序
    强大的动画插件。
    百叶窗特效(用move.js库)
    jq基础
    js动态控制表单表格
    js事件对象
    js事件
    js_DOM操作
    小明年龄、成绩、名次的求解问题
    如何获取亿图中的高质量图片?
  • 原文地址:https://www.cnblogs.com/jsonhc/p/7646323.html
Copyright © 2020-2023  润新知