Saltstack入门到精通教程(十):syndic详解

假设公司有多个分支,每个分支有多台机器需要管理,这个时候最好的办法就是在每个分子创建一台proxy去管理本分支内的机器,同时在总部有一台中心master连接到每个分支的proxy进行统一管理。这种proxy在saltstack里面叫做syndic。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

文章目录

    • 配置步骤
    • 报错分析
    • key的对应关系
    • syndic也做为minion
    • 文件系统
    • 总结

配置步骤

原先的拓扑为minion1和minion2都连接到master,现在将minion1更改为syndic节点,minion2连接到syndic,syndic再连接到master。

  • 在master上删除两个minion的key
root@saltmaster:/home/vagrant# salt-key -D
  • 修改minion1的id为syndic

首先停掉salt-minion服务

root@minion1:/etc/salt# systemctl stop salt-minion

修改id为syndic

root@minion1:/etc/salt# cat minion | grep ^id
id: syndic

需要注意的是这个在/etc/salt/minion配置的id是syndic服务和minion服务共享的。

  • 在minion1安装syndic

安装之前minion1做为一个纯粹的minion,只有salt-minion这一个服务在跑,能配置的配置项也只有/etc/salt/minion这一个选项。

直接一键安装salt-syndic

root@minion1:/etc/salt# apt-get install -y salt-syndic

之后多出来了salt-mastersalt-syndic两个服务

root@minion1:/etc/salt# systemctl list-unit-files | grep salt
salt-master.service                         enabled
salt-minion.service                         enabled
[email protected]                         disabled
salt-syndic.service                         enabled

配置项也多了/etc/salt/master

  • 修改syndic的配置

修改syndic机器上的/etc/salt/master,配置master的地址

root@minion1:/etc/salt# cat master | grep ^syndic
syndic_master: 192.168.50.10

这个地址是原先master的地址

  • 修改minion2的master配置

停掉minion2的salt-minion服务

root@minion2:/home/vagrant# systemctl stop salt-minion

删除master在minion2上保存的key

root@minion2:/etc/salt/pki/minion# rm minion_master.pub

修改master的地址为syndic的地址

root@minion2:/etc/salt# cat minion | grep ^master
master: 192.168.50.11

原master的地址为192.168.50.10

  • 在master上启动syndic服务

修改/etc/salt/master

root@saltmaster:/etc/salt# cat master | grep ^order
order_masters: True

重启salt-master服务

root@saltmaster:/etc/salt# systemctl restart salt-master
  • 启动其余机器服务

syndic机器重启salt-syndic服务

root@minion1:/etc/salt# systemctl restart salt-syndic

minion2上启动salt-minion服务

root@minion2:/etc/salt# systemctl start salt-minion
  • 完成配置

分别在master机器和syndic机器上接受key即可

root@saltmaster:/etc/salt# salt-key -A
root@minion1:/etc/salt/pki# salt-key -A

报错分析

按照上述步骤操作以后,尝试在master上验证连通性,发现没有返回

salt '*' test.ping

在syndic上查看日志,日志的目录在/var/log/salt

root@minion1:/etc/salt/pki# tail -f /var/log/salt/syndic
2020-02-02 13:19:35,021 [salt.minion      :3116][CRITICAL][18165] Unable to call _fire_master on any masters!
2020-02-02 13:19:39,255 [salt.crypt       :757 ][ERROR   ][18165] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
2020-02-02 13:19:45,019 [salt.minion      :3102][ERROR   ][18165] Unable to call _fire_master on 192.168.50.10, that syndic is not connected
2020-02-02 13:19:45,022 [salt.minion      :3116][CRITICAL][18165] Unable to call _fire_master on any masters!
2020-02-02 13:19:49,270 [salt.crypt       :757 ][ERROR   ][18165] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
2020-02-02 13:19:55,018 [salt.minion      :3102][ERROR   ][18165] Unable to call _fire_master on 192.168.50.10, that syndic is not connected
2020-02-02 13:19:55,022 [salt.minion      :3116][CRITICAL][18165] Unable to call _fire_master on any masters!
2020-02-02 13:19:59,290 [salt.crypt       :757 ][ERROR   ][18165] The Salt Master has cached the public key for this node, this salt minion will wait for 10 seconds before attempting to re-authenticate
2020-02-02 13:20:05,018 [salt.minion      :3102][ERROR   ][18165] Unable to call _fire_master on 192.168.50.10, that syndic is not connected
2020-02-02 13:20:05,021 [salt.minion      :3116][CRITICAL][18165] Unable to call _fire_master on any masters!

