SaltStack介绍简单配置安装及通信原理

Posted warren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltStack介绍简单配置安装及通信原理相关的知识,希望对你有一定的参考价值。

SaltStack介绍

一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。

salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.

通信原理

SaltStack 采用 C/S模式

master和minion之间是通过秘钥对建立信任关系,建立信任关系以后,master进程起来会监听2个端口(4505和4506)

4505端口对应的是ZMQ的PUB system, 用于和minion建立长连接并发送数据

4506端口对应的是REP system,用于接受minion的数据

在minion端口启动minion进程,不会监听任何端口,minion会用随机的端口和master通信

master和minion之间的通信用到了zeromq消息队列

master每一次下发任务所有的minion都会收到任务,minion会根据任务条件判断是否需要返回数据给master

具体步骤如下

  1. Salt stack的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执行结果,将结果输出到终端。

环境说明

CentOS7.2   64bit  linux-node1.example.com  192.168.56.11 (salt-master和salt-minion)
CentOS7.2   64bit  linux-node2.example.com  192.168.56.12 (salt-minion)

在192.168..56.11安装salt-master和salt-minion并启动master

[[email protected] ~]# yum install -y salt-master salt-minion
[[email protected]-node1 ~]# systemctl start salt-master

master上进入salt目录查看目录结构

[[email protected] ~]# cd /etc/salt/
[[email protected]-node1 salt]# ls
master minion pki
[[email protected]-node1 salt]# tree pki/
pki/
└── master
├── master.pem  #私钥
├── master.pub
├── minions
├── minions_autosign
├── minions_denied
├── minions_pre
└── minions_rejected

6 directories, 2 files

在192.168.56.12和192.168.56.11上面安装salt-minon,修改minion配置文件master

[[email protected] ~]# yum install -y salt-minion
[[email protected] ~]vi /etc/salt/minion #修改master 和id默认是主机名 
[[email protected]
-node2 salt]# grep -n ^master minion 16:master: 192.168.56.11
[[email protected]
-node2 ~]#systemctl start salt-minion
#在node1上面做同样的设置

在192.168.56.11上面查看pki情况,显示已经有2个minion准备加入

[[email protected]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

7 directories, 6 files

在master上面接受minion加入

[[email protected] 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.

秘钥接受后,查看pki的密码变化,秘钥名称是和minionID名称一样(公钥)

[[email protected]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

7 directories, 7 files

在minion节点查看 master的公钥也给到了minion后面就可以正常通信了

[[email protected] salt]# tree pki/
pki/
└── minion
├── minion_master.pub  #这个会传送给master,在master上面存放的文件名称是minionID
├── minion.pem
└── minion.pub

 在master上面查看key的信任关系

Accepted Keys:
linux-node1.example.com
linux-node2.example.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:

检查master和minion之间通信是否正常,如果返回True则说明正常

[[email protected] ~]# salt "*" test.ping
linux-node1.example.com:
    True
linux-node2.example.com:
    True

使用salt的执行模块进行维护管理 ,一般在公司使用会通过web界面包装定义作业,然后进行审批执行

[[email protected] ~]# 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             [email protected]   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             [email protected]   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
[[email protected]-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

以上是关于SaltStack介绍简单配置安装及通信原理的主要内容,如果未能解决你的问题,请参考以下文章

Saltstack 安装配置 及 简单操作示例

自动化运维工具---SaltStack安装部署及简单案例

集中化管理平台saltstack--原理及安装

SaltStack及Multi-Master介绍

自动化运维工具之SaltStack-1SaltStack介绍及安装

SaltStack介绍和架构解析