saltstack之haproxy的安裝配置

wadeson發表於2017-10-10

使用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編譯安裝的命令步驟,啟動指令碼的新增

相關文章