Saltstack 自动化管理系统
1. 简介
- Saltstack是基于python开发的一套C/S架构配置管理工具
- 使用SSL证书签方的方式进行认证管理
底层使用ZeroMQ消息队列pub/sub方式通信
- 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作
- 采用RSA Key方式确认身份
Saltstack基于C/S架构
- 服务器端称作Master
- 客户端称作Minion
- 可以实现传统处理方式,即:客户端发送请求给服务器,服务器收到请求后处理请求,再将结果返回
- 也可以使用消息队列中的发布与订阅(pub/sub)服务模式
- Saltstack工作机制
• Master和Minion都以守护进程的方式运行
• Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
• 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
• 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了
2. 进行软件的安装下载
1. 所需安装包及依赖性
可通过配置yum源为:https://repo.saltstack.com/yum/redhat/ 进行联网在线安装
master
[root@server1 ~]# yum install -y salt-master
配置文件为 /etc/salt/master
启动服务
[root@server1 ~]# /etc/init.d/salt-master start
minion
[root@server2 ~]# yum install -y salt-minion
编辑配置文件/etc/salt/minion 进行,进行 master 指定
[root@server2 ~]# vim /etc/salt/minion
添加如下内容:
#master: salt
master: 172.25.21.1 # 指定master,可用IP,支持域名解析
启动minion
[root@server2 ~]# /etc/init.d/salt-minion start
2. 进行公钥交换
启动后,minion 会自动向master 发送key,但master默认是不会接收的,需要进行手动接收
执行如下:
[root@server1 ~]# salt-key -L
Accepted Keys: # 接收的公钥
Denied Keys: # 拒绝的公钥
Unaccepted Keys: # 未接收的公钥
server2 # 主机名
Rejected Keys: # 拒绝的公钥
手动进行添加:
[root@server1 ~]# salt-key -A
# -A 表示接收所有请求公钥
# -a 表示指定进行接收
The following keys are going to be accepted:
Unaccepted Keys:
server2
Proceed? [n/Y] y
Key for minion server2 accepted.
[root@server1 ~]# salt-key -L
Accepted Keys:
server2 # server2已建立连接
Denied Keys:
Unaccepted Keys:
Rejected Keys:
继进行ping测试:
[root@server1 ~]# salt server2 test.ping
server2:
True # 可ping通
连接建立完成
其简单的信息介绍
数据缓存在 var/cache/salt
公钥存放在/etc/salt/pki
工作端口 4505:长连接端口
4506:发布订阅端口
再master端的cache中进行记录,每次提交的信息都会被记录
zmq(zreoMQ)
消息队列(pub/sub)
将控制文件,发送到所有的minion端,并以以超级用户的身份进行
3. 进行具体配置
进行简单的模块调用,类是于ansible的playbook
salt有自己的.sls文件,通过state模块进行执行
Salt运行一个用zeromq编写的轻量级文件服务器,将文件交付给zeromq
#仆从。这个文件服务器内置在主守护进程中,而不是
需要专用端口。
修改master配置文件,指定files的base目录
[root@server1 ~]# vim /etc/salt/master
# 编辑 master 主配置文件
534 file_roots: #
535 base:
536 - /srv/salt
[root@server1 ~]# /etc/init.d/salt-master restart
# 编辑完成,重启服务
编辑.sls文件,进行命令下达(以安装配置mysql服务为例)
建立指定目录与文件
[root@server1 ~]# mkdir /srv/salt
[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# mkdir mysql
[root@server1 salt]# ls
mysql
[root@server1 salt]# cd mysql/
[root@server1 mysql]# ls
进行编辑:
[root@server1 mysql]# vim install.sls
内容如下:
mysql,apache-install: # 指定名称
pkg.installed: # 调用模块
- pkgs: # 多安装包安装
- mysql-server # 安装包名称
- httpd # 安装包名称
file.managed: # 指定监控的文件
- name: /etc/my.cnf # 文件名,minion端的
- source: salt://mysql/files/my.cnf # 同步的源头,master端进行
- mode: 644 # 权限
- user: root # 用户
service.running: # 服务状态模块
- name: mysqld # 服务名称
- enable: True # 允许开机自启动
- restart: True # 是否重新启动以加载配置文件
- watch: # 监控文件
- file: mysql,apache-install
编辑完成,执行命令向minion推送
[root@server1 ~]# salt server2 mysql.install
2. Grains组件
- GRAINS组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者重新同步下 grains。除此之外我们还可以自定义Grains的一些信息。自定义的方法有三种:1、通过Minion配置文件定义;2、通过Grains相关模块定义;3、通过python脚本定义
1、查看Grains相关的命令及用法
[root@server1 salt]# salt server2 sys.list_functions grains
server2:
- grains.append
- grains.delval
- grains.fetch
- grains.filter_by
- grains.get
- grains.get_or_set_hash
- grains.has_value
- grains.item
- grains.items
- grains.ls
- grains.remove
- grains.set
- grains.setval
- grains.setvals
每个命令的帮助信息又可以通过sys.doc查看,如下:
[root@server1 salt]# salt server2 sys.doc grains.items
grains.items:
Return all of the minion's grains
CLI Example:
salt '*' grains.items
Sanitized CLI Example:
salt '*' grains.items sanitize=True
指定某一项进行查看
[root@server1 salt]# salt server2 grains.item ipv4
server2:
----------
ipv4:
- 127.0.0.1
- 172.25.25.2
2.自定义Grains
1.通过Minion配置文件配置
在Minion端我们可以通过查看/etc/salt/minion配置文件中,查找grains可以查看到相关注释的示例。不过便于配置管理,我们不一般不会选择在该文件上进行修改,而在minion include的目录下/etc/salt/minion.d目录下单独创建grains.conf文件。就以官方给出的示例,将minion配置文件中配置示例复到/etc/salt/minion.d/grains.conf中,并将注释去掉,如下:
[root@server2 ~]# vim /etc/salt/minion.d/grain.conf
grains:
roles:
- webserver
编辑完成,重启服务
[root@server2 ~]# /etc/init.d/salt-minion restart
在server端进行查看
[root@server1 salt]# salt server2 grains.item roles
server2:
----------
roles:
- webserver
执行如下:
2. 使用自定义python脚本获取grains信息
默认自定义脚本需要存放在master的/srv/salt/_grains目录下,这里使用mkdir -p创建即可。
#!/usr/bin/python
def test_grains():
grains = {}
grains['test1'] = '111'
grains['test2'] = '222'
return grains
使用sync_grains命令同步脚本到minion主机上去,并通过grains.item命令获取相关信息即可,如下:
[root@server1 _grains]# salt server2 saltutil.sync_grains
server2:
- grains.test_grains
进行调用:
[root@server1 _grains]# salt server2 grains.item test1
server2:
----------
test1:
111
3. 通过Grains模块定义Grains
进行定义
[root@server1 _grains]# salt server2 grains.append test3 '333'
server2:
----------
test3:
- 333
调用
[root@server1 _grains]# salt server2 grains.item test3
server2:
----------
test3:
- 333
会在minion主机端生成配置文件grains
grains配置优先级顺序为/etc/salt/minion.d/grains.conf (或/etc/salt/minion) > master端自定义grains脚本(minion端/var/cache/salt/minion/extmods/grains目录下) > Grains模块定义Grains (/etc/salt/grains) 。