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编译安装的命令步骤,启动脚本的添加

原文地址:https://www.cnblogs.com/jsonhc/p/7646323.html