1. 配置管理:state和file

https://docs.saltstack.com/en/latest/topics/states/index.html

Full list of states

1.state状态模块

希望主机,apache ,启动状态,关闭状态,

写法1

[root@linux-node1 web]# pwd
/srv/salt/base/web
[root@linux-node1 web]# vim apache.sls
apache:
pkg.installed:
- name: httpd
service.running:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- usr: root
- group: root
- mode:
Id声明,全局(test,dev,base环境)唯一
Pkg 状态模块
. 引用方法
Installed 模块方法
Name: httpd 参数

2.file 文件管理模块

Name :管理文件的路径

在id,Apache下,每个模块只能用一次

写法2

[root@linux-node1 web]# vim apache.sls
apache-install:
pkg.installed:
- name: httpd apache-service:
service.running
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- usr: root
- group: root
- mode:

写法3

没有声明name,id就是name

 apache:
pkg.installed:
- name: httpd
service.running:
- name: httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- usr: root
- group: root
- mode: /etc/httpd/conf/php.conf
file.managed:
- source: salt://apache/files/php.conf
- user: root
- group: root
- mode:

2.自动化安装LAMP:状态设计

1. Pkg模块

指定版本

指定仓库

需要安装的软件包

[root@linux-node1 web]# yum install -y httpd php mysql-server php-mysql php-pdo php-cli

2. jinja模板

监控本地的mac ip

用模板的实现jinja

3.file模块

File可以使用grains

4.Service模块

监控文件,文件更新,自动重载服务

3.LAMP的状态实现

学saltstack,学的是思路,三段式

前期版本:

学习状态,先把安装,配置写在一起

三段式:  安装 配置  启动

创建目录

[root@linux-node1 prod]# pwd

/srv/salt/prod

[root@linux-node1 prod]# mkdir apache

[root@linux-node1 prod]# mkdir php

[root@linux-node1 prod]# mkdir mysql

1.apache

# sls 配置文件

[root@linux-node1 prod]# cd apache/

[root@linux-node1 apache]# vim apache.sls

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: apache-service:
service.running:
- name: httpd
- enable: True

source :对应当前目录,相对路径

- source: salt://apache/files/httpd.conf

你这个环境的根路径  salt:   /srv/salt/

# 配置文件,cp

[root@linux-node1 apache]# mkdir files

[root@linux-node1 apache]# cd files/

[root@linux-node1 files]# cp /etc/httpd/conf/httpd.conf .

# 执行命令

默认base目录

[root@linux-node1 files]# salt 'linux-node1*' state.sls apache.apache saltenv=prod

#  test

# init.sls

[root@linux-node1 apache]# pwd

/srv/salt/prod/apache

[root@linux-node1 apache]# mv apache.sls init.sls

2.php

# php目录

Php不需要启动服务,以模块的方式通信

安装多个,查看文档

[root@linux-node1 prod]# ls

apache  mysql  php

[root@linux-node1 prod]# cd php/

[root@linux-node1 php]# mkdir files

[root@linux-node1 php]# vim init.sls

# cp php配置文件

[root@linux-node1 php]# cp /etc/php.ini files/

3.mysql

安装 配置 启动

[root@linux-node1 prod]# vim mysql/init.sls

mysql-install:
pkg.installed:
- pkgs:
- mariadb
- mariadb-server mysql-config:
file.managed:
- name: /etc/my.cnf
- source: salt://mysql/files/my.cnf
- user: root
- group: root
- mode: mysql-service:
service.running:
- name: mariadb
- enable: True

# 配置文件

[root@linux-node1 mysql]# mkdir files

[root@linux-node1 mysql]# cd files/

[root@linux-node1 files]# cp /etc/my.cnf .

4.执行state

文件目录

执行

[root@linux-node1 salt]# salt -S '192.168.194.131' state.sls php.init saltenv=prod

[root@linux-node1 salt]# salt -S '192.168.194.131' state.sls mysql.init saltenv=prod

5. 高级状态.

[root@linux-node1 base]# vim top.sls

[root@linux-node1 base]# pwd

/srv/salt/base

[root@linux-node1 base]# salt 'linux-node1*' state.highstate

4.  配置管理:状态间的关系

1. Include功能

https://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html

[root@linux-node1 prod]# pwd

/srv/salt/prod

[root@linux-node1 prod]# vim lamp.sls

include:
- apache.init
- php.init
- mysql.init

[root@linux-node1 prod]# vim ../base/top.sls

prod:
'linux-node1.example.com':
- lamp

[root@linux-node1 prod]# salt -S '192.168.194.131' state.highstate

2.Extend扩展功能

  1. 增加其他功能,修改配置文件,到最终版本
  2. Extend 语法

需求:只能在机器1上php-mbstring 包

