05 Saltstack架构扩展

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客”徐亮伟架构师之路“累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

SaltStack课程学习地址:http://edu.51cto.com/course/13829.html

前面所有章节均以单Master管理多Minion的方式展开讨论, 这一章我们将学习如何扩展Salt的架构,解决Salt在管理大量的Minion时的扩展问题以及Salt Master的高可用和高性能问题。

1.Salt多Master架构

SaltMaster架构可以看成Master->Minion模式的简单水平扩展,两台Master都可以对所有Minion进行管理,如下图:

SaltMaster只需要在minion端配置多个Master地址即可实现
Salt支持多Master配置,SaltMaster方式是让一个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+inotifysersync方式完成实时同步, 实现的脚本思路(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-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的架构变得更加灵活和可扩展性,可以应对更多的服务器管理

重点: Syndicfile_roots、Pillar_roots必须与高级Master一致
缺点: 高级的Master并不知道自己有多少Minion,仅知道有多少syndic

3.salt无Master架构

Salt脱离Master独立运行,这种状态可以称为无mastersalt
这种模式可以用于登陆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来实施配置管理

上一篇
下一篇