10 masterless、高可用、salt执行模块开发、sydic架构

1、salt无master

官方文档: http://docs.saltstack.cn/topics/tutorials/quickstart.html

1、使用场景

1.在项目中使用salt,写一个state,salt自动帮你配置ok

2.没有master情况,使用salt,比如mac笔记本

3.本地运行state,一台服务器怎样用salt

 

场景: 2w台门店的电脑,网络不稳定

用master minion,一天只能连接几十台

解决:salt-call,连接一次,下发所有的计划任务,自己去跑

2、node3安装配置

node3安装salt-minion

https://www.cnblogs.com/venicid/p/11258428.html#_label1

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget https://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost yum.repos.d]# yum clean expire-cache
[root@localhost yum.repos.d]# yum install salt-minion -y

配置salt无master模式

 

 

 

 

3、本地执行

 停止minion

  本地执行

# 查看帮助
[root@localhost yum.repos.d]# salt-call -he
[root@localhost yum.repos.d]# salt-call --local cmd.run w

 

4、执行状态

# 创建salt目录
[root@localhost yum.repos.d]# cd
[root@localhost ~]# mkdir /srv/salt
[root@localhost ~]# cd /srv/salt

# 创建状态
[root@localhost salt]# vim demo.sls

# 创建top
[root@localhost salt]# vim top.sls

 

# 执行state
[root@localhost salt]# salt-call --local state.sls demo
# top执行
[root@localhost salt]# salt-call --local state.highstate

2、slat-master高可用 

官方文档 http://docs.saltstack.cn/topics/tutorials/multimaster.html

1、什么是高可用 

master是单点的,万一1个挂了,启动备份的

其他配置

告诉minion是多个master的

超时时间

 

2、node3装master

node1为master

[root@localhost ~]# yum install salt-master -y

 node2为minion

[root@linux-node2 ~]# vim /etc/salt/minion

 

3、数据怎么同步

数据同步要自己来做???

配置文件同步

[root@linux-node1 ~]# scp -P 22 /etc/salt/master 192.168.194.128:/etc/salt
Warning: Permanently added '192.168.194.128' (ECDSA) to the list of known hosts.
root@192.168.194.128's password: 
master                                                              100%   29KB  15.9MB/s   00:00    
[root@linux-node1 ~]# 

master-key同步

minion-key同步

 

 file roots,piliar roots 同步

简便方法。搞个fs,去mount

mount,老师也是

key比较重要,官方不建议

3、salt执行模块开发

1、service模块

[root@linux-node1 ~]# ls /usr/lib/python2.7/site-packages/salt/modules/

 

service模块 

2、cmd.retcode

[root@linux-node1 /srv/salt/base/_modules]# salt \* cmd.retcode 'touch /opt/testtesttest'
[root@linux-node1 /srv/salt/base/_modules]# salt \* cmd.retcode 'iotop -b -n 30'

 

3、自定义模块

路径,_modules,不能修改

[root@linux-node1 ~]# cd /srv/salt/base/
[root@linux-node1 /srv/salt/base]# mkdir _modules
[root@linux-node1 /srv/salt/base]# ll
total 8
drwxr-xr-x. 3 root root 4096 Aug  8 03:06 init
drwxr-xr-x  2 root root    6 Nov  4 22:34 _modules
-rw-r--r--  1 root root  404 Nov  4 05:36 top.sls
drwxr-xr-x. 3 root root   37 Jul 30 09:25 web
[root@linux-node1 /srv/salt/base]# cd _modules/

 创建模块

[root@linux-node1 /srv/salt/base/_modules]# vim my_disk.py
[root@linux-node1 /srv/salt/base/_modules]# cat my_disk.py 
def list():
    cmd = 'df -h'
    ret = __salt__['cmd.run'](cmd)
    return ret

同步到所有minion

 

 

 master执行

[root@linux-node1 /srv/salt/base/_modules]# salt \* my_disk.list

 4、syndic架构

管理上万个minion

一个master管理的minion是有限的

官网 https://docs.saltstack.com/en/latest/topics/topology/syndic.html

参考blog:https://www.cnblogs.com/kaishirenshi/p/9420790.html

                http://www.ttlsa.com/saltstack/saltstack-syndic-example/

1、安装

多层syndic

 

node3 装master

[root@localhost ~]# yum install salt-master -y

node1 装 sydic

[root@linux-node1 ~]# yum install salt-syndic -y

 2、配置

 node1陈浩南配置 MasterOfMaster:node3 蒋先生

master和syndic在同一个机器,同一个配置文件

[root@linux-node1 ~]# vim /etc/salt/master

 node3 蒋先生,order_master

[root@localhost ~]# vim /etc/salt/master 

 3、启动

node1 陈浩南

 node3蒋先生

node3执行 salt-key

蒋先生node3接受陈浩南node1

 

 这是,陈浩南node1管理下的2个minion小弟

 master:注意,返回的结果是所有minion端的结果,而不是syndic端本身的结果。

 

syndic其实是特殊的minion

4、优化

 涉及到文件的同步,不涉及到key

有点:可以创建多层级的

缺点,涉及到数据同步

        master不知道自己有多少个sydic (代码设计模式中,不知道)

 

不是特别的完美

其他公司:

      1. 用消息队列,代替syndic,agent和master中间加个消息队列。像OpenStack

      2. 调优,网络稳定时候可以用

      3. 做多个集群,分而治之

 

posted @ 2019-11-04 22:03  venicid  阅读(413)  评论(0)    收藏  举报