[root@linux-node1 prod]# vim lamp.sls
include:
- apache.init
- php.init
- mysql.init extend:
php-install:
pkg.installed:
- name: php-mbstring [root@linux-node1 prod]# salt -S '192.168.194.131' state.highstate

3.Require依赖

需求:if 上个操作,安装不成功或者配置不成功,下一个不执行

(1)反例子

[root@linux-node1 apache]# vim init.sls

[root@linux-node1 apache]# salt -S '192.168.194.131' state.highstate

(2)依赖于上个操作

[root@linux-node1 apache]# systemctl stop httpd

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd1.conf
- user: root
- group: root
- mode: apache-service:
service.running:
- name: httpd
- enable: True
- require:
- file: apache-config

[root@linux-node1 apache]# salt -S '192.168.194.131' state.highstate

(3)最终版本:

启动 依赖于 安装,配置

[root@linux-node1 apache]# vim init.sls

[root@linux-node1 apache]# salt -S '192.168.194.131' state.highstate

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: apache-service:
service.running:
- name: httpd
- enable: True
- require:
- pkg: apache-install
- file: apache-config

(4)Require  我依赖于谁

Require_in 我被谁依赖

[root@linux-node1 apache]# vim init.sls

apache-install:
pkg.installed:
- name: httpd
- require_in:
- service: apache-service apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode:
- require-in:
- service: apache-service apache-service:
service.running:
- name: httpd
- enable: True

4.Watch功能:同时有require功能

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.service.html#salt.states.service.mod_watch

该配置文件变化,这个服务重启,重载

[root@linux-node1 apache]# vim files/httpd.conf

[root@linux-node1 apache]# salt -S '192.168.194.131' state.highstate

重载

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode: apache-service:
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: apache-config

Watch_in

[root@linux-node1 apache]# cat init.sls

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode:
- watch_in:
- service: apache-service apache-service:
service.running:
- name: httpd
- enable: True
- reload: True

5.  配置管理,状态间的条件判断

需求:Admin输入用户名,密码才能登陆

1.Apache认证登陆

https://blog.csdn.net/alexander_phper/article/details/52242474

  1. 修改配置
  2. 用户名密码文件

(1)配置admin页面

[root@linux-node1 apache]# cd /var/www/html/

[root@linux-node1 html]# mkdir admin

[root@linux-node1 html]# cd admin/

[root@linux-node1 admin]# vim index.html

This is admin

(2)配置

# 配置httpd

[root@linux-node1 files]# pwd

/srv/salt/prod/apache/files

[root@linux-node1 files]# vim httpd.conf

<Directory "/var/www/html/admin">
AllowOverride All
Order allow,deny
Allow from all
AuthType Basic
AuthName "hehe"
AuthUserFile /etc/httpd/conf/htpasswd_file
Require user admin
</Directory>

[root@linux-node1 files]# whereis htpasswd

htpasswd: /usr/bin/htpasswd /usr/share/man/man1/htpasswd.1.gz

[root@linux-node1 files]# rpm -qf /usr/bin/htpasswd

httpd-tools-2.4.6-89.el7.centos.x86_64

2. Cmd认证模块

Unless

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html

3.配置init.sls

[root@linux-node1 apache]# pwd

/srv/salt/prod/apache

[root@linux-node1 apache]# vim init.sls

4 unless状态判断

If 文件存在:不执行

Else:不存在,执行

Unless

条件为假,执行

apache-install:
pkg.installed:
- name: httpd apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- user: root
- group: root
- mode:
- watch_in:
- service: apache-service apache-auth:
pkg.installed:
- name: httpd-tools
cmd.run:
- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
- unless: test -f /etc/httpd/conf/htpasswd_file apache-service:
service.running:
- name: httpd
- enable: True
- reload: True

test

6 配置管理 jinja模板

需求:配置文件,监听minion自己本地的ip地址

1.学习方法

1 官方文档

https://docs.saltstack.com/en/latest/contents.html

2 配置管理

https://docs.saltstack.com/en/latest/topics/states/index.html

3 file模块

https://docs.saltstack.com/en/latest/ref/states/all/index.html#all-salt-states

4 搜索jinja

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#module-salt.states.file

2.jinja

Salt默认模板 jinja2

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。

http://docs.jinkan.org/docs/jinja2/templates.html

两种分隔符: {% ... %} 和 {{ ... }} 。

前者用于执行诸如 for 循环 或赋值的语句,

后者把表达式的结果打印到模板上

如何区分这是一个模板

3. 如何配置jinja?

1. 修改模板配置文件

2 修改sls增加

conf配置

[root@linux-node1 apache]# pwd
/srv/salt/prod/apache [root@linux-node1 apache]# vim files/httpd.conf
Listen {{ IPADDR }}:{{ PORT }}

