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

最新文章

  1. 以前用SQL实现的机构职能树,再看看
  2. 五、Android学习第四天补充——Android的常用控件(转)
  3. Android之SDK、NDK、JNI和so文件
  4. TextBox自定义控件
  5. 使用HTML来生产Android界面
  6. FreePascal经典资料
  7. tcpdump tutorial
  8. c 语言练习__去掉多余的空白字符_修正
  9. cocos2d-x 让精灵按照自己设定的运动轨迹行动
  10. 转:JS日期加减,日期运算
  11. bzoj1027
  12. [Whole Web, Node.js PM2] Loggin with PM2
  13. .NET AOP的实现
  14. oracle取分组的前N条数据
  15. 吐槽CSDN编辑
  16. java导出和读取excel数据
  17. 201521123002 《Java程序设计》第1周学习总结
  18. The required anti-forgery form field "__RequestVerificationToken" is not present.
  19. Nginx 配置HTTPS 与Node.js 配置HTTPS方法
  20. Jenkins Vue项目自动构建以及构建后续操作

热门文章

  1. URL中?和#的区别(关于SSRF)以及mysql的secure-file-priv
  2. 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
  3. 用Dialog 做自定义动画,加播放监听
  4. XXL-JOB分布式任务调度平台安装与部署
  5. 170412、Spring Boot Quartz介绍
  6. 关于微信小程序的场景值
  7. C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)
  8. Servlet------>servletDemo 及细节注意
  9. Oracle 数存储——物理结构
  10. Arcengine 二次开发得到点shapefile的坐标