Saltstack初识

一 简介

Saltstack 是基于Python开发的一套C/S架构(客户端-服务端)模式的配置管理工具,服务端叫做master,客户端叫做minion, minion与master之间通过ZeroMQ消息队列通信。(发布与订阅(pub/sub)方式)

Saltstack和Puppet很像,可以说 Saltstack 整合了Puppet和Chef的功能,更加强大,更适合大规模批量管理服务器,并且它比Puppet更容易配置。

三大功能:远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。

支持系统:大多数都支持,windows 上不支持安装 master。

saltstack 执行命令周期:

       第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
  第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据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执行结果,将结果输出到终端。

二 安装配置

1. 准备三台机器,这三台机器都关闭selinux,清空iptables或firewall规则并保存。

saltstack-master: 192.168.81.121(hostname:saltstack-master)

saltstack-minion: 192.168.81.122(hostname:saltstack-minion)

                            192.168.81.181  (hostname:mysql-master)

master端和minion端都要安装 epel yum源:

yum -y install epel-release

2. 服务端(saltstack-master)安装与配置

[root@saltstack-master ~]# yum -y install salt-master

修改配置, 如下图:

vi /etc/salt/master    // 安装完成修改主配置文件

改为

#file_roots:
#  base:
#    - /srv/salt

改为

改为

3. 客户端(saltstack-minion)安装与配置

[root@saltstack-minion ~]# yum -y install salt-minion

修改配置文件
有两处:maseter和id,master是服务器地址,必须修改;id指定的是客户端的名称,可以不做修改,保持默认即可。一般情况下我们管理的机器都比较多,喜欢ip以 位置_服务_ip地址 的方式进行指定,这样越详细越好,免得机器多的时候不好辨认。注意冒号后面有一个空格,否则不是报错就是服务端不显示。

vi /etc/salt/minion

192.168.81.122(hostname:saltstack-minion)服务器:

指定salt-master地址:

#master: salt   // 16行

改为

master: 192.168.81.121  //去掉注释,指定 salt-master 地址

指定客户端名称: ----这一步可以不做

#id:           // 78行

192.168.81.181  (hostname:mysql-master) 服务器:

#master: salt   // 16行
#id:           // 78行

改为:

master: 192.168.81.121  
id: liantong_mysql_192.168.81.181

三 启动 saltstack-master 和saltstack-minion服务器
1. 启动salt-master

systemctl start salt-master.service 

root       2832   2160  0 16:08 pts/0    00:00:00 grep --color=auto salt
[root@saltstack-master ~]# systemctl start salt-master.service 
[root@saltstack-master ~]# systemctl status salt-master.service 
● salt-master.service - The Salt Master Server
   Loaded: loaded (/usr/lib/systemd/system/salt-master.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-03-25 16:08:49 CST; 14s ago
 Main PID: 2856 (salt-master)
   CGroup: /system.slice/salt-master.service
           ├─2856 /usr/bin/python /usr/bin/salt-master
           ├─2865 /usr/bin/python /usr/bin/salt-master
           ├─2866 /usr/bin/python /usr/bin/salt-master
           ├─2867 /usr/bin/python /usr/bin/salt-master
           ├─2868 /usr/bin/python /usr/bin/salt-master
           ├─2873 /usr/bin/python /usr/bin/salt-master
           ├─2874 /usr/bin/python /usr/bin/salt-master
           ├─2875 /usr/bin/python /usr/bin/salt-master
           ├─2876 /usr/bin/python /usr/bin/salt-master
           ├─2877 /usr/bin/python /usr/bin/salt-master
           └─2878 /usr/bin/python /usr/bin/salt-master

Mar 25 16:08:43 saltstack-master systemd[1]: Starting The Salt Master Server...
Mar 25 16:08:49 saltstack-master systemd[1]: Started The Salt Master Server.
[root@saltstack-master ~]# 

2. 启动salt-minion

注意:
如果查看salt-minion的运行状态,salt-minion状态报错:显示salt-master已经缓存了这个minion, 但是 minion在重新认证之前将要等待10秒,其实此情况是正常情况。因为salt-master没有接收minion的认证,是由于master上无法查看minion的应有id而是显示了错误的id导致,如图:

查看minion的debug信息,可以看到已经缓存了saltstack-minion这个id

解决办法:

删除minion_id,重启salt-minion服务
[root@saltstack-minion ~]# rm -rf /etc/salt/minion_id 
[root@saltstack-minion ~]# systemctl restart salt-minion.service

四 测试saltstack (接下来都在 salt-master 端操作)

1. 查看minion列表 (这时候 saltstack-minion是红色的)

2. 认证所有key

注意:

也可以通过 salt-key -a liantong_mysql_192.168.81.181 来具体指定某台 minion 进行认证 key

salt-key 命令参数 -a 和 -A 的区别:
-a ACCEPT, --accept=ACCEPT   ------> accept the specified public key
-A, --accept-all    -----> accept all pending keys

accept之后,再次使用salt-key -L 查看minion列表 (这时候 两个 minion 已经变为绿色,说明 key 已被添加)

master删除指定minion的key:

master取消认证 id 为 liantong_mysql_192.168.81.181 的 minion:

需要重启 id为 liantong_mysql_192.168.81.181 的 minion, salt-key -L 时,liantong_mysql_192.168.81.181 才会出现在列表中

删除所有minion的key

salt-key -D -y

注意:

当minion启动后,它会产生一个id值,除非已经在之前的运行过程中产生过并且缓存在配置路径下,默认是/etc/salt/minion_id

如果,minion_id己经生成,则优先读取该缓存,如果发现有重名的,可以直接删除/etc/salt/minion_id后重启minion服务,这里便会根据salt-key生成规则重新生成

3. 简单测试 (通过saltstack-master 进行检测)

salt命令  test.ping的含义是,test是一个模块,ping是模块内的方法

可以 ping 到 salt-minion 返回值为 True, 说明 salt-master 和 salt-minion 可以通讯。

也可以采用如下方式: 一次性测试多个 minion

再比如:

4 简单测试2

使用 cmd.run远程执行命令,cmd是模块,run是cmd模块的一个方法

注意:salt 运程执行命令时可以使用 -L 进行列表匹配

-L ,  --list,以主机id名列表的形式进行过滤,不同主机id名称使用逗号分隔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值