设为首页 收藏本站
查看: 1573|回复: 0

[经验分享] SaltStack远程控制、配置管理与实战介绍

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-5 17:17:49 | 显示全部楼层 |阅读模式
说明:     本文档仅写了一些基础的SaltStack操作命令,但这些命令也是工作中经常会用到的,像grains、pillar、jinja2功能更强大,但如果不是大批量升级改造的话一般不需用到。更高级的操作请参阅书籍。


1.salt常用命令salt-key –L 或 salt-key:列出各minion的授权状态
salt 'minion-25.180' sys.doc test.echo: sys.doc用来获取模块的用处和示例用法
salt 'minion-25.180' test.ping:测试是否通
salt 'minion-25.180' cmd.run ‘echo “ok”’ :发送操作指令(操作需小心)

2.salt常用参数
  • -L 列表匹配

wKiom1fJM_2CguDFAAAVExy9byQ557.jpg
  • -N 列表匹配(将主机列表写入/etc/salt/master中)

wKioL1fJNAvylILBAABvt_R4kMs989.jpg

3.常用模块3.1 file3.1.1 file.managed下发文件,确保文件存在:
/etc/passwd:
  file.managed:
-         source: salt://…/…/passwd
-         user: nginx
-         group: nginx
-         mode: 644
3.1.2 file.directory建立目录
/srv/stuff/sub:
  file.directory:
-         user: fred
-         group: users
-         mode: 755
-         makedirs: True
“makedirs: True” 与”unless:test –d dir”功能一样,只有目录不存在才会创建,而且建立目录相当于加了参数’-p’。

3.1.3 file.symlink建立软链接
/etc/grub.conf:
file.symlink:
-         targe: /boot/grub/grub.conf
3.1.4 file.recurse下发整个目录
/opt/code/flask:
  file.recurse:
-         source: salt://code/flask
-         include_empty: True

3.2 pkg模块3.2.1 pkg.installed软件安装,指定软件版本;也可以指定rpm安装、指定最新版安装
mypgks:
pkg.installed:
-         pkgs:
-         foo
-         bar: ‘>=1.2.3-4’
-         baz

3.3 service模块10.3.1 service.runnning
启动redis服务
redis:
service.running:
-         enable: True
-         reload: True
-         watch:
-         pkg: redis

3.4 cron模块每五分钟执行一次指定任务:
date > /tmp/crontest:
      cron.present:
-         user: root
minute: ‘*/5’
4.Salt端口作用Salt-master启动时会监听两个端口,默认是4505和4506。
  • 4506的作用:salt-master的ret接口,支持认证、文件服务、结果收集等功能;
  • 4505的作用:salt-master的pub接口,提供远程执行命令发送功能。


Salt-minion启动时从配置文件中获取master的地址,如果为域名,则进行解析。解析完成,会连接master的4506进行key认证。认证通过,会获取到master的publish_port(默认是4505),然后连接publish_port订阅来自master pub接口的任务。当master下发操作指令时,所有的minion都能接收到,然后minion会检查本机是否匹配。如果匹配,则执行。执行完毕后,把结果发送到master的4506由master进行处理,命令发送通信完全是异步的,并且命令包很小。此外,这些命令包通过maqpack进行序列化后数据会进一步压缩(maqpack是一种高效的二进制序列化格式),所以salt的网络负载非常低。

5. 编写自己的执行模块函数5.1编写一个简易模块默认情况下,我们的定制模块存放于/src/salt/_modules目录下,这个目录并不是默认创建的,需要建立对应的目录并添加文件,命令如下:
wKioL1fJNECzuJJlAAAg_TtZ0Ko236.jpg

模块添加完毕后,我们需要把模块推送到所有minion上,然后测试,如下,
wKioL1fJNEvCIeg5AAAXL7ipjh4285.jpg

