如何在智能告警平台CA触发测试告警
795
2022-10-03
干货篇 | 自动化运维工具-saltstack(中)
在上一篇文章《干货篇 | 自动化运维工具-saltstack(上)》中,向大家介绍了saltstack是什么,它与ansible的区别以及部署了一台master和两台minion
那么今天我将继续为大家介绍saltstack
话不多说,开始进入正题
基础命令
salt
用来执行salt命令,通常在master端运行。
salt [option] '
#查看帮助文档salt -dsalt '*' sys.docsalt 'x' sys.doc test#查看service相关模块命令salt -d | grep service#获取主机所有服务salt '*' service.get_all#重载sshd服务salt '*' service.reload sshd#显示软件包版本列表salt '*' pkg.list_pkgs#显示软件包版本信息salt '*' pkg.version python#安装软件包salt '*' pkg.install httpd#查看mysql服务状态salt 'node1.com' service.status mysql#启动mysql服务salt 'node1.com' service.start mysql#与上面一样查看服务salt 'node1.com' cmd.run 'service mysql status'#模块列表salt '*' sys.list_modules#把salt-master端相应的文件,分发文件到minion端salt '*' cp.get_file salt://ceshi/b tmp/test#把salt-master端相应的目录,分发文件到minion端salt '*' cp.get_dir salt://zabbix tmp#把salt-master端对应文件拷贝到minion端相应目录下salt '*' file.copy tmp/zabbix.sls tmp/sls#远程命令执行测试salt '*' cmd.run 'uptime'#查看grains分类salt '*' grains.ls#查看grains所有信息salt '*' grains.items#查看grains某个信息salt '*' grains.item osrelease
salt-run
saltstack提供了Runners的功能,使用salt-run来运行,可以非常方便地在Master端执行相关的模块,获取minion端状态。salt-run下的很多模块我们用不到,多数我们可以通过salt命令就已经完成工作需要
常用的runner有manage
#查看存活的minionsalt-run manage.up#查看死掉的minionsalt-run manage.down#查看down掉的minion,并将其删除salt-run manage.down removekeys=True#查看minion的相关状态salt-run manage.status#查看slat的所有master和minion的版本信息salt-run manage.versions
salt-key
用于密钥管理,来决定master与minion之间的通信,通常在master端执行
salt-call
在minion执行,minion执行自己可以执行的模块,而不是通过master下发job
salt-call [options]
salt-cp
通过salt-cp可以将master上的文件下发到minion上
salt-cp [options] '
分组管理
在生产环境中我们可能要管理上百台服务器,有些服务器用来做数据库,有些服务器用来实现web服务,有些做负载均衡......
我们如果想对web服务器做批量操作的话,而web服务器又有几十台,我们是不可能将这几十台服务器的ip地址全都敲进命令里的,这样会大大降低运维效率
我们可以对这些服务器做分组,用来做负载均衡的分成一组、做web服务的分成一组,那么我们操作时只需要指定组名就可以了
在saltstack里我们一般用nodegroups来实现分组管理
Nodegroups
我们通过创建nodegroups配置文件来实现分组管理,配置文件的路径为
etc/salt/master.d/nodegroups.conf
对目标服务器分组有以下七种方式,这七种方式的标示符分别为
G -- 针对 Grains 做单个匹配,例如:G@os:UbuntuE -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).locP -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com orbl*.domain.com 使用 L 列表的方式,必须把 minion 列出来,或者是列出几台后,在后面接 or 或者 and 表达式, or 或者 and 后面接的表达式后面可以使用正则表达式。I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobarS -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100R -- 针对客户端范围做匹配,例如:R@%foo.barN -- 针对 nodegroup 做匹配
如果说我有多个分组,可以按照下列格式进行配置
[root@master ~]#vim etc/salt/master.d/nodegroups.confnodegroups:group1: 'L@192.168.244.128,192.168.244.130'group2: 'L@192.168.244.100'group3: 'S@192.168.64.0/24'group4: 'E@192.168.64.12[2-3]'[root@master ~]#salt -N group1 test.ping
案例:
[root@master ~]# vim etc/salt/master.d/nodegroup.confnodegroups: web: 'L@192.168.244.128,192.168.244.129' [root@master ~]# salt -N web test.ping192.168.244.129: True192.168.244.128: True
或者通过E匹配模式来做分组管理
[root@master ~]# vim etc/salt/master.d/nodegroup.confnodegroups: group1: 'E@192.168.244.12[8-9]'[root@master ~]# salt -N group1 test.ping192.168.244.129: True192.168.244.128: True
SLS
SLS(Salt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,SLS文件由格式简单的数据构成,经常被称作配置管理
SLS文件以“.sls”后缀结尾,但在调用时不需要写后缀
1.YAML
SLS配置文件采用YAML的格式编写
下面是YAML格式的一些要求
.在YAML中不要使用Tab键来作为缩进.YAML推荐缩进为2个空格,’ : ’ , ’ - ’后面缩进1个空格再写数字会解析成数字。如mode: 0644会解析成mode: 644,可用单引号括起来防止mode: ’0644ʹ此情况.YAML不允许双简写下划线将会被删除。有出现下划线要用 " " 括起来
基本格式例子
http-install: pkg: - installed#第一行被称为标签定义,在这里被定义为安装包的名#第二行被称为状态定义,在这里定义使用module#第三行被称为函数定义,在这里定义使用调用函数
SLS配置文件在master上,默认路径是在/srv/salt/下面,使用子目录来管理是个很好的选择,init.sls在一个子目录里面表示引导文件,也就表示子目录本身,所 以 apache/init.sls 就是表示 apache
例如文件树如下所示:
[root@master ~]#tree /srv/salt/apache| --install.sls||--_modules
#第一种写法[root@master ~]# salt “*” state.sls apache/install#第二种写法[root@master ~]# mv install.sls init.sls[root@master ~]# salt “*” state.sls apache#同时存在apache/apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache/srv/salt/apache| --install.sls|| --apache.slssalt “*” state.sls apache #优先读取apache.sls此文件
2.常用模块
用户管理
创建用户
useradd: user.present: -name: admin - shell: bin/bash - home: home/admin - uid: 888
删除用户
userdel: user.absent: - name: admin - purge: True #purge类似userdel -r - force: True #force为用户在线也强制删除
文件管理
上传文件
fileup: file.managed: - source: salt://nginx/nginx-xxx.xxx.tar.gz - user: root - group:root - mode: 755 - backup:minion - template:jinja
追加文件
fileadd: file.append: - text: - "exportJAVA_HOME=/usr/local/jdk1.6.0_13" - "exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH" - "exportCLASSPATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/lib:$CLASSPATH"
目录管理
目录覆盖
dircover: file.recurse: -source: salt://nginx/conf -user: root -group: root -file_mode: 644 -dir_mode: 755
目录创建
diradd: file.directory: - name: tmp/dir - user: web - group: web - file_mode:644 - dir_mode:755 - makedirs:True - include_empty: True - template:jinja - backup:minion
包管理
yum安装
installpkgs: pkg.installed: - pkgs: - httpd - telnet
3.逻辑关系
继承(include)
include: - web.apache
依赖(require)
- require: - pkg: nginx-install
监控(watch)
在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
- watch: - file: etc/nginx/nginx.conf - file: etc/nginx/fastcgi.conf - pkg: nginx
顺序(order)
优先级比require和watch低,有order指定的state比没有order指定的优先级高,假如一个state模块内安装多个服务,或者其他依赖关系,可以使用。如果想让某个state最后执行,可以使用last。
nginx: pkg.installed: - order:1
4.SLS文件执行顺序
top.sls
top.sls 是配置管理的入口文件,一切都是从这里开始,在master主机上默认路径为/srv/salt/目录
top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名,来进行匹配,再下一级是要执行的state文件,不包换扩展名
一般对minion进行初始化操作时用top.sls比较多
通过正则进行匹配的示例
[root@master ~]# vim srv/salt/top.slsbase: '*': - tengine [root@master ~]# salt '192.168.244.128' state.highstate
通过分组名进行匹配的示例(必须要有 - match: nodegroup)
base: group1: - match: nodegroup - web
通过grain模块匹配的示例(必须要有- match: grain)
base: 'os:Fedora': - match: grain - web
init.sls
init.sls在一个子目录里面表示引导文件,我们可以在init.sls里面通过include模块来决定sls文件执行顺序
include: - tengine.make - tengine.install
案例
文件树如下
[root@master ~]# tree /srv/salt/tengine| --top.sls| --init.sls| --install.sls| --make.sls| --files | --tengine-2.3.1.tar.gz
top.sls
base: '*': - tengine
init.sls
include: - tengine.make - tengine.install
make.sls
pkg-init: pkg.installed: - pkgs: - automake - gcc-c++ - zlib-devel - openssl-devel - pcre-devel
install.sls
include: - tengine.maketengine_source: file.managed: - name: /tmp/tengine-2.3.1.tar.gz - unless: test -e /tmp/tengine-2.3.1.tar.gz - source: salt://tengine/files/tengine-2.3.1.tar.gzextract_tengine: cmd.run: - cwd: /tmp - names: - tar zxf tengine-2.3.1.tar.gz - unless: - test -d tengine-2.3.1 - require: - file: tengine_sourcetengine_compile: cmd.run: - cwd: /tmp/tengine-2.3.1 - names: - ./configure --prefix=/usr/local/tengine && make && make install - require: - cmd: extract_tengine - unless: test -d /usr/local/tengine
执行命令
salt '192.168.244.128' state.highstate
总结今天向大家介绍了saltstack的一些基础命令,如何实现分组管理以及SLS相关内容
下一篇我将为大家介绍saltstack中的Grains和Pillar
发表评论
暂时没有评论,来抢沙发吧~