- A+
1. SaltStack简介
SaltStack是一个自动化管理工具之一,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。是使用Python语言开发的,同事提供Rest API方便二次开发以及河其他人平台进行集成。
SaltStack常用网址:
• 官方网站: http://www.saltstack.com
• 官方文档: http://docs.saltstack.com
• GitHub: https://github.com/saltstack
• 中国SaltStack用户组: http://www.saltstack.cn
https://www.unixhot.com/docs/saltstack/
https://www.unixhot.com/docs/saltstack/ref/states/all/index.html#all-salt-states
1.1 SaltStack四大功能
• 远程执行
• 配置管理
• 云管理
• 事件驱动(事件通知)
1.2 SaltStack的三种运行方式
• Local
• Master/Minio
• Salt SSH
1.3 SaltStack支持的操作系统
CentOS |
Debian |
Solaris |
RedHat |
Ubuntu |
FreeBSD |
Fedora |
Gentoo |
Gentoo |
MAC OS X |
Archlinux |
Windows |
Suse |
|
|
|
|
|
1.4. salt消息队列
master/minion发消息原理:
在启动master和minion后,master会启动两个端口而minion端不会起端口,master起的两个端口分别为4505和4506,salt默认用的一个消息队列,叫做zeromq(消息队列)。
在装salt时默认会装一个zeromq的包,所有minion都会连接到salt的4505的这个端口上,4505端口是salt的消息发布系统,4506是salt客户端与服务端通信的端口,通过lsof命令查看本机4505建立的连接:
[root@linux-node1 ~]# lsof -n -i:4505 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME salt-mast 18777 root 16u IPv4 59401 0t0 TCP *:4505 (LISTEN) salt-mast 18777 root 18u IPv4 65316 0t0 TCP 192.168.56.11:4505->192.168.56.11:57373 (ESTABLISHED) salt-mast 18777 root 19u IPv4 65454 0t0 TCP 192.168.56.11:4505->192.168.56.12:59227 (ESTABLISHED) salt-mini 20040 root 27u IPv4 65315 0t0 TCP 192.168.56.11:57373->192.168.56.11:4505 (ESTABLISHED)
1.5 master/minion之间的认证
(1). minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和 minion.pub(public key),然后将 minion.pub发送给master。
(2). master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了
2. SaltStack安装部署
2.1 本次安装机器环境
角色 |
主机名 |
IP |
系统 |
Master/Minion |
linux-node1.example.com |
192.168.56.11 |
CentOS-7.3 |
Minion |
linux-node2.example.com |
192.168.56.12 |
CentOS-7.3 |
注意:以下主机简称node1和node2
2.2 部署验证
1. 在node1和node2上yum安装master/minion端
##在两台机器上安装源 rpm -ivh https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm ##在node1上安装 yum -y install salt-master salt-minion rpm -qa|grep salt-master rpm -qa|grep salt-minion ##在node2上安装 yum -y install salt-minion rpm -qa|grep salt-minion
2. 配置
##配置node1和node2的salt-minion配置文件指向master [root@linux-node1 salt]# vim /etc/salt/minion #master: salt #<== 大概16行,打开注释,改为 master: 192.168.56.11 (注意YAML语法格式) [root@linux-node2 salt]# vim /etc/salt/minion #master: salt #<== 大概16行,打开注释,改为 master: 192.168.56.11 (注意YAML语法格式)
3. 启动node1和node2上的master/minion
systemctl start salt-master.service systemctl start salt-minion.service
说明:当salt-minion的端启动的时候会将自己的公钥发给salt-master端,公钥会存放在master端的/etc/salt/pki/master/minions_pre/目录下,并以minion端ID命名。所以说如果修改领ID,这里也要将对应的公钥删除重新生成。
4. master管理验证
[root@linux-node1 ~]# salt-key #<== 查看有哪些要被验证管理的minion端 Accepted Keys: Denied Keys: Unaccepted Keys: linux-node1.example.com linux-node2.example.com Rejected Keys:
[root@linux-node1 ~]# salt-key -A #<== 同意所有验证 The following keys are going to be accepted: Unaccepted Keys: linux-node1.example.com linux-node2.example.com Proceed? [n/Y] Y Key for minion linux-node1.example.com accepted. Key for minion linux-node2.example.com accepted.
[root@linux-node1 ~]# salt-key #<== 再次查看被管理的主机 Accepted Keys: linux-node1.example.com linux-node2.example.com Denied Keys: Unaccepted Keys: Rejected Keys:
说明:当master通过minion端验证之后会在minion端的/etc/salt/pki/minion目录下生成一个minion_master.pud的文件,这是master端发给minion的master公钥
salt-key输出说明:
主机状态 |
中文解释 |
Accepted Keys: |
已经同意被管理的主机key |
Denied Keys: |
已经被拒绝的主机key |
Rejected Keys: |
明确拒绝的key,主接收任何通信 |
Unaccepted Keys: |
未被接受或同意的主机key |
salt-key常用参数:
参数 |
解释 |
-A |
同意并接受全部主机 |
-a |
指定接收的主机,支持通配符操作 |
-D |
删除全部已被管理主机(但是不建议这么做) |
-d |
指定主机,不在管理的指定主机 |
5. 测试是否验证成功(两台机器都反悔True则表示成功)
[root@linux-node1 ~]# salt "*" test.ping linux-node2.example.com: True linux-node1.example.com: True [root@linux-node1 ~]# salt \* cmd.run "free -m" linux-node2.example.com: total used free shared buff/cache available Mem: 976 137 406 6 433 656 Swap: 1535 0 1535 linux-node1.example.com: total used free shared buff/cache available Mem: 976 408 110 12 457 367 Swap: 1535 0 1535
命令解释:
salt |
\* |
cmd.run |
“free -m” |
salt |
“*” |
test.ping |
|
命令(关键字) |
目标(*代表所有,单双引号只是为了转义) |
模块.方法 |
参数 |