SaltSack是什么?
Saltstack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,一般可以理解成简化版的基于puppet和加强版的func。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与python第三方模块(Pyzmq、PyCrypto、pyjinja2、python-msgpack和PyYAML等)构建。
Saltstack具有以下特点:
部署简单、方便
支持大部分UNIX/Linux及Windows环境
主从集中化管理
配置简单、功能强大、扩展性强
主控端(Master)和被控制端(minion)基于证书认证,安全可靠
支持API及自定义模块,可通过Python轻松扩展
Saltstack通信原理:
1.SaltStack 采用 C/S模式
2.master和minion之间是通过秘钥对建立信任关系,建立信任关系以后,master进程起来会监听2个端口(4505和4506)
3.4505端口对应的是ZMQ的PUB system, 用于和minion建立长连接并发送数据
4.4506端口对应的是REP system,用于接受minion的数据
5.在minion端口启动minion进程,不会监听任何端口,minion会用随机的端口和master通信
6.master和minion之间的通信用到了zeromq消息队列
7.master每一次下发任务所有的minion都会收到任务,minion会根据任务条件判断是否需要返回数据给master
Saltstack通信步骤:
1. Saltstack的Master与Minion之间通过ZeroMq进行消息传递,使用ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
2. salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid
获取命令执行结果。
3. master接收到命令后,将要执行的命令发送给客户端minion。
4. minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
5. minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,
将执行结果通过消息总线返回给master
6. master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
7. salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
Saltstack安装与配置
系统环境 :CentOS6.8 两台
主控端
IP:192.168.139.130
hostname:centos6-1 (salt-master和salt-minion)
被控端
IP:192.168.139.129
hostname:centos6-2 (salt-minion)
1.
首先,如果你的系统中EPEL当前不是enabled的话,你需要先给两个节点
安装个epel源,方便salt网络安装
[root@centos6-1 ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.
接下来,由于salt的master和minion包是分开的,所以机器需要安装相应的包,通常情况下,一个master会对应多个minion。
在centos6-1上安装配置salt-master
root@centos6-1 ~]# hostname
centos6-1
[root@centos6-1 ~]# yum -y install salt salt-master salt-minion
[root@centos6-1 salt]# egrep -v '^#|^$' /etc/salt/master #master主控端配置
interface: 192.168.139.130 #绑定Mster通信IP(注意冒号后面必须加一空格,同下)
auto_accept: True #自动认证,避免手动运行salt-key来确认证书信任
file_roots: #指定Saltstack文件根目录位置
base:
- /srv/salt
[root@centos6-1 ~]# egrep -v '^#|^$' /etc/salt/minion #minion被控端配置
master: 192.168.139.130 #指定master主机IP地址
id: centos6-1 #修改被控端主机识别id,建议使用操作系统主机名配置
[root@centos6-1 ~]# service salt-master start
Starting salt-minion daemon: [确定]
[root@centos6-1 ~]# service salt-minion start
Starting salt-minion daemon: [确定]
#开启服务和开机启动:
service salt-master start
service salt-minion start
chkconfig salt-master on
chkconfig salt-minion on
在centos6-2上安装配置salt-minion
root@centos6-2 ~]# hostname
centos6-2
[root@centos6-2 ~]# yum -y install salt salt-master salt-minion
[root@centos6-2 ~]# egrep -v '^#|^$' /etc/salt/minion
master: 192.168.139.130
id: centos6-2
[root@centos6-2 ~]# service salt-minion start
Starting salt-minion daemon: [确定]
#开启服务和开机启动:
service salt-minion start
chkconfig salt-minion on
监听端口,默认master开启4505,4506端口:
4505(publish_port): salt的消息发布系统
4506(ret_port): salt客户端与服务端通信的端口
要保证这2个端口能通信正常,如果开启iptables需要再主控端添加
以下2条规则:
iptables -A INPUT -m state --state new -m tcp-p tcp--dport4505 -j ACCEPT
iptables -A INPUT -m state --state new -m tcp-p tcp--dport4506 -j ACCEPT
观察目录解构:
[root@centos6-1 salt]# ll
total 72
-rw-r-----. 1 root root 29545 Aug 30 14:23 master
-rw-r-----. 1 root root 26384 Aug 30 14:49 minion
drwxr-xr-x. 2 root root 4096 Aug 30 14:51 minion.d
-rw-r--r--. 1 root root 9 Aug 30 14:03 minion_id
drwxr-xr-x. 4 root root 4096 Aug 30 14:08 pki
[root@centos6-1 salt]# tree ./
./
├── master
├── minion
├── minion.d
│ └── _schedule.conf
├── minion_id
└── pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ ├── centos6-1
│ │ └── centos6-2
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ └── minions_rejected
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
9 directories, 11 files
[root@centos6-2 salt]# tree ./
./
├── minion
├── minion.d
│ └── _schedule.conf
├── minion_id
└── pki
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
3 directories, 6 files
MD5对比 master传输到slave的key是否完整:
[root@centos6-1 salt]# md5sum /etc/salt/pki/master/master.pub
845bd90d44736df5d9ede33a99d538ae /etc/salt/pki/master/master.pub
[root@centos6-2 mysql]# md5sum /etc/salt/pki/minion/minion_master.pub
845bd90d44736df5d9ede33a99d538ae /etc/salt/pki/minion/minion_master.pub
远程执行测试:
[root@centos6-1 salt]# salt-key -L
Accepted Keys:
centos6-1
centos6-2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@centos6-1 salt]# salt "centos6-2" test.ping
centos6-2:
True
[root@centos6-1 salt]# salt "centos6-*" test.ping
centos6-2:
True
centos6-1:
True
[root@centos6-1 salt]# salt "*" cmd.run 'df -h'
centos6-1:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos61-lv_root
18G 8.3G 8.0G 51% /
tmpfs 725M 96K 725M 1% /dev/shm
/dev/sda1 477M 67M 385M 15% /boot
/dev/sr0 3.7G 3.7G 0 100% /media/CentOS_6.9_Final
centos6-2:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_centos62-lv_root
18G 8.6G 7.8G 53% /
tmpfs 491M 240K 491M 1% /dev/shm
/dev/sda1 477M 67M 385M 15% /boot
*表示所有
,因为*在shell本地也是有含义的因此我们用引号引起来,不让他在shell中体现它的含义。
test.ping,其中test是一个模块,而ping是test模块中的一个方法
这条命令的意思是检测minion是否在干活,这个ping和ICMP的ping不一样,不要搞混了。
cmd是模块,run是cmd模块的方法
cmd命令很好用,但是同时也很危险,因为能直接执行命令意味着就可以删除。
查看salt调用cdm模块所在路径及salt的其它模块:
[root@centos6-1 base]# cd /usr/lib/python2.6/site-packages/salt/modules/
[root@centos6-1 modules]# ls |grep cmd
cmdmod.py
cmdmod.pyc
cmdmod.pyo
日志文件路径,必要是可以开机debug模式排查问题
tailf /var/log/salt/master
更改minion_id步骤
1.停止salt-minion 如果不停止会一直给master发消息
2.master上面salt-key 删除老的id salt-key -d minionid
3.mininon上删除/etc/salt/minion_id rm -f /etc/salt/minion_id
4.删除minion端/etc/salt/pki rm -rf /etc/salt/pki
5.minion上配置文件修改id
6.启动minion
7.master重新salt-key加入
最后,认证有手动和自动2种:
1.手动认证
2.自动认证 在master端,/etc/salt/master取消注释:
参考下方链接。