轻松使用SaltStack管理成千上万台服务器(入门教程)
salt 有哪些常用函数

salt 有哪些常用函数常用的salt 函数包括:salt\_minion、salt\_master、salt-call、salt-run、salt-ssh 以及salt-cloud 等。
这些函数在saltstack 中起到了至关重要的作用,帮助用户管理和控制他们的 IT 基础设施。
salt\_minion 是作为saltstack 中被管理的节点,它会连接到salt master 并执行 master 下发的指令。
通过 salt\_minion,用户可以远程执行命令、安装软件包、管理用户等操作,实现对节点的集中管理。
salt\_master 则是 saltstack 中的控制节点,用户通过 salt\_master 来下发指令给各个minion,并收集minion 返回的结果。
salt\_master 是整个saltstack 的中枢,负责协调各个节点的工作,实现自动化运维管理。
salt-call 是saltstack 提供的一个命令行工具,可以在salt minion 上直接执行 salt state。
通过 salt-call,用户可以快速地执行 state 文件,检查系统的配置状态,并进行必要的更改。
salt-run 提供了一系列的runner 模块,可以实现一些全局性的操作,如查看minion 的状态、执行高级操作等。
通过salt-run,用户可以更方便地管理各个 minion,并对整个 saltstack 系统进行监控和控制。
salt-ssh 是saltstack 提供的一个专门针对SSH 连接的工具,用户可以通过salt-ssh 在没有安装salt minion 的节点上执行命令,实现对这些节点的管理。
salt-ssh 的使用方式类似于salt-call,但是不需要安装 minion。
salt-cloud 则是 saltstack 提供的一个用于管理云服务器的工具,用户可以通过 salt-cloud 在多个云平台上创建、管理和销毁虚拟机实例。
自动化运维与Saltstack

⾃动化运维与Saltstack⼀、⾃动化运维介绍1、⾃动化运维产⽣背景传统的IT运维是将数据中⼼中的⽹络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进⾏统⼀监控,当资源出现告警时,运维⼈员通过⼯具或者基于经验进⾏排查,找出问题并加以解决。
但是,随着互联⽹+时代的到来,移动互联⽹、云计算和⼤数据技术得到了⼴泛应⽤,从⽽导致企业所管理的IT架构不断扩⼤,服务器、虚拟化、存储设备的数量越来越多,⽹络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越⼒不从⼼。
运维的四⼤苦恼:2、运维⾃动化⾃动化运维,可实现⽇常设备监控、主动发现问题、⾃动分析定位、基于标准化流程⼯具规范化处理、通过⾃动化运维操作⼯具处理修复等功能,最终实现监管的⾃动化运维。
总结来说就是把⼈的⼯作给机器去完成,通过标准化快速分析和定位问题,将问题⾃动修复。
实现哪些⽅⾯⾃动化监控⾃动化、数据采集⾃动化、数据分析⾃动化、⽇常巡检⾃动化、设备配置⽐对⾃动化、故障定位⾃动化、故障处理⾃动化、流程处理⾃动化、⽇常备份⾃动化、系统优化⾃动化、⼤批量配置⾃动化。
3、⾃动化运维⼯具Saltstack:基于 rubby 开发,c/s 架构,⽀持多平台,可管理配置⽂件、⽤户、cron 任务、软件包、系统服务等。
分为社区版(免费)和企业版(收费),企业版⽀持图形化配置。
pupppet:基于 python 开发,c/s 架构,⽀持多平台,⽐ puppet 轻量,在远程执⾏命令时⾮常快捷,配置和使⽤⽐ puppet 容易,能实现 puppet ⼏乎所有的功能。
Ansible:更加简洁的⾃动化运维⼯具,不需要在客户端上安装 agent,基于 python 开发。
可以实现批量操作系统配置、批量程序的部署、批量运⾏命令三种运维⼯具技术特性⽐较:名称 | Puppet | SaltStack | Ansible| :-: | :-: | :-: | :-: | :-:开发语⾔ | Ruby | python | python客户端 | 有 | 有 | ⽆⼆次开发 | 不⽀持(⾃由度太低) | ⽀持 | ⽀持通信验证 | 是 | 是 | 是同学加密 | 标准SSL协议 | AES加密 | OpenSSH(点对点加密不推荐,机器压⼒⼤)平台⽀持 | AIX,BSD,HP-UX,Linux,Mac,Solaris,Windows | BSD,Linux,Mac,Solaris,Windows | AIX,BSD,HP-UX,Linux,Mac,Solaris配置⽂件格式 | Ruby语法格式 | YAML | YAMLWeb UI | 提供 | 提供 | 提供命令执⾏ | 不⽀持(配置模块可实现) | ⽀持 | ⽀持⼆、Saltstack介绍SaltStack管理⼯具允许管理员对多个操作系统创建⼀个⼀致的管理系统。
saltstack(九):saltstack配置管理—jinja模板

