SaltStack 入门介绍与安装配置 (一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012599988/article/details/82222580

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个端口(450545063.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取消注释:

参考下方链接。

最后分享一文:https://www.jianshu.com/p/283aeef6ced8

https://www.cnblogs.com/xiewenming/p/7670268.html

猜你喜欢

转载自blog.csdn.net/u012599988/article/details/82222580