5.2编写一个完整的模块作为系统管理员我们可能经常需要查出当前系统最占用内存的程序以及当前系统中最占用CPU的程序,当然通过salt的远程执行模块cmd.run用一行命令即可完成任务,但是作为一个会被反复使用的功能,我们把它写成一个模块会更便捷,下面动手写一个统计系统负载的模块,
cd /srv/salt/_modules
vim prank.py内容如下:
[iyunv@localhost _modules]# cat prank.py
#/usr/bin/env python
#coding:utf-8

'''
The top nth processes which take up CPU andmemory space usage are available through this module,additionaly;
the module can get the system loadinformation.
'''

import os
import salt.utils

def cpu(n):
   '''
   Return the top nth processes which take up the cpu usage for this minion
   CLI Example:
     salt '*' prank.cpu <n>
   '''
   cmd = "ps aux | sort -k3 -nr | head -n %s" % str(n)
   output = __salt__['cmd.run_stdout'](cmd)
   res = []
   for line in output.splitlines():
       res.append(line)
   return res

def mem(n):
   '''
   Return the top nth processes which take up the memory usage for thisminion
   CLI Example:
     salt '*' prank.mem <n>
   '''
   cmd = "ps aux | sort -k4 -nr | head -n %s" % str(n)
    output = __salt__['cmd.run_stdout'](cmd)
   res = []
   for line in output.splitlines():
       res.append(line)
   return res

def load():
   '''
   Return the load averages for this minion
   CLI Example:
   ..code-block:bash
     salt '*' prank.load
   '''
   load_avg = os.getloadavg()
   return {'1-min':load_avg[0],
           '5-min':load_avg[1],
           '15-min':load_avg[2],

           }

同步模块:salt ‘*’ saltutil.sync_modules
查看模块帮助:salt ‘minion-one’ sys.doc prank
实战使用:salt ‘minion-one’ prank.mem 4
                     salt ‘minion-one’ prank.cpu 4
                     salt ‘minion-one’ prank.load

6.执行模块和状态模块之间的主要区别执行模块是过程式的,而状态模块则是描述性的。连续调用同一个执行模块时,执行模块会执行相同的命令和指令。而状态模块则恰恰相反,状态模块设计为描述性的,它们只是执行必要的工作,在目标minion上创建根据描述文件指定的状态。

运行了pkg.install命令,实际上pkg.install只是运行了yum install <package>命令,而用state模块时会首先判断httpd软件是否安装了,如果没有安装就进行安装,如果已经安装过了就什么都不做。实际上不只是安装软件这一项任务如此,所有的状态描述都会遵循这个原则,只在检测到真实状态和所需状态不同的情况下才执行功能。你可以一次又一次地运行状态,只要没有不符,就不会有任何变化,这种性质叫做幂等性,可以通过判断来让minion以最小的代价进入指定的状态。

7.YAML语法SLS配置文件使用YAML语言描述。
7.1规则一:缩进Salt需要每个缩进级别由两个空格组成。
7.2规则二:冒号Key: value,这样的表示,在状态文件被调用时会将被翻译成python里的字典。
My_key:
  My_value
Python中上面的将映射为{‘My_key’:’My_value’}
7.3规则三:短横杠用一个短横杠加一个空格来表示列表项,多个项使用同样的缩进级别作为同一列表的一部分。
My_d:
-         Listone
-         Listtwo
-         Listthree
Python中,上面的将映射为{‘My_d’:[‘Listone’,’Listtwo’,’ Listthree’]}

8.实战部署听云探针8.1首先批量拷贝听云文件,建立拷贝的salt状态文件,如下, wKioL1fJNGawOOIvAAAV__f4r2U882.jpg
这里的/srv/salt目录对应/etc/salt/master里的“file_roots”设置,如下,
wKiom1fJNHDxE_1UAAAXfg6s_PU783.jpg
执行状态文件:salt –L ‘minion…’ state.sls tingyun.sls。执行完毕后,文件就拷贝到各minion端了。

