1. 说明:
下文的案例是根据上一篇文章进行的修改。因此请优先读取上一篇文章内容《Saltstack_10_配置管理-状态模块》
并且目录进行了变化,从 /srv/salt/lamp 变为了 /srv/salt/lamp2 。
另外:下文没有根据模块编写,而是根据服务进行编写的。其中数据库也是单独部署的。
2. 主机规划
服务器名称 | 操作系统版本 | 内网IP | 外网IP(模拟) | Hostname | 部署模块 |
---|---|---|---|---|---|
salt100 | CentOS7.5 | 172.16.1.100 | 10.0.0.100 | salt100 | salt-master、salt-minion |
salt01 | CentOS7.5 | 172.16.1.11 | 10.0.0.11 | salt01 | salt-minion |
salt02 | CentOS7.5 | 172.16.1.12 | 10.0.0.12 | salt02 | salt-minion |
salt03 | CentOS7.5 | 172.16.1.13 | 10.0.0.13 | salt03 | salt-minion |
状态模块文档
https://docs.saltstack.com/en/latest/ref/states/all/index.html
require 和 watch 文档
https://docs.saltstack.com/en/latest/topics/tutorials/states_pt2.html
include 和 extend 文档
https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html
注意事项
修改了master或者minion的配置文件,那么必须重启对应的服务。
3. 状态之间的依赖关系
状态间关系:
1、我依赖谁 require
2、谁依赖我【我被谁依赖】 require_in
3、我监控谁 watch # 例如:如果配置文件有修改,那么会重载、重启服务
4、谁监控我【我被谁监控】 watch_in # 如果配置文件有修改,那么会重载、重启服务
5、我引用谁 include
6、我扩展谁 extend
如何编写SLS技巧:
1、按状态分类 如果单独使用,很清晰
2、按服务分类 可以被其他的SLS include。例如:LNMP include mysql 的服务 【生产优先使用】
4. 依赖关系案例
4.1. 部署架构
服务器名称 | 操作系统版本 | 内网IP | 外网IP(模拟) | Hostname | 部署模块【通过salt部署】 |
---|---|---|---|---|---|
salt100 | CentOS7.5 | 172.16.1.100 | 10.0.0.100 | salt100 | mariadb |
salt01 | CentOS7.5 | 172.16.1.11 | 10.0.0.11 | salt01 | httpd、PHP |
salt02 | CentOS7.5 | 172.16.1.12 | 10.0.0.12 | salt02 | httpd、PHP |
salt03 | CentOS7.5 | 172.16.1.13 | 10.0.0.13 | salt03 | httpd、PHP |
4.2. Apache和PHP的SLS【正向依赖】
[root@salt100 lamp2]# pwd # 所在目录
/srv/salt/lamp2
[root@salt100 lamp2]# ll
total 16
-rw-r--r-- 1 root root 599 Dec 31 15:27 apache.sls
drwxr-xr-x 2 root root 53 Dec 31 15:50 file
-rw-r--r-- 1 root root 41 Dec 31 15:49 init.sls
-rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls # 单独使用
-rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
[root@salt100 lamp2]# ll file/ # 涉及的配置文件
total 80
-rw-r--r-- 1 root root 11786 Dec 31 15:50 httpd.conf
-rw-r--r-- 1 root root 671 Dec 31 15:43 my.cnf
-rw-r--r-- 1 root root 64945 Oct 31 03:33 php.ini
[root@salt100 lamp2]# cat init.sls
include: # 我包含谁
- lamp2.apache
- lamp2.php
[root@salt100 lamp2]# cat apache.sls
apache-service:
pkg.installed:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://lamp2/file/httpd.conf
- user: root
- gourp: root
- mode: 644
- backup: minion
- require: # 我依赖谁
- pkg: apache-service # 依赖 apache-service 中 pkg 的安装包
service.running:
- name: httpd
- enable: True
- reload: True
- require: # 我依赖谁
- pkg: apache-service
- watch: # 我监控谁
# 一旦发生变化,就重加载服务
- file: apache-service # 监控 apache-service 中 file 的文件
[root@salt100 lamp2]# cat php.sls
php-service:
pkg.installed:
- name: php
- name: php-devel
- name: mariadb
- name: php-mysql
- name: php-cli
- name: php-mbstring
file.managed:
- name: /etc/php.ini
- source: salt://lamp2/file/php.ini
- user: root
- group: root
- mode: 644
- backup: minion
- require: # 我依赖谁
- pkg: php-service
4.2.1. 执行SLS
[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True # 测试是否可行 【查看返回信息】
[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init # 查看执行结果
[root@salt100 lamp2]# salt 'salt0*' test.ping # 将进行批量执行----查看目标选择是否正确
salt01:
True
salt02:
True
salt03:
True
[root@salt100 lamp2]# salt 'salt0*' state.sls lamp2.init # 批量执行【并查看执行结果】
4.3. mariadb 的 SLS 【方向依赖】
[root@salt100 lamp2]# pwd # 所在目录
/srv/salt/lamp2
[root@salt100 lamp2]# ll
total 16
-rw-r--r-- 1 root root 599 Dec 31 15:27 apache.sls
drwxr-xr-x 2 root root 53 Dec 31 15:50 file
-rw-r--r-- 1 root root 41 Dec 31 15:49 init.sls
-rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls # 单独使用
-rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
[root@salt100 lamp2]# ll file/ # 涉及的配置文件
total 80
-rw-r--r-- 1 root root 11786 Dec 31 15:50 httpd.conf
-rw-r--r-- 1 root root 671 Dec 31 15:43 my.cnf
-rw-r--r-- 1 root root 64945 Oct 31 03:33 php.ini
[root@salt100 lamp2]# cat mariadb.sls
mariadb-service:
pkg.installed:
- name: mariadb
- name: mariadb-server
- require_in: # 谁依赖我「我被谁依赖」
- file: mariadb-service
- watch_in: # 谁监控我「我被谁监控」
- service: mariadb-service
file.managed:
- name: /etc/my.cnf
- source: salt://lamp2/file/my.cnf
- user: root
- group: root
- mode: 644
- backup: minion
- watch_in: # 谁监控我「我被谁监控」
- service: mariadb-service
service.running:
- name: mariadb.service
- enable: True
- restart: True
4.3.1. 执行SLS
[root@salt100 lamp2]# salt 'salt100' state.sls lamp2.mariadb test=True # 测试是否可行 【查看返回信息】
[root@salt100 lamp2]# [root@salt100 lamp2]# salt 'salt100' state.sls lamp2.mariadb # 查看执行结果