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. 做多个集群,分而治之