saltstack(九):saltstack配置管理—jinja模板saltstack配置管理—jinja模板Jinja2的应⽤场景:针对不同的操作系统安装软件,针对不同的cpu数量、内存等动态⽣成软件的配置⽂件,都需要Jinja2以及Grains和pillar 的辅助Jinja2是⼀个强⼤的python模板引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和⼀系列强⼤的功能。
其中最显著的⼀个是增加了沙箱执⾏功能和可选的⾃动转义功能,这对⼤多应⽤的安全性来说是⾮常重要的。
jinja模板包含变量或表达式,两种分隔符: {% ... %} 和 {{ ... }} 。
前者⽤于执⾏诸如 for 循环或赋值的语句,后者把表达式的结果打印到模板上。
需求:批量把httpd 0.0.0.0:80 改成9090端⼝或者本机IP:PORT⽅式每个主机IP都不⼀样的啊。
1.1 告诉File模块,你要使⽤jinja、指定参数lamp-install:pkg.installed:- pkgs:- httpd- php- php-pdo- php-mysqlapache-config:file.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://web/files/httpd.conf- user: root- group: root- mode: 644- template: jinja- defaults :PORT: 9090- require:- pkg: lamp-installapache-auth:pkg.installed:- name: httpd-tools- require_in:- cmd: apache-authcmd.run:- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin- unless: test -f /etc/httpd/conf/htpasswd_fileapache-conf:file.recurse:- name: /etc/httpd/conf.d- source: salt://web/files/apache-conf.d- watch_in:- service: lamp-service/etc/php.ini:file.managed:- source: salt://web/files/php.ini- user: root- group: root- mode: 644- watch_in:- service: lamp-servicelamp-service:service.running:- name: httpd- enable: True- reload: True- watch:- file: apache-config1.2 模板引⽤files/httpd.conf配置⽂件引⽤如下1.3 执⾏、测试执⾏前1.4 ⽀持grains赋值lamp-install:pkg.installed:- pkgs:- httpd- php- php-pdo- php-mysqlapache-config:file.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://web/files/httpd.conf- user: root- group: root- mode: 644- template: jinja- defaults :PORT: 9090IPADDR: {{ grains['fqdn_ip4'][0] }}- require:- pkg: lamp-installapache-auth:pkg.installed:- name: httpd-tools- require_in:- cmd: apache-authcmd.run:- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin - unless: test -f /etc/httpd/conf/htpasswd_fileapache-conf:file.recurse:- name: /etc/httpd/conf.d- source: salt://web/files/apache-conf.d- watch_in:- service: lamp-service/etc/php.ini:file.managed:- source: salt://web/files/php.ini- user: root- group: root- mode: 644- watch_in:- service: lamp-servicelamp-service:service.running:- name: httpd- enable: True- reload: True- watch:- file: apache-config1.5 ⽀持pillar变量例如通过pillar批量分组修改http端⼝设置好pillar分组#install.sls{% if grains['fqdn'] == 'test-tms' %}webserver: httpdhttp_port: 8081{% elif grains['fqdn'] == 'test-mall' %}webserver: nginxhttp_port: 8082{% else %}webserver: NOT-httpd-nginx{% endif %}#刷新salt 'test*' saltutil.refresh_pillar取得pillar-value分组进⾏更新#lnmp.slslamp-install:pkg.installed:- pkgs:- httpd- php- php-pdo- php-mysqlapache-config:file.managed:- name: /etc/httpd/conf/httpd.conf- source: salt://web/files/httpd.conf- user: root- group: root- mode: 644- template: jinja- defaults :PORT: {{ pillar['http_port'] }}IPADDR: {{ grains['fqdn_ip4'][0] }}- require:- pkg: lamp-installapache-auth:pkg.installed:- name: httpd-tools- require_in:- cmd: apache-authcmd.run:- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin - unless: test -f /etc/httpd/conf/htpasswd_fileapache-conf:file.recurse:- name: /etc/httpd/conf.d- source: salt://web/files/apache-conf.d- watch_in:- service: lamp-service/etc/php.ini:file.managed:- source: salt://web/files/php.ini- user: root- group: root- mode: 644- watch_in:- service: lamp-servicelamp-service:service.running:- name: httpd- enable: True- reload: True- watch:- file: apache-confighttp.conf变量设置测试salt -E 'test-mall|test-tms' state.sls web.lnmp。
saltstack partition模块用法

