saltstack之haproxy的安装配置
使用saltstack编译安装haproxy:
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
[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编译安装的命令步骤,启动脚本的添加
最新文章
- 以前用SQL实现的机构职能树,再看看
- 五、Android学习第四天补充——Android的常用控件(转)
- Android之SDK、NDK、JNI和so文件
- TextBox自定义控件
- 使用HTML来生产Android界面
- FreePascal经典资料
- tcpdump tutorial
- c 语言练习__去掉多余的空白字符_修正
- cocos2d-x 让精灵按照自己设定的运动轨迹行动
- 转:JS日期加减,日期运算
- bzoj1027
- [Whole Web, Node.js PM2] Loggin with PM2
- .NET AOP的实现
- oracle取分组的前N条数据
- 吐槽CSDN编辑
- java导出和读取excel数据
- 201521123002 《Java程序设计》第1周学习总结
- The required anti-forgery form field ";__RequestVerificationToken"; is not present.
- Nginx 配置HTTPS 与Node.js 配置HTTPS方法
- Jenkins Vue项目自动构建以及构建后续操作
热门文章
- URL中?和#的区别(关于SSRF)以及mysql的secure-file-priv
- 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
- 用Dialog 做自定义动画,加播放监听
- XXL-JOB分布式任务调度平台安装与部署
- 170412、Spring Boot Quartz介绍
- 关于微信小程序的场景值
- C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)
- Servlet------>;servletDemo 及细节注意
- Oracle 数存储——物理结构
- Arcengine 二次开发得到点shapefile的坐标