编译安装需要依赖很多gcc的东西,放在生产环境下。
mkdir /srv/salt/prod/pkg
mkdir /srv/salt/prod/haproxy
mkdir /srv/salt/prod/haproxy/files
cd /srv/salt/prod/pkg/
vim pkg-init.sls
做pkg的初始化。
vim pkg-init.sls
pkg-init: ##这回加个ID
pkg.installed:
- names:
- gcc
- gcc-c++
- glibc
- make
- autoconf
- openssl
- openssl-devel
安装haproxy
现在安装haproxy,准备源码包。放在 /usr/local/src
下。
先解压:tar -zxf ***
然后编译:
make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
安装完后启动脚本在源码包里面。
cd haproxy***
里面有个启动脚本和配置,文件在cd examples
文件里有个haproxy.init
vim haproxy.init
BIN=/usr/sbin/$BASENAME -->
BIN=/usr/local/haproxy/sbin/$BASENAME
配置文件改这些,然后要cp到 /srv/salt/prod/haproxy/files/
cp haproxy.init /srv/salt/prod/haproxy/files/
cd /srv/salt/prod/haproxy/
开始haproxy的安装模块
vim install.sls
include:
- pkg.pkg-init
haproxy-install: #取个ID,并无意义,方便查看
file.managed:
- name: /usr/local/src/haproxy-1.6**.gz
- source: salt://haproxy/files/haproxy-1.6**.gz
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
第一步需要将gcc那些的include进来,这样好像是可以了,但是有个问题是每次执行都要安装一遍,这样费时费力的事情,当然是要避免的。saltstack于是有个模块可以判断如果有了就不装。
状态间关系
- 功能:条件判断,主要用于cmd状态模块。
- 常用方法:
- onlyif:检查的命令,仅当“onlyif”选项指向的命令返回true时才执行name定义的命令
- unless:用于检查的命令,仅当“unless”选项指向的命令返回false时才执行name指向的命令
cmd.run:
- name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
- unless: test -d /usr/local/haproxy
现在这样写也没什么问题了感觉,但是如果源码包没有安装成功的话,后面的安装还是会继续,希望可以做一个依赖,当前面的没有安装成功的话,后面的就不会继续安装。所以需要学习一个依赖。
处理状态件关系
- 功能:处理状态间关系
- 常用方法:
- require #我依赖某个状态
- require_in #我被某个状态依赖
- watch #我关注某个状态
- watch_in #我被某个状态关注
haproxy-install依赖gcc的安装,和文件
cmd.run:
- name: cd /usr/local/src && tar zxf haproxy-1.6**.gz && cd haproxy-1.6.2 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
- unless: test -d /usr/local/haproxy
- require:
- pkg: pkg-init
- file: haproxy- install
在install写的是为了无论在哪里都可以引用可以执行的,不能在里面写配置文件的,因为要在其他地方安装它就错了,要把唯一的东西写在里面,比如haproxy的安装和启动脚本,无论在哪里安装都需要这些东西。然后不同的地方,用不同的业务来引用。
下面写启动脚本,脚本是文件
****
- pkg: pkg-init
- file: haproxy- install
/etc/init.d/haproxy:
file.managed:
- source: salt://haproxy/files/haproxy.init
- user: root
- group: root
- mode: 755
- require:
- cmd: haproxy-install
还要配个内核参数,可以监听非本地IP,负载均衡的时候IP只能在一台机器上,这时候备机也在监听这个地址,结果这个IP不在他的机器上,这样会报错,会起不来,所以要修改一个内核参数,可以监听非本地IP,在/proc/sys/net/ipv4/ip_nonlocal_bind
,这个默认是0要改成为1.
*
*
*
- pkg: pkg-init
- file: haproxy- install
/etc/init.d/haproxy:
file.managed:
- source: salt://haproxy/files/haproxy.init
- user: root
- group: root
- mode: 755
- require:
- cmd: haproxy-install
net.ipv4.ip_nonlocal_bind:
sysctl.present:
- value: 1
现在需要创建一个/etc/haproxy 的目录,后面放配置文件的时候用。这里可以再起个ID这样可以跟不起id的做对应。
***
net.ipv4.ip_nonlocal_bind:
sysctl.present:
- value: 1
haproxy-config-dir:
file.directory:
- name: /etc/haproxy
- user: root
- group: root
- mode: 755
启动脚本完了,还可以加载到系统服务里面:
***
haproxy-init:
cmd.run:
- name: chkconfig --add haproxy
- unless: chkconfig --list | grep haproxy
- require:
- file: /etc/init.d/haproxy
可以将
/etc/init.d/haproxy:
file.managed:
- source: salt://haproxy/files/haproxy.init
- user: root
- group: root
- mode: 755
- require:
- cmd: haproxy-install
加载到haproxy-init里面,如下:
haproxy-init:
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: haproxy-init #依赖就可以直接写haproxy-init这个ID
现在可以手动执行如下:
salt ‘*’ state.sls haproxy.install env=prod
要指定环境,不然就会默认到base环境执行。