saltstack partition模块用法
SaltStack的Partition模块主要用于管理对象操作,这也是SaltStack通过Push 的方式进行管理的入口。
具体来说,我们日常简单的执行命令、查看包安装情况、查看服务运行情况等工作都是通过SaltStack的Partition模块来实现的。
当安装好Master和Minion包后,系统上会安装很多Module,可以通过以下命令查看支持的所有Module列表:
```bash
salt 'node1' sys.list_modules
```
其中,node1是Minion节点的名字,你可以根据实际情况替换。
使用Partition模块时,你需要根据实际需求选择合适的Module,并按照Module的文档或说明进行操作。
例如,如果你想通过SaltStack的Partition模块来安装一个软件包,你可以使用pkg.install模块,具体命令如下:
```bash
salt 'node1' pkg.install 'package_name'
```
其中,node1是Minion节点的名字,package_name是你想要安装的软件包的名称。
需要注意的是,使用SaltStack的Partition模块需要具备一定的SaltStack基础知识和经验,以及对所使用的Module的深入了解。
因此,建议在使用Partition 模块之前,先熟悉SaltStack的基本概念和操作方法,并仔细阅读你所使用的Module的文档或说明。
saltstack state.sls常用功能模板

saltstack常用功能模块编写一.简介Master - 控制中心,salt命令运行和资源状态管理端Minions - 需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息States - 配置管理的指令集Modules- 包含命令行下运行的指令,和在配置文件里面使用的指令模块可以的函数可以在命令行下运行Grains - minion端的变量,静态pillar - minion端的变量,动态,可自定义highstate - 给minion永久添加状态,从sls配置文件读取到salt schedule - 自动保持客户端配置二.常用功能执行命令cmd.runSls模板state.slsPillar自定义模块三.State.sls本文主要介绍state.sls常用基础功能写法,主要包含通过sls模板实现以下几块的管理:1.用户管理2.文件管理3.目录管理4.安装包管理5.计划任务用户管理:用户管理分为创建和删除用户,分别对应user.present和user.absent,如下sls 模板,如用户不存在,则新建用户admin和admin1,并设置相关属性:[root@]# cat init.slsadmin:user.present:- shell: /bin/bash- home: /home/admin- uid: 888admin1:user.present:- uid: 1111如下则是删除用户admin:user.absent:- purge: True- force: TruePurge:为True指删除该用户家目录以及下面的文件,类似于userdel –r Force:为True指即使该用户当前在线也强制删除添加用户的模板一般用于其他sls调用,如安装mysql的sls模板可以先调用此模板新建mysql用户。
如果是临时需要新建用户,直接用cmd.run即可文件管理:文件管理主要分为文件的上传和文件附加内容文件上传管理一般通过file.managed,如下sls,即为在minion端备份gz 包之后,将gz包传到minion目录/usr/local下,并设置相关属性[root@]# cat init.sls/usr/local/nginx-2.1.2.tar.gz:file.managed:- source: salt://nginx/nginx-xxx.xxx.tar.gz- user: root- group: root- mode: 755- backup: minion- template: jinja先备份在minion端的目录/var/cache/salt/minion/file_backup下,然后上传,长期使用备份目录会增大,恢复可用salt命令恢复或者直接手动考备份文件均可file.append用于追加文件,如下,用于安装完jdk之后将环境变量追加入profile文件里面(假设jdk安装目录为下),用于jdk安装模块调用:/etc/profile:file.append:- text:- "export JAVA_HOME=/usr/local/jdk1.6.0_13"- "export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH"- "export CLASSPATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/lib:$CLASSPATH"目录管理file.recurse将目录下的所有文件覆盖到目标minion目录,目录递归复制,类似于rsync,如果master端减少了文件,minion端默认不会删除,如下将本地conf目录的文件全部同步到线上conf,并设置相关属性/usr/local/nginx/conf:file.recurse:- source: salt://nginx/conf- user: root- group: root- file_mode: 644- dir_mode: 755- template: jinja- backup: minion- makedirs: True- include_empty: True- recurse:- user- group- mode以上模板注意空格调整成一致,一般缩进空2格新建目录,如新建/web/logstash目录,并设置相关属性,一般用于其他模板调用/web/logstash:file.directory:- user: web- group: web- file_mode: 644- dir_mode: 755- makedirs: True- include_empty: True- template: jinja- backup: minion包管理如下,如在linux下即调用系统yum命令安装相关包,常用于初始化环境或者其他模块调用依赖包,如nginx的pcre-devel等installpackages:test:- pkgs:- aspell- ncurses- ncurses-devel- pcre-devel- telnet- libcurl- libcurl-devel计划任务添加计划任务salt 'xxx' cron.set_job root 0 3 '*' '*' '*' "echo 'abc'" "mytest"删除计划任务salt 'xxx' cron.rm_job root "echo 'abc'“第二种方式就是写sls也可做计划任务/usr/local/test.sh >> /var/log/test.log 2>&1:cron.present:- identifier: test cron #计划任务描述,同上面的mytest- user: root- minute: '0'- hour: '4'/usr/sbin/ntpdate :cron.present:- identifier: ntpdate rsync- user: root- minute: '*/30'如下是一个完整的nginx安装模板:整个模板的功能就是讲nginx安装包通过file.managed上传到相关目录,调用cmd.run执行安装命令,调用用户管理模板新建用户,调用目录管理上传配置文件目录以及目录内部配置文件。
saltstack自动化运-itnihao