8.2批量解压并修改目录属主、属组 wKioL1fJNKPRRbANAAAivQcl5Mc494.jpg
cd /usr/local/src && tingyun-agent-java.zip&& chown –R nginx.nginx /usr/local/src/tingyun && sed -i ‘s#nbs.app_name=JavaApplication# nbs.app_name= MessageServiceProvider#g’ /usr/local/src/tingyun/tingyun.properties
8.3批量修改tingyun配置 wKioL1fJNLLDez0LAAAZXRHIgqg410.jpg
8.4 svn up同步java配置Svn up命令

然后继续使用cmd.run方法重启Java服务和查看日志输出。

以上步骤都可以写入状态文件,实现一键执行,如下例。

9.实战部署CMS的jdk、maven、tomcat9.1创建状态文件,如下home-www-cms-conf:
cmd.run:
    -name: mkdir -p /home/www/cms/conf
    -unless: test -d /home/www/cms/conf
    -order: 1
home-www-cms-log-logs:
cmd.run:
    -name: mkdir -p /home/www/cms/log/logs
    -unless: test -d /home/www/cms/log/logs
    -order: 2
home-web-apache-tomcat-7.0.64-conf-Catalina-localhost:
cmd.run:
    -name: mkdir -p /home/web/apache-tomcat-7.0.64/conf/Catalina/localhost
    -unless: test -d /home/web/apache-tomcat-7.0.64/conf/Catalina/localhost
    -order: 3

/home/www/cms/conf/dubbo.properties:
file.managed:
    -source: salt://jdk_mav_tom/cmsfile/dubbo.properties
    -user: root
    -group: root
    -mode: 644
    -require:
     - cmd: home-www-cms-conf

/home/www/cms/conf/hessian.properties:
file.managed:
    -source: salt://jdk_mav_tom/cmsfile/hessian.properties
    -user: root
    -group: root
    -mode: 644
    -require:
     - cmd: home-www-cms-conf

/home/www/cms/conf/jdbc.properties:
file.managed:
    -source: salt://jdk_mav_tom/cmsfile/jdbc.properties
    -user: root
    -group: root
    -mode: 644
    -require:
     - cmd: home-www-cms-conf

/home/www/cms/cmsRun.sh:
file.managed:
    -source: salt://jdk_mav_tom/cmsfile/cmsRun.sh
    -user: root
    -group: root
    -mode: 644
    -require:
     - cmd: home-www-cms-conf
/home/web/apache-tomcat-7.0.64/conf/Catalina/localhost/ROOT.xml:
file.managed:
    -source: salt://jdk_mav_tom/cmsfile/ROOT.xml
    -user: root
    -group: root
    -mode: 644
    -require:
     - cmd: home-www-cms-conf


svn-cms:
cmd.run:
    -name: cd /home/www/cms && svn cohttp://10.103.16.3:18080/svn/web ... ct--username=832868 --password=12345Qwert --no-auth-cache && chown -Rnginx.nginx /home/www
- order: last

配置内容:没有/home/web目录就创建;拷贝java、tomcat、maven;拷贝完毕的前提下解压目录;解压成功的前提下修改目录属主属组;/etc/profile中没有配置jdk和maven环境变量的前提下,将环境变量配置好。
注:有order的状态比没有order的状态优先级高;order:last表示最后执行。
9.2执行状态文件没有报错就表示部署完毕,可以通过cmd.run命令查看确认各minion部署是否正确。


10.实战修改tomcat配置文件将server.xml放到/srv/salt/shangxian/server.xml下
10.1    sls状态文件内容如下
/home/wap/wap1/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

/home/wap/wap2/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

/home/wap/wap3/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

/home/wap/wap4/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

/home/wap/wap5/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

/home/wap/wap6/conf/server.xml:
file.managed:
    -source: salt://shangxian/server.xml
    -user: nginx
    -group: nginx
    -mode: 644

10.2执行命令salt -L'minion-38.179,minion-34.96,minion-34.97,minion-37.12,minion-37.77' state.slsxinyuan

这样,五台机器,共30个tomcat的配置文件就替换完成了。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-268083-1-1.html 上篇帖子: 运维自动化之Saltstack(二)管理minion端——远程执行(命... 下篇帖子: Saltstack (一)基本介绍和安装以及基本的配置 远程控制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表