sls

3.验证

[root@linux-node1 apache]# salt -S '192.168.194.131' state.highstate

[root@linux-node1 apache]# vim /etc/httpd/conf/httpd.conf

另一个方法:(不推荐)

7. job管理

执行1次highstate,会产生1个任务

最近干了什么事

装某个东西,太慢了给我,停止

1.查看job

[root@linux-node1 ~]# cd /var/cache/salt/master/jobs/
[root@linux-node1 jobs]# ls
0d 5a 7e 8d 9a a5 b4 c0 cd df ea f6
0e 1a 5b 8e 9b a7 b6 c2 cf e0 eb f8
0f 1b 5c 8f 9d a8 b8 c4 d2 e1 ec f9
1c 2a 5d 9e a9 b9 c5 d3 e2 ee fa
1e 2b 5e 9f aa ba c6 d4 e3 f0 fb
1f 2c 5f 6a a0 ab bb c7 d5 e4 f1 fc
2e 3a 4a 6b a1 ac bc c8 d7 e5 f2 fe
0a 2f 3b 4c 6c 7a a2 ad bd c9 d9 e7 f3 ff
0b 3d 4d 6e 7b 8a a3 ae be ca da e8 f4
0c 3f 4e 7c 8c a4 b3 bf cc dd e9 f5 [root@linux-node1 jobs]# cd 6c/
[root@linux-node1 6c]# ls
210bdfecd6c424d9d7e1c5bbe2f171 53117bf95a2bea7fbf2d81c8c471ce
[root@linux-node1 6c]# ll 210bdfecd6c424d9d7e1c5bbe2f171/
total
-rw-r--r--. root root Jul : jid
drwxr-xr-x. root root Jul : linux-node1.example.com
[root@linux-node1 6c]# cd 210bdfecd6c424d9d7e1c5bbe2f171/
[root@linux-node1 210bdfecd6c424d9d7e1c5bbe2f171]# cat jid
[root@linux-node1 210bdfecd6c424d9d7e1c5bbe2f171]# tree
.
├── jid
└── linux-node1.example.com
├── out.p
└── return.p directory, files

缓存时间默认24h

[root@linux-node1 ~]# vim /etc/salt/master

2.saltutil模块.job

远程执行

https://docs.saltstack.com/en/latest/topics/execution/index.html

执行模块

https://docs.saltstack.com/en/latest/ref/modules/all/index.html#all-salt-modules

Saltutil

https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.saltutil.html#module-salt.modules.saltutil

Test

[root@linux-node1 ~]# salt 'linux-node2*' cmd.run 'sleep 160'

[root@linux-node1 ~]# salt \* saltutil.running

[root@linux-node1 ~]# salt 'linux-node2*' saltutil.kill_job 20190731050029734898

案例:每5分钟给所有机器跑一下状态

8.总结

1. 作业:saltstack部署redis主从配置

init.sls

[root@linux-node1 redis]# pwd
/srv/salt/prod/redis
[root@linux-node1 redis]# tree
.
├── files
│   └── redis.conf
├── init.sls
├── master.sls
└── slave.sls 1 directory, 4 files
[root@linux-node1 redis]# vim init.sls
redis-install:
pkg.installed:
- name: redis redis-config:
file.managed:
- name: /etc/redis.conf
- source: salt://redis/files/redis.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
PORT: 6379
IPADDR: {{ grains['fqdn_ip4'][0] }} redis-service:
service.running:
- name: redis
- enable: True
- reload: True
- watch:
- file: redis-config

conf

[root@linux-node1 redis]# cp /etc/redis.conf files/
bind {{ IPADDR }}
port {{ PORT }}
daemonize yes

master

slave

[root@linux-node1 redis]# vim master.sls
include:
- redis.init [root@linux-node1 redis]# vim slave.sls
include:
- redis.init slave-config:
cmd.run:
- name: redis-cli -h 192.168.194.131 slaveof 192.168.194.132 6379
- unless: redis-cli -h 192.168.194.132 info |grep role:slave
- require:
- service: redis-service

node2上实验命令

[root@linux-node2 modules]# redis-cli -h 192.168.194.132 info

[root@linux-node2 modules]# redis-cli -h 192.168.194.132 slaveof 192.168.194.131 6379

