SaltStack 快速入门 [一]

2017年10月15日17:37:01 发表评论 3,714 views

一、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执行结果,将结果输出到终端。

SaltStack 快速入门 [一]

优点:

部署简单与方便。
支持大部分UNIX/Liunx 及Windows 环境。
主从集中化管理。
配置简单、功能强大与扩展性强。
主控端(Master)与被控制端(Minion)基于凭证认证。
支援API 以及自定义模组,透过Python 轻松扩展。
社群活跃。

缺点:

Web UI 虽然有,但是没有报表功能。
需要Agent,其实也不算,可以使用Cobbler无人值守安装 agent

Cobbler无人值守安装文章

三、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加入

SaltStack 快速入门 [一]

[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 检查masterminion之间通信是否正常,如果返回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基础介绍完毕,更多请关注:Saltstack相关文章

  • QQ精品交流群
  • weinxin
  • 微信公众号
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: