salt介绍
- salt是一个基础平台管理工具,配置文件批量修改,文件同步
- salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据
salt的核心功能
- 是命令发送到远程系统,而且是并行发送不是串行的
- 使用安全加密协议
- 对网络要求比较低,使用最小最快的网络载荷
- 提供简单的编程接口(salt使用python开发)
salt的优点
saltstack使用python语言编写,相当轻量级。 http://www.python.org
saltstack通讯层采用ZeroMQ PUB-SUB pattern实现,使得它很快速。http://www.zearmq.org
saltstack是开源的,通过python可以自己编写模块。
salt端口说明
salt-master启动时会启动两个端口
- 4505:为salt的消息发布专用端口
- 4506:位客户端与服务端通信的端口。 ---监控此端口可以监控哪些minion收到的消息,并回复了结果。
配置文件详解 ---待整理
salt-master和salt-minion配置文件说明,待整理
官网
开发语言:python
工作方式:master/minion(ZeroMQ),Masterless,Salt-SSH(0.17+)
中文官网:www.saltstack.cn
GitHub:http://github.com/saltstack/salt
注意:
- centos5/redhat5 版本总的zeromq版本默认是2.1.9,存在keepalive bug,需要升级到3以上的版本。
- 配置文件语法要符合yaml语法,比如:冒号后面要有一个空格。
- salt要求python最低为python2.6
SaltStack通讯原理概述
Salt的KEY管理
- salt数据传输加密采用AES加密,同事master和minion端采用key管理;
- minion只有先被master接受(accepted)key后,才能进行管理,同事master端的pub key也会传递到minions上,实现更安全的双向认证;
- keys默认保存在/etc/salt/pki目录下;
- 管理工具:salt-key
salt命令详解 ---待整理
salt-key
一、环境准备
1,配置yum源,---salt使用的是epel源
使用阿里云的源:rpm -ivh http://mirrors.yun-idc.com/epel//6/x86_64/epel-release-6-8.noarch.rpm
2,规划主机,配置主机名
IP | 主机名 | 部署应用 |
10.80.0.161 | salt-masterold | salt-master |
10.80.0.162 | salt-masternew | salt-master |
10.80.0.163 | dns01 | salt-minion |
10.80.0.164 | dns02 | salt-minion |
二、在两台master主机,安装salt-master应用,并启动程序
1,安装master应用,添加开机自启动
[root@localhost ~]#yum install –y salt-master [root@localhost ~]#chkconfig salt-master on
2,修改配置文件
#log_level: warning log_level: debug #调试时将日志级别调整为debug级别
3,启动master程序
[root@localhost ~]#/etc/init.d/salt-master start
4,常用命令和参数
- salt-key 参数
-a | 接受指定minion | |
-A | 接受所有minion | |
-r | 拒绝指定minion | |
-R | 拒绝所有minion | |
-d | 删除指定minion | |
-D | 删除所有minion | |
-y | 默认yes |
三、在两台minion主机,安装salt-minion应用,修改配置文件,并启动程序
1,安装minion应用,添加开机自启动
[root@localhost ~]#yum install –y salt-minion [root@localhost ~]#chkconfig salt-minion on
2,修改minion配置文件
[root@localhost ~]#vi /etc/salt/minion
#master: salt minion配置文件中,默认master配置的为salt,此处可以修改为master的IP地址,也可以在/etc/hosts中增加映射,此处我按照第二种方式修改 log_level: debug 调试过程日志级别修改为debug级别,生产系统可根据实际情况配置
[root@localhost ~]#vi /etc/hosts,在文件末尾增加一条记录
10.80.0.162 salt
3,测试与master主机是否连通
[root@dns01 ~]# ping salt PING salt (10.80.0.162) 56(84) bytes of data. 64 bytes from salt (10.80.0.161): icmp_seq=1 ttl=64 time=0.351 ms 64 bytes from salt (10.80.0.161): icmp_seq=2 ttl=64 time=0.231 ms
3,启动minion程序
[root@localhost ~]#/etc/init.d/salt-minion start
四、常见案例
1,minion修改主机名(以dns01为例)
- minion修改主机名 /etc/network
- minion删除缓存(包括荣主机名文件和key文件) rm –rf /etc/salt/minion_id;rm –rf /etc/salt/pki
- master删除dns01的key,salt-key –d dns01
- 重启minion程序,/etc/init.d/salt-minion restart
------结束
注:
- 如果再master不删除minion的key,有可能minion程序启动后,会自动杀死自己。原因是:minion启动后,会生成自己的key(主机名、IP地址和一些其它信息联合生成的),当向master注册后,会保存一个master的key。当主机名修改后自己的key会改变,如果master不删除之前minion的key,不仅会注册失败,minion还会杀死自己的进程;
- minion的主机名会缓存到/etc/salt/minion_id文件里面,修改主机名后需要删除这个文件;
2,master更换主机,所有minion迁移至新的master
思路(原理):
- 对minion而言只认master服务器上的的key与minion自己保存的master的key是否有冲突,没有冲突就不会有问题
- minion要执向新的master的地址
操作步骤:
第一步:将masterold上的所有key文件打包上传到masternew服务器上,解压,然后重启master
[root@saltmasterold]# tar -zcvf pki.tar.gz /etc/salt/pki/ [root@saltmasterold]# scp pki.tar.gz 10.80.0.162:/etc/salt/pki/ [root@saltmasternew]# cd /etc/salt/;tar -zxvf pki.tar.gz
[root@saltmasternew]#/etc/init.d/salt-master restart [root@saltmasternew]#salt-key -L Accepted Keys: dns01 dns02 Denied Keys: Unaccepted Keys: Rejected Keys:
第二步:修改所有minion配置文件,将master执向新的地址
[root@saltmaster salt]# salt '*' cmd.run "sed -i 's/162/161/g' /etc/hosts" dns02: dns01:
第三步:验证是否修改成功
[root@saltmaster salt]# salt '*' cmd.run 'grep salt /etc/hosts' dns02: 10.80.0.161 salt dns01: 10.80.0.161 salt
第四步:重启所有minion服务
[root@saltmaster salt]# salt '*' service.restart salt-minion dns02: True dns01: True
第五步:在masternew上验证是否接管了所有minion
[root@masternew]# salt '*' test.ping dns01: True dns02: True
------迁移结束