2013-6-22
Targeting Minions
Several ways to match
oGlob (default): 'web*' oPCRE: 'web0[1-].(chi|ny)' oList: ',' oGrains: 'os:CentOS', 'os:Arch*' oGrain PCRE: 'os:(Linux|.+BSD)' oNodegroup: (defined in master
自动化运维工具SALTSTACK
itnihao
2013-06-19
为什么要自动化运维(一)
� 规模变化所引起的运维手段不同 在互联网时代以运维的角度来看,对于不同规模、场景的应 � 用,运维所处的位置、发展的历程也有一定差异。 � 百台以下规模的运维 • 一般来说,小公司有几台到数十台机器的规模,运维主要关注的 点还是在系统及应用服务的稳定性上,不一定有专门的运维人员,通 RD 自行维护所开发的系统。不会去系统化地梳理各项运维指标, 常是 常是RD RD自行维护所开发的系统。不会去系统化地梳理各项运维指标, 而是以人的经验为主,来判断和设定系统正常与否的标准。 “救火队员 ”角色 ,一旦出故 • 在这种场景下,运维工作通常扮演的是 在这种场景下,运维工作通常扮演的是“ 救火队员” 角色, Case by Case 的 障,运维人员才开始跟进、解决。故障解决也基本是 障,运维人员才开始跟进、解决。故障解决也基本是Case Case的 。其运维方式无非是 形式,不太会有流程化的总结和问题库、知识库 形式,不太会有流程化的总结和问题库、知识库。 靠手工,辅以一些自行编写的小脚本。这种方式虽较为原始,但对许 多初创公司来 说,也算是一种低成本下可灵活实施的手法了。 • 在这个阶段,一些小巧的工具显得很有特色,例如在系统管理方 、OmniTTY 等,在数据库管 面,能够同时对多台机器进行操作的 Pssh Pssh、 OmniTTY等,在数据库管 phpMyAdmin 等足以应付平时的工作。 理方面, 理方面,phpMyAdmin phpMyAdmin等足以应付平时的工作。
快速入门网页服务器设置与管理

快速入门网页服务器设置与管理第一章:概述网页服务器网页服务器是一种用于托管和传输网页内容的软件应用程序。
它的主要功能是接收来自客户端的HTTP请求,并向客户端返回相应的HTML文档或其他资源文件。
网页服务器是构建互联网基础设施的关键组成部分,通过将网页内容提供给用户,实现了信息的快速传递与交互。
第二章:常见的网页服务器软件2.1 Apache HTTP ServerApache是最受欢迎的开源网页服务器软件之一。
它提供了丰富的功能与灵活的配置选项,可以跨多个操作系统运行。
在Apache 的配置文件中,可以设置虚拟主机、访问控制、缓存以及HTTPS 等功能。
2.2 NginxNginx是一个高性能的开源网页服务器软件。
与Apache相比,Nginx在处理静态文件和高并发请求时表现更出色。
由于其轻量级和低内存使用,Nginx往往用于负载均衡和反向代理服务器。
2.3 Microsoft IISMicrosoft Internet Information Services(IIS)是微软开发的网页服务器软件,专门为Windows操作系统设计。
IIS提供了完善的支持,包括Windows认证、FTP服务和等特性。
它是在Windows服务器环境下运行网页应用程序的首选。
第三章:网页服务器的安装与配置3.1 安装网页服务器软件根据不同的操作系统,选择相应的网页服务器软件进行下载和安装。
确保操作系统满足最低系统要求,并按照安装向导进行安装。
3.2 配置网页服务器在安装完成后,需要对网页服务器进行配置。
这包括设置监听端口、定义虚拟主机、配置访问控制和启用扩展模块等。
根据具体的网页服务器软件,可以参考相应的文档进行配置。
第四章:虚拟主机配置4.1 什么是虚拟主机虚拟主机是在一台物理服务器上托管多个网站的技术。
通过配置虚拟主机,可以将不同的域名指向不同的网站目录,实现多个网站共享同一台服务器的资源。
4.2 虚拟主机的配置步骤首先,需要在操作系统的DNS服务器或域名注册商处设置域名解析,将域名指向服务器的IP地址。
saltstack高效运维

saltstack ⾼效运维salt 介绍saltstack 是由thomas Hatch 于2011年创建的⼀个开源项⽬,设计初衷是为了实现⼀个快速的远程执⾏系统。
salt 强⼤吗系统管理员⽇常会进⾏⼤量的重复性操作,例如安装软件,修改配置⽂件,创建⽤户,批量执⾏命令等等。
如果主机数量庞⼤,单靠⼈⼯维护实在让⼈难以忍受。
早期运维⼈员会根据⾃⼰的⽣产环境来写特定脚本完成⼤量重复性⼯作,这些脚本复杂且难以维护。
系统管理员⾯临的问题主要是1、系统配置管理,2、远程执⾏命令,因此诞⽣了很多开源软件,系统维护⽅⾯有fabric 、puppet 、chef 、ansible 、saltstack 等,这些软件擅长维护系统状态或⽅便的对⼤量主机进⾏批量的命令执⾏。
salt 灵活性强⼤,可以进⾏⼤规模部署,也能进⾏⼩规模的系统部署。
salt 的设计架构适⽤于任意数量的服务器,从少量本地⽹络系统到跨越数个数据中⼼,拓扑架构都是c/s 模型,配置简单。
不管是⼏台、⼏百台、⼏千台服务器,都可以使⽤salt 在⼀个中⼼节点上进⾏管控,灵活定位任意服务器⼦集来运⾏命令。
Salt 是python 编写的,⽀持⽤户通过python ⾃定义功能模块,也提供了⼤量的python API 接⼝,⽤户可以根据需要进⾏简单快速的扩展。
saltstack 的运⾏⽅式Local 本地运⾏,交付管理Master/Minion <<< 常⽤⽅式Salt SSH 不需要客户端salt 部署基本架构在安装salt 之前,先理解salt 架构中各个⾓⾊,主要区分是salt-master 和salt-minion ,顾名思义master 是中⼼控制系统,minion 是被管理的客户端。
salt 架构中的⼀种就是master > minion。
在远程执⾏系统中,salt ⽤python 通过函数调⽤完成任务。
运⾏salt 依赖包解决依赖包最简单的办法就是⽤安装包管理器,yum ⼯具服务器环境准备# 修改虚拟机ip 地址为静态地址,并且确保可上⽹pythonzeromqpyzmppycryptomsgpack-pythonyamljinja2服务器环境centos7(master)centos7(master)ip 地址192.168.178.131192.168.178.132⾝份master slave 软件包salt-master salt-minionTYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="7d4f9ede-810f-4976-a01b-250b845c99cc"DEVICE="ens33"ONBOOT="yes"IPADDR=192.168.11.131NETMASK=255.255.255.0GATEWAY=192.168.11.1DNS1=119.29.29.29TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"BOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="f9fc5929-8594-466e-a041-34caee8c1e32"DEVICE="ens33"ONBOOT="yes"IPADDR=192.168.11.132NETMASK=255.255.255.0GATEWAY=192.168.11.1DNS1=119.29.29.29# Generated by NetworkManagernameserver 119.29.29.29127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.11.132 slave192.168.11.131 master# 关闭服务器安全策略关闭firewalldsystemctl disable firewalldsystemctl stop firewalld关闭iptablesiptables -F关闭selinux# 安装saltstacksalt软件包需要epel源的⽀持,那么下载EPEL的全称叫 Extra Packages for Enterprise Linux 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录树 引言:一个”非专职运维人员“的烦恼 Salt快速入门 1. 安装配置 2. 安装管理端(master) 3. 安装被管理端(minion) 4. 接受minion的托管请求 5. 测试 Salt的强大功能 1. 批量操作(targeting) 2. 节点分组(nodegroups) 3. 命令执行(execution) 4. 节点信息(grains) 5. 配置管理(state) 6. 小结 Salt state实例解析 1. 目录结构 2. apache/init.sls 3. ssh/init.sls 4. ssh/server.sls 5. ssh/custom-server.sls
引言:一个”非专职运维人员“的烦恼加入到某证券公司的IT部门,尽管所在的部门挂了一个“研发部”的名字,但是我发现有大概40%的时间是在做运维工作。 这来自两种情况: 1. 自主开发的应用,需要持续的改进,不断的更新、发布、部署、调整配置,这不是运维部门喜欢的状态。 2. 软件商提供的“产品”无法满足运维部门的要求:无法通过简单的 Q&A 文档保证系统的正常运行,经常需要有一定技术能力的人员解决系统运行过程中各种稀奇古怪的问题。
这种情况下只能自己做一个“非专职运维人员”,需要频繁的登录各种服务器,执行一些命令来查看状态或者更改配置(包括配置文件的变更和软件包的安装部署)。很多操作都是不断的重复,日复一日,让人厌烦。
”重复的工作应该交给程序去做“,所以我自己写过一些脚本。为了避免将脚本上传到几十台服务器并且不时进行更改,我使用Fabric来进行服务器的批量操作。
尽管避免了”批量的人工操作“,但我还是在进行”人工的批量操作“。远远没有实现自动管理。将有限的生命解放出来,投入到更有意义的编码工作是一个奔四程序员应有的追求,所以我又睁大红肿的眼睛,迷茫的搜索这个世界。
我发现了Puppet,Chef和CFEngine,但是并不满意。直到我发现了Salt,我的眼前一亮:这正是我所需要的东西。
如果说Salt有什么独特之处打动了我,那就是:
简单:可能是源于python的简约精神,Salt的安装配置和使用简单到了令人发指的地步。任何稍有经验的linux使用者可以在10分钟之内搭建一个测试环境并跑通一个例子(相比之下,puppet可能需要30--60分钟)。
高性能:Salt使用大名鼎鼎的ZeroMQ作为通讯协议,性能极高。可以在数秒钟
之内完成数据的传递 可伸缩:基于ZeroMQ通信,具备很强的扩展性;可以进行分级管理,能够管理分
布在广域网的上万台服务器。
尽管twitter、豆瓣、oracle、等著名网站的运维团队都在使用puppet,但是我相信,他们切换到salt只是一个时间问题。毕竟不是所有的人都喜欢操纵傀儡(puppet),但是谁又能离开盐(salt)呢?
关于Salt和Puppet的对比,可以参考这里,或者看看中文版。 Salt快速入门Salt的体系结构中将节点区分为: master, minion, syndic。 1. master: 老大,管理端 2. minion: 马仔,被管理端 3. syndic: 头目,对于老大来说是马仔,对于马仔来说是老大
在入门阶段,先不考虑syndic。
1. 安装配置如果将操作系统区分为: *NIX Linux Solaris HP Unix FreeBSD OS X windows
理论上来说,Salt可以安装在任何*NIX系统上,包括master和minion。除了源代码之外, 还可以通过Salt提供的安装脚本,或者PyPI进行安装。
对于Linux,尤其是企业环境中常用的RHEL,CentOS,Ubuntu,可以通过包管理器非常容易的安装master 和/或 minion。 比如: yum(需要先配置EPEL), apt(需
要增加http://debian.madduck.net/repo/库),yaourt,ports。
Mac OS X 先使用HomeBrew解决依赖包:brew install swig zmq,然后用PyPI安装:pip install salt。
对于windows,只能安装minion(windows只适合做马仔)。从官方网站下载合适的安装包。安装过程中可以指定master地址和本机名称。 安装后需要自己启动Salt服务。配置文件在C:\salt\conf\minion。
具体的各操作系统下的安装可以参考官方文档。这里为了简单,只考虑常用的RHEL/CentOS 和 windows。 在下面的例子中,使用一台RHEL/CentOS作为master, 另外一台RHEL/CentOS和一台windows 2003 Server作为 minion。
2. 安装管理端(master)# 安装EPEL,注意选择合适的版本 rpm -ivh http://mirrors.sohu.com/fedora-e ... ease-6-8.noarch.rpm yum update # 安装master yum install salt-master # 修改配置 vim /etc/salt/master # 最基本的设定服务端监听的IP(比如使用VIP做master的高可用时): # interface: 服务端监听IP # 其他配置参考[官方文
档](http://docs.saltstack.com/ref/configuration/master.html) # 启动服务(以下命令等效) salt-master -d /etc/init.d/salt-master start service salt-master start3. 安装被管理端(minion)# 安装EPEL,注意选择合适的版本
rpm -ivh http://mirrors.sohu.com/fedora-e ... ease-6-8.noarch.rpm yum update # 安装minion yum install salt-minion # 修改配置 vim /etc/salt/minion # 最基本的设定是指定master地址,以及本机标识符: # master: master的主机名或IP地址 # id: 本机标识符 # 其他配置参考[官方文
档](http://docs.saltstack.com/ref/configuration/minion.html) # 启动服务(以下命令等效) salt-minion -d /etc/init.d/salt-minion start service salt-minion start4. 接受minion的托管请求minion向master投诚后,还需要master接受才行。这个过程叫做“授信”。
Salt底层使用公钥-私钥证书来保证通信信道的安全。具体的机制可以参考ZeroMQ的相关内容。Salt已经屏蔽了底层的细节,只需要使用封装好的命令:
# 在master上运行 # 查看所有minion salt-key -L Accepted Keys: windows bond_app_server_main mac_os_vm salt-master Unaccepted Keys: minion1 minion2 Rejected Keys: #其中Unaccepted Keys是未许可的minion。可以使
用下面的命令通过认证: salt-key -a minion15. 测试安装配置好之后,首先要测试一下联通性:salt '*' test.ping。salt会列出每个认证过的minion的联通状态(true 或 false)。
再举一些例子: # 查询主机运行了多长时间 sudo salt '*' cmd.run "uptime" # 批量重启服务 salt '*' cmd.run "service httpd restart" # 让多台机器一起,使用Apache Bench进行压力测试 salt '*' cmd.run "ab -n 10 -c 2
http://www.google.com/"注意,默认情况下master和minion之间使用以下端口
进行通信: 1. 4505(publish_port): salt的消息发布系统 2. 4506(ret_port):salt客户端与服务端通信的端口 网络的设置需要保证这些端口可以访问。 Salt的强大功能上面的例子都是用Salt进行批量操作。但是Salt的功能不仅如此。
认真分析一下我的“非专职运维工作”的内容,发现可以分为以下三个方面: 1. 变更操作:根据需要对节点中某个资源的某种状态进行调整,并检验变更的结果 2. 配置管理:让上述行为变得“可管理”,支持“有关人士”对上述行为的标记、控制、识别、报告、跟踪和归档甚至审批和审计 3. 状态监控:随时掌握状态,发现异常。尽量在系统用户发现问题之前解决麻烦
Salt对上述三个方面提供了完美的支持,事实上,Salt提供的功能比我需要的还要多。下图是Salt的主要功能:
11383710700xijerc_l.jpg (123.77 KB, 下载次数: 0) 下载附件 保存到相册 2015-7-23 08:52 上传
如果想对Salt的功能和使用有一个初步的了解,最好参考官方文档:Salt Stack Walkthrough。 1. 批量操作(targeting)再回顾一下上文中的例子:
# 测试连通性 salt '*' test.ping # 查询主机运行了多长时间 sudo salt '*' cmd.run "uptime" # 批量重启服务 salt '*' cmd.run "service httpd restart" # 让多台机器一起,使用Apache Bench进行压力测试 salt '*'
cmd.run "ab -n 10 -c 2 http://www.google.com/"上面的例子都是对多个节点进行批量操作:使用通配符"'*'"对所有注册的节点进行操作。Salt支持多种方式对节点id(minion id)进行匹配。包括:
默认:通配符(globbing)) * E:正则表达式(Regular Expression) * L:列表 * N: 分组(group) * C:复合匹配