[root@linux-node2 modules]# redis-cli -h 192.168.194.132
192.168.194.132:6379> info [sectio

不需要unless

执行top

[root@linux-node1 base]# vim top.sls
prod:
'linux-node1.example.com':
- lamp
- redis.master
'linux-node2.example.com':
- lamp
- redis.slave
[root@linux-node1 base]# pwd
/srv/salt/base [root@linux-node1 redis]# salt \* state.highstate

设置node2为主

[root@linux-node2 modules]# redis-cli -h 192.168.194.132
192.168.194.132:6379>
192.168.194.132:6379> slaveof no one
OK

unless应用

[root@linux-node2 modules]# redis-cli -h 192.168.194.132 info |grep role:slave
role:slave
[root@linux-node2 modules]# echo $?
0

Watch

生产不要watch

生产 test=True

不用* 用1个节点

1.学习saltstack思路:三段式

2.学习模块方法

1 官方文档

https://docs.saltstack.com/en/latest/contents.html

2 配置管理

https://docs.saltstack.com/en/latest/topics/states/index.html

3 file模块

https://docs.saltstack.com/en/latest/ref/states/all/index.html#all-salt-states

4 搜索jinja

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#module-salt.states.file

5 LAMP配置管理:模块(state、file、pkg、service)、jinja模板、job管理、redis主从的更多相关文章

  1. 架构师成长之路5.3-Saltstack配置管理(State状态模块)

    点击架构师成长之路 架构师成长之路5.3-Saltstack配置管理(State状态模块) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要 ...

  2. [ionic开源项目教程] - 第12讲 医疗模块的实现以及Service层loadMore和doRefresh的提取封装

    关注微信订阅号:TongeBlog,可查看[ionic开源项目]全套教程. 这一讲主要实现tab2[医疗]模块,[医疗]模块跟tab1[健康]模块类似. [ionic开源项目教程] - 第12讲 医疗 ...

  3. Ansible笔记(7)---常用模块之系统类模块(cron、service)

    一.cron模块 1.1作用: cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令. 在了解cron模块的参数之前,先写出一些计划任务的示例: # 示例1,每天的1点 ...

  4. Saltstack_使用指南12_配置管理-jinja模板

    1. 说明 下文的案例是根据上一篇文章进行的修改.因此请优先读取上一章博文内容<Saltstack_使用指南11_配置管理-状态之间依赖关系> 2. 主机规划 salt 版本 [root@ ...

  5. 【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一. 目标 使用Redis做分布式缓存:使用lua API来访问redis缓存:使用nginx向客户端提 ...

  6. 架构师成长之路5.6-Saltstack配置管理(jinja模板)

    点击架构师成长之路 架构师成长之路5.6-Saltstack配置管理(jinja模板) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要FU ...

  7. 把编译安装的httpd 实现服务脚本,通过service和chkconfig 进行管理

    把编译安装的httpd 实现服务脚本,通过service和chkconfig 进行管理 1 编译安装httpd 把httpd编译安装在/app/httpd/目录下. 2 在/etc/rc.d/init ...

  8. SaltStack配置管理-jinja模板

    上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...

  9. 为windows开启winrm service, 以便进行远程管理

    为windows开启winrm service, 以便进行远程管理   是windows 一种方便远程管理的服务:开启winrm service,便于在日常工作中,远程管理服务器,或通过脚本,同时管理 ...

随机推荐

  1. 小菜鸟之HTML常用

    html的基本结构是什么? 表示段落标签是什么?<p> 表示标题标签的是什么?<title>Css标签样式</title> 表示区域标签的是什么?<div&g ...

  2. extern int PASCAL

    表示声明一个变量,这个变量在其他地方已经定义,但是这里因为要使用,所以声明下. 写成下面: extern “C” int PASCAL: 说明PASCAL是在一个C文件下定义的.如果不是在C下就不用加 ...

  3. 输出1-n的全排列dfs

     https://ac.nowcoder.com/acm/contest/998/C #include<stdio.h> #include<iostream> #include ...

  4. 技能节-AI人脸识别

    我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...

  5. tomcat 虚拟目录 连接池

  6. 【原创】大数据基础之Logstash(6)mongo input

    logstash input插件之mongodb是第三方的,配置如下: input { mongodb { uri => 'mongodb://mongo_server:27017/db' pl ...

  7. 客户端相关知识学习(八)之Android“.9.png”

    参考 Android中.9图片的含义及制作教程 .9.png Android .9.png 的介绍

  8. luogu题解P4198楼房重建--线段树神操作

    题目链接 https://www.luogu.org/problemnew/show/P4198 分析 一句话题意,一条数轴上有若干楼房,坐标为\(xi\)的楼房有高度\(hi\),那么它的斜率为\( ...

  9. 防止表单提交时刷新页面-阻止form表单的默认提交行为

    最近在写 ajax 提交的时候遇到一个问题,在执行 ajax 提交之后,浏览器页面自动刷新了,主要是没有 由于form 表单的默认提交行为.一下是几种阻止 form 表单默认提交行为的方式. 1.使用 ...

  10. TVM调试指南

    1. TVM安装 这部分之前就写过,为了方便,这里再复制一遍. 首先下载代码 git clone --recursive https://github.com/dmlc/tvm 这个地方最好使用--r ...