显示是因为认证问题导致。等待几秒钟,然后重新在master上添加以下syndic的key解决了这个问题。

这个时候如果在master去验证连通性的话,只会发现minion2会返回,注意syndic并没有返回,下面会介绍如何让syndic也能够被管理

root@saltmaster:/etc/salt/pki/master/minions# salt '*' test.ping
minion2:
    True

key的对应关系

关于key的管理,我的另一篇博客《Saltstack入门到精通教程(九):key管理和id修改》写的比较详细,这里针对syndic的情况做一个补充。

  • master
    会存储syndic的public key,在/etc/salt/pki/master/minions/

  • syndic
    会存储master的public key,在/etc/salt/pki/minion/minion_master.pub
    会存储底下minion的public key,在/etc/salt/pki/master/minions/

  • minion
    会存储syndic的public key,在/etc/salt/pki/minion/minion_master.pub

syndic也做为minion

如果把syndic上的salt-minion服务也启动的话,这时候不需要再在master上接受key就可以直接去管理syndic机器了

root@saltmaster:/etc/salt/pki/master# salt '*' test.ping
syndic:
    True
minion2:
    True

文件系统

这个是重点!

如果只是从master去经过syndic连接的minion简单远程执行命令就跟直连没啥区别,但是假如我们试试从master上下发pillar到minion2。首先创建/srv/pillar/syndic_test.sls

name: xiaofu
sex: male

然后在top.sls里面进行分配

base:
  'minion2':
    - syndic_test

刷新pillar以后发现根本没有起作用

root@saltmaster:/etc/salt/pki/master# salt '*' saltutil.refresh_pillar
syndic:
    True
minion2:
    True
root@saltmaster:/etc/salt/pki/master# salt 'minion2' pillar.items
minion2:
    ----------

这就说到syndic架构的一个重点了,minion只能从直接相连的master获得file_roots以及pillar_roots里面的内容,被syndic控制的minion只能从syndic的文件系统获得文件

那么利用rsync将master上的/srv/pillar文件夹同步到syndic上试试看。因为我们用的是vagrant账号进行同步,首先在syndic机器上创建/srv目录并更改权限为777

root@minion1:/# chmod 777 srv
root@minion1:/# ll -d srv
drwxrwxrwx 2 root root 4096 Feb  2 18:02 srv/

然后从master进行整个文件夹的同步

root@saltmaster:/srv# rsync -avzr pillar [email protected]:/srv

如果你和我一样用的官方演示环境,默认密码为vagrant

成功同步后再试着进行pillar下发,发现成功了

root@saltmaster:/srv# salt '*' saltutil.refresh_pillar
syndic:
    True
minion2:
    True
root@saltmaster:/srv# salt 'minion2' pillar.items
minion2:
    ----------
    name:
        xiaofu
    sex:
        male

我们经常会用到的state配置管理也是一样!

这就需要我们在master上维护一个脚本,一键同步file_rootspillar_roots对应的两个文件夹到所有的syndic。在salt操作之前首先进行文件同步。

总结

相信接触过zabbix-proxy的朋友对syndic的使用会有种似曾相识的感觉。syndic的配置并不难,主要是在于文件系统,是重点需要掌握的部分。

你可能感兴趣的:(Saltstack入门到精通教程(十):syndic详解)