一、SaltStack 简介
一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快
,服务器之间秒级通讯。
salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.
Saltstack采用集中化管理,我们一般可以理解为Puppet的简化版本与Func
的加强版本。Saltstack是基于Python语言开发的,结合轻量级讯息伫列(ZeroMQ)以及Python第三方模组(Pyzmq、PyCrypto、Pyjinja2、python-msgpack与PyYAML等)。
更多精彩:SaltStack相关文章
二、Saltstack 交互流程
Saltstack的Master与Minion之间通过"ZeroMq进行消息传递",使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc
salt命令,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jodid,根据jobid获取命令执行结果。
master接收到命令后,将要执行的命令发送给客户端minion。
minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理
minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master
master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中
salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端。
优点:
部署简单与方便。
支持大部分UNIX/Liunx 及Windows 环境。
主从集中化管理。
配置简单、功能强大与扩展性强。
主控端(Master)与被控制端(Minion)基于凭证认证。
支援API 以及自定义模组,透过Python 轻松扩展。
社群活跃。
缺点:
Web UI 虽然有,但是没有报表功能。
需要Agent,其实也不算,可以使用Cobbler无人值守安装 agent
三、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
四、真实案例实战
服务器系统 | 角色 | IP | 主机名 |
---|---|---|---|
CentOS7.2 x86_64 | salt-master | 192.168.56.11 | linux-node1.example.com |
CentOS7.2 x86_64 | salt-minion | 192.168.56.12 | linux-node2.example.com |
4.1 在192.168.56.11安装salt-master和salt-minion并启动master
[root@linux-node1 ~]# yum install -y salt-master salt-minion
[root@linux-node1 ~]# systemctl start salt-master
4.2 master上进入salt目录了解目录结构
[root@linux-node1 ~]# cd /etc/salt/
[root@linux-node1 salt]# ls
master minion pki
[root@linux-node1 salt]# tree pki/
pki/
└── master
├── master.pem #私钥
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected
directories, 2 files
4.3 在192.168.56.12,修改minion配置文件master
[root@linux-node2 ~]# yum install -y salt-minion
[root@linux-node2 ~]vi /etc/salt/minion #修改master 和id默认是主机名
[root@linux-node2 salt]# grep -n ^master minion
16:master: 192.168.56.11
[root@linux-node2 ~]#systemctl start salt-minion
#在node1上面做同样的设置
4.4 在192.168.56.11上面查看pki情况,显示已经有2个minion准备加入
[root@linux-node1 salt]# tree pki
pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre #minion启动以后给master发送申请,master在这里可以看到正在申请加入的minion-id
│ │ ├── linux-node1.example.com
│ │ └── linux-node2.example.com
│ └── minions_rejected
└── minion
├── minion.pem
└── minion.pub
directories, 6 files
4.5 在master上面接受minion加入
[root@linux-node1 salt]# 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.
4.6 秘钥接受后,查看pki的密码变化,秘钥名称是和minionID名称一样(公钥)
[root@linux-node1 salt]# tree pki
pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions #已经进入到master的minion
│ │ ├── linux-node1.example.com
│ │ └── linux-node2.example.com
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ └── minions_rejected
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
directories, 7 files
4.7,在minion节点查看 master的公钥也给到了minion后面就可以正常通信
[root@linux-node2 salt]# tree pki/
pki/
└── minion
├── minion_master.pub #这个会传送给master,在master上面存放的文件名称是minionID
├── minion.pem
└── minion.pub
4.8 在master上面查看key的信任关系
[root@linux-node1 base]# salt-key -L
Accepted Keys:
linux-node1.example.com
linux-node2.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
4.9 检查master
和minion
之间通信是否正常,如果返回True则说明正常
[root@linux-node1 ~]# salt "*" test.ping
linux-node1.example.com:
True
linux-node2.example.com:
True
4.10 使用salt的执行模块进行维护管理
很多公司会通过web界面调用,来进行操作,这样既美观,而且减少误操作
[root@linux-node1 ~]# salt "*" cmd.run "w"
"*" 是执行对象 "cmd" 是执行模块 "run"是cmd的方法 "w" 是方法的参数 也就是命令
linux-node2.example.com:
14:23:31 up 8:38, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.56.1 13:46 21:23 0.15s 0.15s -bash
linux-node1.example.com:
14:23:30 up 8:38, 1 user, load average: 0.01, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.56.1 13:46 2.00s 0.43s 0.32s /usr/bin/python /usr/bin/salt * cmd.run w
[root@linux-node1 ~]# salt "*" cmd.run "date"
linux-node2.example.com:
Sun Oct 15 14:23:39 EDT 2017
linux-node1.example.com:
Sun Oct 15 14:23:38 EDT 2017
4.11 删除minon key
[root@linux-node1 base]# salt-key -D #全部删除
[root@node01 salt]# salt-key -d node03 #删除指定主机node03
[root@linux-node1 base]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
Rejected Keys:
4.12 查看salt调用cdm模块所在路径及salt的其它模块
[root@linux-node1 modules]# pwd
/usr/lib/python2.7/site-packages/salt/modules
[root@linux-node1 modules]# ls |grep cmd
cmdmod.py #用户执行的cmd模块
cmdmod.pyc
cmdmod.pyo
salt还有很多模块可以使用,具体可以参考 salt官网
saltstack 用户组 : http://www.saltstack.cn/
4.13 日志排错
[root@linux-node1 base]# tailf /var/log/salt/master
通过跟踪日志文件,必要时可以开机debug模式排查问题
4.14 如果minion_ID变更,需要如下操作
停止salt-minion 如果不停止会一直给master发消息
master上面salt-key 删除老的id salt-key -d minionid
mininon上删除/etc/salt/minion_id rm -f /etc/salt/minion_id
删除minion端/etc/salt/pki rm -rf /etc/salt/pki
minion上配置文件修改id
启动minion
master重新salt-key加入
学ansible还是salt???,先入为主
至此SaltStack基础介绍完毕,更多请关注:Saltstack相关文章
- QQ精品交流群
-
- 微信公众号
-