Saltstack 原理node
Saltstack由Master和Minion构成,master是服务端,表示一台服务器;minion是客户服务端,表示多台服务器。在Master 上发送命令给符合条件的 Minion,Minion 就会执行响应的命令,Master和Minion之间经过ZeroMQ(消息队列)进行通讯。
Saltstack的master端监听4505和4506端口,4505为master和 Minion 认证通讯端口,4506为 Master 用来发送命令或接收Minion的命令执行返回信息。
当客户端启动后,会主动链接 Master 端注册,而后一直保持该TCP链接,而 Master 经过这条TCP链接对客户端进行控制。若是链接断开,Master 对客户端将不能进行控制。可是,当客户端检查到链接断开后,会按期向 Master 端请求注册链接。python
Saltstack 经常使用模块ios
Saltstack 提供了很是多的功能模块,以便于对操做系统的基础功能和经常使用工具的操做。web
(1)pkg 模块正则表达式
pkg 模块的做用是包管理,包括增删更新。apache
(2)file 模块vim
file 模块的做用是管理文件操做,包括同步文件、设置文件权限和所属用户组、删除文件等操做。centos
(3)cmd 模块api
cmd 模块的做用是在 Minion 上执行命令或脚本。服务器
(4)user 模块
user 模块的做用是管理系统帐户操做。
(5)service 模块
service 模块的做用是管理系统服务操做。
(6)cron 模块
cron 模块的做用是管理 cron 服务操做。
部署环境
三台服务器参数如表所示。
角色 主机名 ip地址 所需的软件包 master master.saltstack.com 192.168.66.140 saltstack-master minion web01.saltstack.com 192.168.66.143 saltstack-minion minion web02.saltstack.com 192.168.66.144 saltstack-minio
操做步骤
一 . 部署前的准备工做。
1. 更改主机名,修改 hosts 文件(分别在三台服务器上操做),配置完成后,从新启动主机,主机名才能够生效。
vim /etc/hostname
master.saltstack.com[root@localhost ~]# vim /etc/hosts
192.168.66.140 master.saltstack.com
192.168.66.143 web01.saltstack.com
192.168.66.144 web02.saltstack.com
关闭防火墙
[root@master ~]# systemctl stop firewalld.service
[root@master ~]# setenforce 0
2.在三台服务器上都须要安装 epel 源,由于后面须要安装 Saltstack 服务端和客户端。
[root@master ~]# yum install epel-release –y
[root@web01 ~]# yum install epel-release -y
[root@web02 ~]# yum install epel-release –y
二 . 部署 Saltstack 主控端(也就是master)。
1 . 部署 salt-master 软件包
[root@master ~]# yum install salt-master –y
2.配置主控端配置文件 /etc/salt/master
[root@master ~]# vim /etc/salt/master
15 interface: 192.168.66.140 //修改监听地址(master)
215 auto_accept: True
修改第215行的主控端会自动认证被控端的认证,只有被控端在设置完主控端的 IP 地址后启动服务,主控端就会运行被控端自动认证,以免之后每次都须要运行 salt-key 来确认证书信任。
416 file_roots: //saltastack 文件根目录位置,注意这个目录默认是没有的,须要建立。
417 base:
418 - /srv/salt710 nodegroups: //修改组分类
711 group1: 'web01.saltstack.com'
712 group2: 'web02.saltstack.com'552 pillar_opts: True //开启 pillar 功能
529 pillar_roots: //pillar 的主目录,注意这个目录默认是没有的,需哟建立。
530 base:
531 - /srv/pillar
过滤查看修改的配置文件内容
[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.66.140
auto_accept: True
file_roots:
base:
- /srv/salt
pillar_roots:
base:
- /srv/pillar
pillar_opts: True
nodegroups:
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
3.主控端作完上述操做后启动 salt-master 服务,并查看端口
[root@master ~]# systemctl start salt-master
[root@master ~]# netstat -ntap | egrep '4505|4506'
tcp 0 0 192.168.66.140:4505 0.0.0.0:* LISTEN 1987/python
tcp 0 0 192.168.66.140:4506 0.0.0.0:* LISTEN 2001/python
建立 salt 文件根目录及 pillar 目录
[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar
三 . 部署 Saltstack 被控端 (也就是两台 minion)
1.安装 salt-minion 软件包
[root@web01 ~]# yum install salt-minion –y
2 . 配置两台被控端配置和文件 /etc/salt/minion
[root@web01 ~]# vim /etc/salt/minion
16 master: 192.168.66.140 //指定主控端 IP
78 id: web01.saltstack.com //指定被控主机名,另外一台是 web02.saltstack.com
3. 分别启动两台被控端服务
[root@web01 ~]# systemctl start salt-minion.service
[root@web02 ~]# systemctl start salt-minion.service
此时控制端和被控制端的配置以及完成,并启动服务。在主控端上作一个简单测试一下主控端和被控端的通讯状态,若是返回都是True ,则说明正常。注意这里的 ping 和咱们日常的 ping 命令不一样,它只是 test 类下面的一个方法而已,用来验证主控端和被控端的通讯状态。注意 * 表示全部经过认证的被控端,还能够支持其余不少正则表达式的匹配。
[root@master ~]# salt '*' test.ping
web02.saltstack.com:
True
web01.saltstack.com:
True
查看秘钥
[root@master ~]# salt-key
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
查看被控端主机挂载状况
[root@master ~]# salt '*' cmd.run 'df –h' //使用 cmd 模块
web02.saltstack.com:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 3.5G 17G 18% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 12K 993M 1% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda5 5.0G 33M 5.0G 1% /opt
/dev/sda3 10G 37M 10G 1% /home
/dev/sda1 997M 158M 839M 16% /boot
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 199M 0 199M 0% /run/user/0
web01.saltstack.com:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 3.8G 17G 19% /
devtmpfs 978M 0 978M 0% /dev
tmpfs 993M 12K 993M 1% /dev/shm
tmpfs 993M 9.0M 984M 1% /run
tmpfs 993M 0 993M 0% /sys/fs/cgroup
/dev/sda3 10G 37M 10G 1% /home
/dev/sda1 1014M 158M 857M 16% /boot
/dev/sda5 10G 33M 10G 1% /opt
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 199M 0 199M 0% /run/user/0
经过下面的命令能够查看被控机 web01 主机上的 grains 全部值
[root@master ~]# salt 'web01.saltstack.com' grains.items
web01.saltstack.com:
----------
SSDs:
biosreleasedate:
05/19/2017
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- mm…….
grains 是 Saltstack 的重要组件之一,能够收集被控主机的基本信息,如 cpu 、内核、操做系统、虚拟化等静态数据。在服务端能够利用这些信息对不一样被控主机进行个性化配置。
四 . Saltstack 批量部署 apache(在控制端)
[root@master srv]# vim /srv/salt/top.sls // 在 /srv/salt 目录下,建立管理性文件 top.sls ,文件名以sls结尾
base: //基本操做
'*': //表示全部被控主机
- apache //全部主机执行 apache注意:‘*’ ,表示在全部的客户端执行 apache 模块
在建立一个 apache.sls 文件
[root@master srv]# vim apache.sls
apache-service:
pkg.installed: //执行apache 的安装操做
- names: //须要安装的软件包有 httpd 、httpd-devel
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
重启服务
[root@master salt]# systemctl restart salt-master
在主控端执行刷新state 配置命令,让两台被控端去执行安装 apache
[root@master salt]# salt '*' state.highstate
web01.saltstack.com:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: The following packages were installed/updated: httpd
Started: 13:44:05.771181
Duration: 56803.894 ms
Changes:……….
web02.saltstack.com:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: The following packages were installed/updated: httpd
Started: 13:44:05.140861
Duration: 87107.738 ms
Changes:
在被控制端查看安装状况
[root@web01 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web01 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2018-10-25 13:45:59 CST; 6min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 38811 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─38811 /usr/sbin/httpd -DFOREGROUND
├─38812 /usr/sbin/httpd -DFOREGROUND
├─38813 /usr/sbin/httpd -DFOREGROUND
├─38814 /usr/sbin/httpd -DFOREGROUND
├─38815 /usr/sbin/httpd -DFOREGROUND
└─38816 /usr/sbin/httpd -DFOREGROUND10月 25 13:45:59 web01.saltstack.com systemd[1]: Starting The Apache HTT...
10月 25 13:45:59 web01.saltstack.com systemd[1]: Started The Apache HTTP...
Hint: Some lines were ellipsized, use -l to show in full.[root@web02 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
总结:
Saltstack 由 Master 和 Minion 构成,Master 和 Minion 之间经过消息队列 (ZeroMQ) 进行通讯。
Saltstack 的模块有 pkg、file、cmd、user、service、cron 。
定义的属性值若是是常常发生变化的,采用 pillar ;若是很固定、不易改变的,采用 grains 。
state 是 Saltstack 最核心模块的功能,经过预先定制好的 sls 文件 (salt state file ),对被控主机进行管理,如程序包、文件、网络配置、系统服务、系统用户等。