
Saltstack架构扩展
前面所有章节均以单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 注意: 不要启动master2.同步旧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-minion4.启动新的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的扩展架构如下图所示
SaltStack-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-master2.配置syndic服务器syndic-陈浩南
yum install salt-syndic vim /etc/salt/master syndic_master: - 192.168.56.11 systemctl start salt-master systemctl start salt-syndic3.配置下级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-minion4.测试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-minion2.编写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: minion3.使用salt-call执行本地安装
salt-call --local state.sls init.dns salt-call --local state.highstate #必须有topfile4.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来实施配置管理

