功能模块:
根据整个系统架构图,我们可以分为两大部分来完成。前端高可用和后端上线服务,前端高可用主要包括haproxy和keepalived安装及配置。后端线上服务包括nginx、php、memcache、mysql的安装及配置。以下是haproxy和keepalived安装和配置。
1.安装的每个服务目录要清晰;
创建Haproxy模块的文件目录:
[root@salt-master ~]# mkdir /srv/salt/prod/pkg
注:pkg目录用于存放软件安装包
[root@salt-master ~]# mkdir /srv/salt/prod/haproxy
[root@salt-master ~]# mkdir /srv/salt/prod/haproxy/files
注:haproxy目录用于存放haroxy的安装脚本和文件
注意:要先把启动文件cp到files目录下:
[root@salt-master ~]#cd /usr/local/src/
[root@salt-master ~]#tar -zxvf haproxy-1.7.11.tar.gz.tar
[root@salt-master ~]# vi /usr/local/src/haproxy-1.7.11/examples/haproxy.init
BIN=/usr/local/haproxy/sbin/$BASENAME #修改这行
cp到haproxy/files/目录下
[root@salt-master ~]# cp /usr/local/src/haproxy-1.7.11/examples/haproxy.init /srv/salt/prod/haproxy/files/
[root@salt-master ~]# cat /srv/salt/prod/pkg/pkg-init.sls
pkg-init:
pkg.installed:
- names:
- gcc
- gcc-c++
- glibc
- make
- autoconf
- openssl
- openssl-devel
注:pkg-init.sls用解决源码安装所需要的相关依赖,安装其他服务也是如此;
[root@salt-master ~]#vi /srv/salt/prod/haproxy/install.sls 编辑安装文件<==========================================
include:
- pkg.pkg-init
haproxy-install:
file.managed:
- name: /usr/local/src/haproxy-1.7.11.tar.gz.tar
- source: salt://haproxy/files/haproxy-1.7.11.tar.gz.tar
- user: root
- group: root
- mode: 755
cmd.run:
- name: cd /usr/local/src/ && tar xf haproxy-1.7.11.tar.gz.tar && cd haproxy-1.7.11 && make TARGET=linux2628 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
- unless: test -d /usr/local/haproxy #判断haproxy目录是否存在,如果存在不在继续安装
- require: #执行完cmd.run后,如果执行成功,则继续。否则,不执行以下。
- pkg: pkg-init
- file: haproxy-install
net.ipv4.ip_nonlocal_bind:#监听本地ip
sysctl.present:
- value: 1
haproxy-init: #定义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: systemctl start haproxy
- unless: systemctl enable haproxy
- require:
- file: /etc/init.d/haproxy
haproxy-config-dir: #创建haproxy的目录
file.directory:
- name: /etc/haproxy
- user: root
- group: root
- mode: 755
注意:编写的时候不能有多余的空格或者tab键;
功能名称:requisites
功 能:处理状态间关系
常用方法:
require #依赖某个状态
require_in #被某个状态依赖
watch #关注某个状态
watch_in #被某个状态关注
状态模块:状态间关系
功 能:条件判断,主要用于cmd状态模块
常用方法:
-onlyif:检查的命令,仅当“onlyif”选项指向的命令返回true时才执行name定义的命令。
-unless;用于检查的命令,仅当“unless”选项指向的命令返回false时才执行name指向的命令。
目录结构,如下:
[root@salt-master prod]# tree
.
├── haproxy
│ ├── files
│ │ └── haproxy-1.7.11.tar.gz.tar
│ └── install.sls
└── pkg
└── pkg-init.sls
3 directories, 3 files
执行安装haproxy:
[root@salt-master ~]# salt '*' state.sls haproxy.install env=prod
salt-minion2.2018.com:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc
Result: True
Comment: Package gcc is already installed.
Started: 14:19:20.602407
Duration: 461.778 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: glibc
Result: True
Comment: Package glibc is already installed.
Started: 14:19:21.064363
Duration: 0.316 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl
Result: True
Comment: Package openssl is already installed.
Started: 14:19:21.064771
Duration: 0.225 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl-devel
Result: True
Comment: Package openssl-devel is already installed.
Started: 14:19:21.065048
Duration: 0.262 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: autoconf
Result: True
Comment: Package autoconf is already installed.
Started: 14:19:21.065364
Duration: 0.208 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc-c++
Result: True
Comment: Package gcc-c++ is already installed.
Started: 14:19:21.065620
Duration: 0.246 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: make
Result: True
Comment: Package make is already installed.
Started: 14:19:21.065916
Duration: 0.207 ms
Changes:
----------
ID: haproxy-install
Function: file.managed
Name: /usr/local/src/haproxy-1.7.11.tar.gz.tar
Result: True
Comment: File /usr/local/src/haproxy-1.7.11.tar.gz.tar is in the correct state
Started: 14:19:21.067640
Duration: 19.354 ms
Changes:
----------
ID: haproxy-install
Function: cmd.run
Name: cd /usr/local/src/ && tar zxf haproxy-1.7.11.tar.gz.tar && cd haproxy-1.7.11 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:21.087977
Duration: 5.653 ms
Changes:
----------
ID: net.ipv4.ip_nonlocal_bind
Function: sysctl.present
Result: True
Comment: Sysctl value net.ipv4.ip_nonlocal_bind = 1 is already set
Started: 14:19:21.094111
Duration: 22.274 ms
Changes:
----------
ID: haproxy-init
Function: file.managed
Name: /etc/init.d/haproxy
Result: True
Comment: File /etc/init.d/haproxy updated
Started: 14:19:21.116629
Duration: 29.865 ms
Changes:
----------
diff:
New file
mode:
0755
----------
ID: haproxy-init
Function: cmd.run
Name: systemctl start haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:21.146939
Duration: 286.851 ms
Changes:
----------
ID: haproxy-config-dir
Function: file.directory
Name: /etc/haproxy
Result: True
Comment: Directory /etc/haproxy is in the correct state
Started: 14:19:21.434024
Duration: 0.668 ms
Changes:
Summary
-------------
Succeeded: 13 (changed=1)
Failed: 0
-------------
Total states run: 13
salt-minion1.2018.com:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc
Result: True
Comment: Package gcc is already installed.
Started: 14:19:20.362396
Duration: 464.007 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: glibc
Result: True
Comment: Package glibc is already installed.
Started: 14:19:20.826524
Duration: 0.376 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl
Result: True
Comment: Package openssl is already installed.
Started: 14:19:20.826952
Duration: 0.266 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl-devel
Result: True
Comment: Package openssl-devel is already installed.
Started: 14:19:20.827274
Duration: 0.207 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: autoconf
Result: True
Comment: Package autoconf is already installed.
Started: 14:19:20.827531
Duration: 0.279 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc-c++
Result: True
Comment: Package gcc-c++ is already installed.
Started: 14:19:20.827859
Duration: 0.201 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: make
Result: True
Comment: Package make is already installed.
Started: 14:19:20.828109
Duration: 0.265 ms
Changes:
----------
ID: haproxy-install
Function: file.managed
Name: /usr/local/src/haproxy-1.7.11.tar.gz.tar
Result: True
Comment: File /usr/local/src/haproxy-1.7.11.tar.gz.tar is in the correct state
Started: 14:19:20.830427
Duration: 12.208 ms
Changes:
----------
ID: haproxy-install
Function: cmd.run
Name: cd /usr/local/src/ && tar zxf haproxy-1.7.11.tar.gz.tar && cd haproxy-1.7.11 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:20.843770
Duration: 5.678 ms
Changes:
----------
ID: net.ipv4.ip_nonlocal_bind
Function: sysctl.present
Result: True
Comment: Sysctl value net.ipv4.ip_nonlocal_bind = 1 is already set
Started: 14:19:20.849940
Duration: 21.455 ms
Changes:
----------
ID: haproxy-init
Function: file.managed
Name: /etc/init.d/haproxy
Result: True
Comment: File /etc/init.d/haproxy updated
Started: 14:19:20.871694
Duration: 38.909 ms
Changes:
----------
diff:
New file
mode:
0755
----------
ID: haproxy-init
Function: cmd.run
Name: systemctl start haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:20.911008
Duration: 316.499 ms
Changes:
----------
ID: haproxy-config-dir
Function: file.directory
Name: /etc/haproxy
Result: True
Comment: Directory /etc/haproxy is in the correct state
Started: 14:19:21.227778
Duration: 0.729 ms
Changes:
Summary
-------------
Succeeded: 13 (changed=1)
Failed: 0
-------------
Total states run: 13
salt-master.2018.com:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc
Result: True
Comment: Package gcc is already installed.
Started: 14:19:19.403811
Duration: 510.289 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: glibc
Result: True
Comment: Package glibc is already installed.
Started: 14:19:19.914223
Duration: 0.354 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl
Result: True
Comment: Package openssl is already installed.
Started: 14:19:19.914633
Duration: 0.207 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: openssl-devel
Result: True
Comment: Package openssl-devel is already installed.
Started: 14:19:19.914891
Duration: 0.272 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: autoconf
Result: True
Comment: Package autoconf is already installed.
Started: 14:19:19.915213
Duration: 0.201 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: gcc-c++
Result: True
Comment: Package gcc-c++ is already installed.
Started: 14:19:19.915464
Duration: 0.263 ms
Changes:
----------
ID: pkg-init
Function: pkg.installed
Name: make
Result: True
Comment: Package make is already installed.
Started: 14:19:19.915778
Duration: 0.196 ms
Changes:
----------
ID: haproxy-install
Function: file.managed
Name: /usr/local/src/haproxy-1.7.11.tar.gz.tar
Result: True
Comment: File /usr/local/src/haproxy-1.7.11.tar.gz.tar is in the correct state
Started: 14:19:19.917674
Duration: 9.958 ms
Changes:
----------
ID: haproxy-install
Function: cmd.run
Name: cd /usr/local/src/ && tar zxf haproxy-1.7.11.tar.gz.tar && cd haproxy-1.7.11 && make TARGET=linux26 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:19.928663
Duration: 8.278 ms
Changes:
----------
ID: net.ipv4.ip_nonlocal_bind
Function: sysctl.present
Result: True
Comment: Sysctl value net.ipv4.ip_nonlocal_bind = 1 is already set
Started: 14:19:19.937498
Duration: 27.672 ms
Changes:
----------
ID: haproxy-init
Function: file.managed
Name: /etc/init.d/haproxy
Result: True
Comment: File /etc/init.d/haproxy updated
Started: 14:19:19.965425
Duration: 7.191 ms
Changes:
----------
diff:
New file
mode:
0755
----------
ID: haproxy-init
Function: cmd.run
Name: systemctl start haproxy
Result: True
Comment: unless execution succeeded
Started: 14:19:19.972960
Duration: 574.228 ms
Changes:
----------
ID: haproxy-config-dir
Function: file.directory
Name: /etc/haproxy
Result: True
Comment: Directory /etc/haproxy is in the correct state
Started: 14:19:20.547340
Duration: 0.857 ms
Changes:
Summary
-------------
Succeeded: 13 (changed=1)
Failed: 0
-------------
Total states run: 13
注:env=prod 指定prod目录下执行,如果不加此参数会默认从base环境下执行sls文件
可以看到执行haproxy安装成功了。