徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客”徐亮伟架构师之路“累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208
SaltStack课程学习地址:http://edu.51cto.com/course/13829.html
前面所有章节均以单Master
管理多Minion
的方式展开讨论, 这一章我们将学习如何扩展Salt
的架构,解决Salt
在管理大量的Minion
时的扩展问题以及Salt Master
的高可用和高性能问题。
1.Salt多Master架构
Salt
多Master
架构可以看成Master->Minion
模式的简单水平扩展,两台Master
都可以对所有Minion
进行管理,如下图:
Salt
多Master
只需要在minion
端配置多个Master
地址即可实现Salt
支持多Master
配置,Salt
多Master
方式是让一个minion
可以同时接收两台或多台master
的管理因此多个
Master
之间不会有任何感知,也没有状态的同步,所有想做高可用多Master
架构,需要自己来维护多个Master
并且要让他们的配置文件、状态文件和密钥文件完全相同否则仅在
minion
端配置多个Master
地址是无法实现高可用架构的。
1.启动一台新服务器,安装salt-master
yum install salt-master -y
注意: 不要启动master
2.同步旧Master
的配置文件、状态文件、密钥文件到新Master
上面
//配置文件
rsync -avz /etc/salt/master server-two:/etc/salt/
//密钥文件
rsync -avz /etc/salt/pki/master/master.* server-two:/etc/salt/pki/master/
//状态文件
rsync -avz /srv server-two:/
3.修改minion
的配置, 随后重启minion
# vim /etc/salt/minion
master:
- server-one
- server-two
# systemctl restart salt-minion
4.启动新的master
服务, 在server-two
上执行, 并执行命令测试
systemctl start salt-master
salt-key -A -y
salt '*' test.ping
注意: 如果生产环境中配置多master
需要注意多master
之间的配置文件、状态文件和密钥文件的实时同步问题,可以使用rsync+inotify
或sersync
方式完成实时同步, 实现的脚本思路(low)
[root@salt0-master scripts]# cat rsync_salt.sh
#!/usr/bin/bash
Srv_Config=/srv
Master_Config=/etc/salt/master
Master_New=192.168.70.151
Date=$(date +%F-%T)
rsync -avz --delete $Srv_Config $Master_New:/ &>/dev/null && \
rsync -avz --delete $Master_Config $Master_New:$Master_Config &>/dev/null
if [ $? -eq 0 ];then
echo "$Date Rsync Salt Config Is Ok!"
else
echo "$Date Rsync Salt Config Is Err!"
fi
2.Salt Sydic模式架构
前面我们了解了多Master的方式避免salt-master
的单点故障,以解决Salt高可用问题。那如果我们管理主机的数量非常巨大,那一台Master
性能就会出现问题,这个时候就需要对Salt
进行扩展,用Syndic
的方式可以完成多级扩展,Syndic
的扩展架构如下图所示
1.Salt Syndic 必须运行在一个Master上
2.Syndic要连接上游的Master
1.配置顶级Master
服务器master-蒋先生
yum install salt-master
vim /etc/salt/master
order_masters: True
systemctl restart salt-master
2.配置syndic
服务器syndic-陈浩南
yum install salt-syndic
vim /etc/salt/master
syndic_master:
- 192.168.56.11
systemctl start salt-master
systemctl start salt-syndic
3.配置下级minion服务器
# yum install salt-minion
# vim /etc/salt/minion
master: syndic-one
# systemctl restart salt-minion
注意: 如果之前已经添加过受信任的Master需要删除对应的key
# rm -f /etc/salt/pki/minion/minion_master.pub
# systemctl restart salt-minion
4.测试master
服务器通过syndic
管理minion
在syndic服务器上接收所有minion的key
# salt-key -L
#在上级master上执行命令, 测试有syndic管理的minion是否可以正常管理
salt 'minion-syndic-one' test.ping
syndic
本身还可以进行更多级的扩展, 通过syndic
和多master
的配合可以让Salt的架构变得更加灵活和可扩展性,可以应对更多的服务器管理
重点: Syndic
的file_roots、Pillar_roots
必须与高级Master
一致
缺点: 高级的Master
并不知道自己有多少Minion
,仅知道有多少syndic
3.salt无Master架构
Salt
脱离Master
独立运行,这种状态可以称为无master
的salt
这种模式可以用于登陆minion
后的一些调试任务,可以将状态文件配置在本地进行执行
1.配置salt minion
为本地执行方式
[root@salt1-minion ~]# vim /etc/salt/minion
file_client: local
file_roots:
base:
- /srv/salt/base
pillar_roots:
[root@salt1-minion ~]# systemctl restart salt-minion
2.编写SLS
状态文件
[root@salt1-minion ~]# cat /srv/salt/base/init/dns.sls
dns-config:
file.managed:
- name: /etc/resolv.conf
- source: salt://init/files/resolv.conf.template
- user: root
- group: root
- mode: 644
- backup: minion
3.使用salt-call
执行本地安装
salt-call --local state.sls init.dns
salt-call --local state.highstate #必须有topfile
4.Salt SSH
实现无Master
管理minion
安装salt-ssh
[root@salt0-master ~]# yum install salt-ssh -y
[root@salt0-master ~]# salt-ssh --version
salt-ssh 2018.3.0 (Oxygen)
配置/etc/salt/roster
文件
# Sample salt-ssh config file
#web1:
# host: 192.168.42.1 # IP地址
# user: fred # 用户名
# passwd: foobarbaz # 密码
# sudo: True # 是否sudo到root
# priv: /etc/salt/pki/master/ssh/salt-ssh.rsa #私钥路径
# timeout:5 #超时时间
密码方式: 通过密码方式配置演示salt-ssh
使用方式
[root@salt0-master ~]# vim /etc/salt/roster
test:
host: 192.168.56.11
user: root
passwd: 123456
port: 22
[root@salt0-master ~]# salt-ssh -H
/etc/salt/roster:
----------
web-node1:
192.168.70.171
[root@salt0-master ~]# salt-ssh '*' cmd.run 'df -h'
密钥方式: 通过密钥方式配置演示salt-ssh
[root@salt0-master ~]# vim /etc/salt/roster
test:
host: 192.168.56.11
user: root
priv: /etc/salt/pki/master/ssh/salt-ssh.rsa
port: 22
[root@salt0-master ~]# salt-ssh -H
/etc/salt/roster:
----------
web-node1:
192.168.70.171
web-node2:
192.168.70.172
[root@salt0-master ~]# salt-ssh '*' cmd.run "df -h"
第一次运行需要输入密码复制公钥到目标服务器,后续在执行任何远程命令时都会使用密钥进行认证。
Salt-ssh
的使用
1.salt-ssh可以进行目标匹配、远程执行模块使用、状态管理的使用、highstate高级状态应用
2.salt-ssh基本可以实现Salt大部分功能,在不方便部署Salt minion的特殊环境可以使用salt-ssh来实施配置管理