系统自动化配置和管理工具saltstack采用zeromq消息队列进行通信,和puppet、chef比起来,saltstack速度更快,还有一些我们喜欢的saltstack的地方是他是python写的,比puppet、chef这些ruby工具更接近我们的能力圈。
服务端通信的端口;salt客户端不监听端口,
客户端启动后,会主动连接
master
端注册,然后一直保持该
TCP
连接,
master
通过这条
TCP
连接对客户端控制,如果连接断开,
master
对客户端就无能为力了,当客户端连接断开后,客户端会定期连接master。
启动
master
minion端配置文件的修改:
启动
minion:
3.salt-key 证书管理:
4.salt-run 检查客户端up状态
6.saltstack定时同步
7.saltstack自动分发目录
8.saltstack自动分发文件
10.saltstack之salt-ssh
salt-ssh 安装:
定义roster,让salt-ssh生效:
注意
:windown,linux上同样存在这个问题,原因是salt使用MQ通信,而重启minion,则原有的socket链路失效,会产生新的,而当前在master上使用的依然是旧的,导致输出有问题的,所以不推荐进行重启操作,如果在linux上,推荐使用salt-ssh来做这件事。
服务器由puppet配置管理工具来管理,服务器上线后由puppet完成初始化和配置等一系列工作(比如,静态IP,DNS设置,nfs/san挂载,内核参数优化,防火墙规则配置)初始化完成,需要手动操作的任务(比如备份,升级,重启),这时候我么使用Fabric来批量执行这些临时任务。
Puppet和Fabric两个的工具都可以由saltstack完成。
操作系统和软件的安装,配置,初始化等
puppet,chef,ansible,saltstack
自动执行任务,比如备份,清除日志等
fabric,ansible,saltstack
手动执行任务,比如部署应用,升级,重启,校验文件系统等
fabric,ansible,saltstack
SaltStack 采用 zeromq 消息队列进行通信,和 Puppet/Chef 比起来,SaltStack 速度快得多。还有一点我们喜欢 SaltStack 的地方是它是 Python 写的,比 Puppet/Chef 这些 Ruby 工具更接近我们的能力圈
saltstack安装:
安装完salt-minion后记得修改配置文件,让salt-minion指向salt-master服务器地址:
sudo Vim /etc/salt/minion
找到#mastaer:salt
修改成master: XXX-XXX-XXX-XXx//改成你的master对服务器地址(冒号后面必须带有空格,否则验证不通过),最后重启服务,配置生效。(假如master和minion在一台机器上,此时master:127.0.0.1)
命名一个昵称给你的服务器,查找到#id行,移除#号,增加一个nameid(这个名字可以是任何字符)
service salt-minion resatrt
在sal-master上执行 salt-key list 或者salt-key -L (查看发起请求的minion的主机名称hostname
)就会看到有个请求加进来
然后执行 salt-key -A (同意所有连接),或者认证这个证书使用sudo salt-key -a +minion名字。
至此maser和minion的配置完成。
测试:
salt-master: salt '*' test.ping
通配符“*”代表了所有minion
然后看到所有salt-minion都返回True,则说明整个系统配置成功
执行命令:在salt-master上执行 “salt id 系统命令”来返回minion结果。
saltstack=puppet+fabric
安装和使用系统监控工具Glances:
saltstack分组及其测试:
线上安装配置相同的或者相近的服务为一组,方便批量安装管理,编 辑/etc/salt/mater 添加如下内容:
每组可以一有多个服务,每个服务之间用逗号隔开。
nodegroups:
wwwgroup: 'aaa,bb'
dbgroup: 'aaa'
分组测试:
salt -N xxxgroup cmd.run “free -m” salt -N ubuntu cmd.run "apt-get install rcconf"
saltstack安装和基本配置已经完成,可以通过saltstack批量执行系统命令,包括重启,重启服务,查看系统负载,添加用户和删除用户等。
centos用户 选择rpm
首先安装rpm源:
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
epel中关于salt的包:
salt-api.noarch : A web api for to access salt the parallel remote execution system
salt-master.noarch : Management component for salt, a parallel remote execution system
salt-minion.noarch : Client component for salt, a parallel remote execution system
salt.noarch : A parallel remote execution system
salt-cloud.noarch : Generic cloud provisioning tool
1:服务端
1:安装
yum install salt-master -y
2:配置文件
/etc/salt/master
配置文件选项介绍: http://docs.saltstack.com/ref/configuration/master.html
最基本字段:
interface: 服务端监听IP
3:运行
调试模式:
salt-master -l debug
后台运行:
salt-master -d
作为CentOS管理员,我选择:
/etc/init.d/salt-master start
4:注意事项:
1:监听端口
4505(publish_port):salt的消息发布系统
4506(ret_port):salt客户端与服务端通信的端口,主要用来接受消息
所以确保客户端能跟服务端的这2个端口通信
2:客户端
1:安装
yum install salt-minion -y
2:配置文件
/etc/salt/minion
配置文件选项介绍: http://docs.saltstack.com/ref/configuration/minion.html
最基本字段:
master: 服务端主机名
id: 客户端主机名(在服务端看到的客户端的名字)
3:运行
调试模式:
salt-minion -l debug
后台运行:
salt-minion -d
作为CentOS管理员,我选择:
/etc/init.d/salt-minion start
4:注意事项:
1:minion默认和主机名为salt的主机通信
2:关于配置文件
salt的配置文件均为yaml风格
$key: $value #注意冒号后有一个空格
3:基础知识
1:salt minion和master的认证过程:
(1) minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
(2) master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了
如下:
启动服务端:
/etc/init.d/salt-minion restart
启动客户端:
/etc/init.d/salt-minion restart
服务端查看key:
salt-key
Accepted Keys:
Unaccepted Keys:
minion1
Rejected Keys:
服务端接受key
salt-key -a minion1
测试:
salt 'minion1' test.ping
minion1:
True
附:salt更多命令及手册
salt '*' sys.doc
saltstack的master端监听
4505与
4506端口,4505为salt消息发布系统,4506为salt客户端与
saltstack配置文件的修改:
master端修改配置文件:
vi
/etc/salt/master
interface: 115.28.2.1
#此处是server端监听的地址。
auto_accept: True
#此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能
/etc/salt/master
-d
#后台启动
/etc/salt/master
#前台启动,方便调试
#vi /etc/salt/minion
master: 115.28.2.1
#这里改成你的master服务器地址
id
: web01
#建议这里修改成主机名,便于master端分辨
#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
highstate:
function
: state.highstate
minutes: 5
/etc/salt/minion
-d
#后台启动
/etc/salt/minion
#前台启动,方便调试
注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过
netstat
-an|
grep
ES来查看是否有连接。
Master端证书存放路径:/etc/salt/pki/master/minions
salt-key -L
#查询所有接收到的证书
salt-key -a <证书名>
#接收单个证书
salt-key -A
#接受所有证书
salt-key -d <证书名>
#删除单个证书
salt-key -D
#删除所有证书
salt-run manage.status
#查看所有客户端up/down状态
salt-run manage.up
#只显示up状态的客户端
salt-run manage.down
#只显示down状态的客户端
5salt-cp批量拷贝文件
在Master端执行:
语法:
salt-
cp
[options]
'<target>'
SOURCE DEST
示例:
salt-
cp
'*'
/etc/hosts
/etc/hosts
#把master上的hosts文件分发到所有主机。
可以把salt-call state.highstate命令放在minion端的定时任务中,来进行自动请求同步。
也可以把salt '*' state.highstate放在master端的定时任务中,来进行自动推送到所有机器。
也可以在/etc/salt/minion配置文件中加入如下内容,如下是每隔5分钟同步,效果一样
schedule:
highstate:
function
:state.highstate
seconds:300
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
#在top.sls文件中指定哪些主机访问哪些目录
[root@yang salt]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts
:
#指定minion端同步后生成的目录
file
.recurse:
-
source
: salt:
//zabbix/zabbix_scripts
#指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
- dir_mode: 755
- file_mode: 744
#用dir_mode和file_mode来设置文件和目录的权限
|
如下配置,当文件出现变更时,匹配DG-Server开头的主机,同步文件到这些minion上,并设置为对应的文件权限
9.saltstack进程状态管理
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
[root@yang zabbix]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/etc/zabbix_agentd
.conf.d
/UserParameter
.conf:
#指定在minion端生成的文件名
file
.managed:
-
source
: salt:
//zabbix/UserParameter
.conf
#指定在master同步的原始文件
- backup: minion
#当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/
- mode: 744
- user: root
- group: root
|
saltstack常用功能也就批量执行命令或脚本,批量分发文件,自动同步目录与文件,整体来说很简单实用。但salt有一个缺点,zeromq虽性能很高,但稳定性略差,经常出现minion与master连接断开的情况,导致有些服务器会执行命令失败,这个请大家要注意。
salt-ssh介绍:salt-ssh是0.17.0新出现的一个功能,它依赖ssh来进行远程命令执行,好处是不需要在客户端安装minion,也不需要安装master(直接安装salt-ssh这个包即可),有些类似ansible工具,有些时候你需要salt-ssh(例如:条件不允许安装minion,不用长期管理某个minion),最重要的是salt-ssh并不是单纯的ssh工具,它支持salt大部分的功能。
备注:
需要注意的是,salt-ssh 并没有继承原来的通讯架构 (ZeroMQ),也就是说它的执行速度啥的都会比较慢
去 github 下载 salt 的源安装即可
# git clone https://github.com/saltstack/salt.git # python setup.py install
<Salt ID>: # ID,用于salt-ssh引用
host: # IP或域名
user: # 登录用户名
passwd: # 登录密码
# 可选参数
port: # 自定义的端口
sudo: # 是否允许sudo到root,默认不允许
priv: # ssh登录key路径,默认为salt-ssh.rsa
timeout: # 等待超时
重新安装salt: 需要删除/etc/salt/pki文件。如不行在删除/var/run/salt-minion.pid.