saltstack 基础入门文档
saltstack
简述
Salt 和 Puppet Chef 一样可以让你同时在多台服务器上执行命令也包括安装和配置软件。Salt 有两个主要的功能:配置管理和远程执行。
- 源码: https://pypi.python.org/pypi/salt
- 文档: http://docs.saltstack.com/
安装
debian/ubuntu
- 设置debian更新源
wget -q -O- “http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key” | apt-key add -
echo “deb http://debian.saltstack.com/debian wheezy-saltstack main” /etc/apt/sources.list
- 设置ubuntu更新源
add-apt-repository ppa:saltstack/salt 或
echo deb http://ppa.launchpad.net/saltstack/salt/ubuntu
lsb_release -sc
main | tee /etc/apt/sources.list.d/saltstack.listwget -q -O- “http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6” | apt-key add -
- 安装软件包
apt-get update
apt-get install salt-master # On the salt-master
apt-get install salt-minion # On each salt-minion
apt-get install salt-syndic
RHEL6/CentOS6
- 设置RHEL/CentOS更新源
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
- 安装软件包
yum update
yum install salt-master # On the salt-master
yum install salt-minion # On each salt-minion
基本配置
saltstack 的配置文件格式
Salt默认使用PyAMl语法(http://pyyaml.org) 作为它的模板文件的格式,其他很多模板语言在Salt中是可以使用的。
一定要按照正确的格式书写YAML,比如最基本的,它使用到两个空格代替tab,: 或 - 后面要有空格。
例一:
interface: 0.0.0.0
log_file: /var/log/salt/master
key_logfile: /var/log/salt/key
例二:
file_roots:
base:
- /srv/salt
服务端配置
主控端基本设置
编辑配置文件 /etc/salt/master,修改如下所示配置项,去掉前面的注释符
interface: 0.0.0.0
log_file: /var/log/salt/master # 记录主控端运行日志
key_logfile: /var/log/salt/key # 记录认证证书日志
客户端配置
受控端基本设置
编辑配置文件 /etc/salt/minion,修改如下所示配置项,去掉前面的注释符#
master: 42.121.124.237 # 设置主控端IP
id: ubuntu-server-001 # 设定受控端编号
log_file: /var/log/salt/minion # 记录受控端运行日志
key_logfile: /var/log/salt/key # 记录认证证书日志
小技巧 查看配置文件信息,过滤注释语句:__
sed -e '/^#/d;/^$/d' /etc/salt/minion
检查服务
主控端,和受控端 启动各自的服务,确保服务启动后没有任何报错信息,如果异常请检查相应日志文件处理
主控端: service salt-master restart
受控端: service salt-minion restart
证书管理
如果一切顺利,请继续!
saltstack 主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用 salt-key 命令来管理证书。
salt-key -L # 用来查看证书情况
salt-key -a # 用来管理接受证书
受控端证书认证后会显示如下情形:
Accepted Keys:
ubuntu-server-001
Unaccepted Keys:
Rejected Keys:
主控端和被控端的证书默认都存放在 /etc/salt/pki/ 中,如果遇到证书不生效的情况下,可在主控端证书存放目录删除受控端证书,重新认证一下。
简单的测试
你可以从master 使用一个内置命令 test.ping 来测试他们之间的连接
salt '*' cmd.run test.ping
它应该有如下输出:
{ubuntu-server-001: True}
测试与外网的连接
salt '*' cmd.run "ping -c 4 baidu.com"
如果能返回正确结果,salt的基本配置就完成了。
进阶,配置管理
个人理解,管理一个服务器应用可以从 软件包,配置文件,服务管理 这个三个最基本角度来出发,要启用配置管理,首先应对受控端进行额外的配置
启用扩展配置文件目录
主控端 /etc/salt/master
default_include: master.d/*.conf
受控端 /etc/salt/minion
default_include: master.d/*.conf
配置受控端
- 配置受控端,以root用户身份来接受主控端的控制 编辑/etc/salt/minion
user: root
- 配置受控端同步,每隔60秒与主控端进行同步一次 编辑/etc/salt/minion
schedule:
highstate:
function: state.highstate
seconds: 60
配置主控端
一般来讲,Salt的配置管理指令和文件保存在/srv/salt目录下,这里存放着所有的配置文件,和一些你想要拷贝到从服务器的文件。Salt 的特点之一是包含一个文件服务器。虽然Salt不会在你的主服务器创建系统文件,但是所有的配置管理发生在/srv/salt目录中。
- 编辑 /etc/salt/master 取消注释即删除#号,配置仓库根目录下的 top.sls 为默认入口配置文件,这个配置项可以自定义,基本配置如下:
file_roots:
base:
- /srv/salt
- 创建 /srv/salt/top.sis 目录和文件
base:
'*':
- ubuntu.vim
详细解释一下这个本配置文件的参数
- base: 默认的的起点配置项:
- '*': 这个引号内的是匹配对象,针对所有受控主机
- ubuntu.vim 就是指资源文件/srv/salt/ubuntu/vim.sls
一个简单的例子:ubuntu 基本系统默是不安装 vim 我们可以利用配置管理把被托管的ubuntu主机全部安装上vim
编辑 /srv/salt/ubuntu/vim.sls
vim:
pkg:
- name: vim
- installed
执行命令
salt '*' state.highstate
请注意观察返回结果,查看/var/log/salt/下面的日志来调试saltstack配置。
一个更复杂的例子:管理ssh服务,并且使用salt托管配置文件
ssh:
pkg:
- name: ssh
- installed
service:
- name: ssh
- running
- reload: True
- watch:
- file: /etc/ssh/ssh_config
/etc/ssh/ssh_config:
file.managed:
- source: salt://ubuntu/ssh_config
- user: root
- group: root
- mode: 644
简要解释一下配置文件
- pkg, service , file 这些都是salt的管理模块,pkg 是包管理模块; file是文件管理模块; service 是包服务管理模块
- 模块下一级是各个管理模块配置项的属性,以 service: 模块为例
- name: ssh ubuntu下的服务脚本名称是 ssh
- running 状态是持续运行,如果受控端配置了自动同步,每格一段时间就会对其状态进行检查
- reload: True 是否重载服务
- watch: 监视文件
- 最后两条属性的整体含义是如果配置文件 /etc/ssh/ssh_config 发生变化,服务重启更新
- source: salt://ubuntu/ssh_config 托管的配置文件实际存储在 /srv/salt/ubuntu/ssh_config
同样,使用如下命令来验证结果需要
salt '*' state.highstate
如果需要管理更复杂的服务器群,下面是一个稍微复杂的例子
/srv/salt/top.sls 内容:
base:
'ubuntu-server-*':
- ubuntu.vim
'ubuntu-server-001':
- ubuntu.servers
'centos-server-001':
- rhel.servers
配置仓库目录层次结构
/srv/salt/
├── top.sls
├── rhel
│ └── servers.sls
└── ubuntu
├── servers.sls
├── ssh_config
└── vim.sls
最后,补充一点,把配置仓库和版本控制工具结合起来,将是一件更美好的事情。
参考
二进制软件包
rpm deb 不同包管理体系,不同发行版二进制包拆分命名规则不尽相同,相比之下 deb 拆分的力度要更细些。
RHEL6/CentOS 软件包列表
- salt
- salt-master
- salt-minion
- salt-api
- salt-cloud
Deian/Ubuntu 软件包列表
- salt-master
- salt-minion
- salt-syndic
- salt-doc
- salt-common
- salt-cloud
- salt-cloud-doc
- salt-api
- salt-ssh
下面按照服务端(主控端)和客户端(受控端)来说明主要功能项。
主控端命令列表
- /usr/bin/salt 主控命令
- /usr/bin/salt-cp 批量复制文件
- /usr/bin/salt-key 证书管理
- /usr/bin/salt-master 服务端程序
- /usr/bin/salt-run 管理虚拟机
- /usr/bin/salt-ssh 管理ssh
- /usr/bin/salt-syndic master分布式节点服务程序
受控端命令列表
- /usr/bin/salt-call
- /usr/bin/salt-minion 客户端程序
基本操作
基本操作命令通用格式
命令 对象 执行模块 参数
salt '*' cmd.run "ping -c 4 baidu.com"
'*' 操作对象 可以使用salt命令的扩展模式 -E -G ..
cmd.run 执行模块
参数 传递给执行模块的参数
分组功能
编辑 /etc/salt/master
nodegroups:
UBUNTU: 'ubuntu-12.04-*'
CENTOS: 'centos-6.4-*'
建立分组之后,操作对象使用分组功能才生效
命令示例
salt
测试与受控主机网络是否通畅
salt '*' cmd.run test.ping
在全部受控主机行执行命令
salt '*' cmd.run “uptime”
使用 -E 按照正则匹配操作对象
salt -E 'ubuntu*' cmd.run “uptime”
使用 -N 按照分组匹配操作对象
salt -N 'UBUNTU-GROUPS' cmd.run “uptime”
使用 -G 按照查询信息匹配操作对象选项
salt -G 'cpuarch:x86_64' grains.item num_cpus
查看受控端模块函数帮助信息
salt '*' sys.doc
查看受控端模块函数帮助信息
salt '*' sys.doc service
salt-master
- 启动服务
salt-master -d
salt-key
- 查看证书
salt-key -L
- 接受指定的证书
salt-key -a KeyName
- 接受所有未认证的证书
salt-key -A
- 删除所有证书
salt-key -D
- 删除指定的证书
salt-key -d KeyName
salt-cp
*批量复制文件到受控主机
salt-cp '*' /home/vmdisk.img /var/lib/libvirtsh/vmdisk.img
*拷贝小文件很有效,简单测试,拷贝2.5MB以上的文件就会超时报错
salt-run
salt-run 是用于管理虚拟机的命令
查询虚拟机信息
salt-run virt.hyper_info
查询虚拟机信息
salt-run virt.query
基于云镜像创建一个新的虚拟机
salt-run virt.init centos1 2 512 salt://centos.img
salt-ssh
编辑配置文件 /etc/salt/roster
ubuntu-12.04-001:
host: 10.8.0.18
user: root
passwd: root
sudo: True简单的测试
salt-ssh '*' test.ping
测试执行命令
salt-ssh '*' -r “ifconfig -a”
salt-syndic
salt的master和minion的交互很大程度上都和网络有关系,比如在管理多个国家的机器的时候(比如大中华局域网),一个master控制多个master,同时被控制的master又可以控制很多的minion,就好比是在 master 和 minions 之间又加了一层的分布式架构。
salt-minion
启动服务
salt-minion -d
salt-call
内置模块列表
- 内置的状态模块的完整列表: http://docs.saltstack.com/ref/states/all/index.html
- 内置的执行模块的完整列表: http://docs.saltstack.com/ref/modules/all/index.html
参考文档
- http://netkiller.github.io/linux/management/saltstack/
唧唧歪歪
- saltstack 可能由于比较新的缘故,版本之间支持的模块差异较大,建议最好主控端,受控端使用相同版本的软件包;
问题:
- 证书管理 ssh_auth salt 模块(优先处理)
- 配置仓库,符号链接
- 是否支持,配置模板
- 如何针对 特例机器进行定义配置?
- 一台机器是否属于多个组
- salt 配置仓库 致命错误情况能否回滚
- 是否支持 lsattr 如何保证重要配置文件不轻易被更改
- 如何输出给程序解析结果
- 怎么支持自定义的模块
- 主机命名分组避免使用
来自:http://my.oschina.net/u/877567/blog/182923
saltstack 基础入门文档的更多相关文章
- Apache BeanUtils 1.9.2 官方入门文档
为什么需要Apache BeanUtils? Apache BeanUtils 是 Apache开源软件组织下面的一个项目,被广泛使用于Spring.Struts.Hibernate等框架,有数千个j ...
- vuex最简单、最直白、最全的入门文档
前言 我们经常用element-ui做后台管理系统,经常会遇到父组件给子组件传递数据,下面一个简单的例子,点击按钮,把弹框显示变量数据通过子组件的props属性传递,子组件通过$emit事件监听把数据 ...
- Entity Framework Core 中文入门文档
点击链接查看文档: Entity Framework Core 中文入门文档
- django 中文入门文档
django中文入门文档:阅读地址
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- Java 学习(20):Java Applet 基础 & Java 文档注释
-- Java Applet 基础 -- Java 文档注释 Java Applet 基础 Applet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Ja ...
- 【简明翻译】Hibernate 5.4 Getting Started Guide 官方入门文档
前言 最近的精力主要集中在Hibernate上,在意识到Hibernate 5 的中文资料并不多的时候,我不得不把目光转向Hibernate的官方doc,学习之余简要翻一下入门文档. 原文地址:htt ...
- Duilib入门文档提供下载
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] Duilib入门文档 基本框架 编写界面xml 响应事件 贴图描述 类html文本描述 动态换肤 Dll插件 资源打包 Duil ...
- TypeScript入门文档
typescript入门文档链接d地址:https://ts.xcatliu.com/basics/type-of-function.html 博主个人站点:www.devloper.top
随机推荐
- Android -- 状态栏高度
干货 Class<?> c = null; Object obj = null; Field field = null; int x = 0, sbar = 0; try { c = Cl ...
- POJ 3525 Most Distant Point from the Sea 二分+半平面交
题目就是求多变形内部一点. 使得到任意边距离中的最小值最大. 那么我们想一下,可以发现其实求是看一个圆是否能放进这个多边形中. 那么我们就二分这个半径r,然后将多边形的每条边都往内退r距离. 求半平面 ...
- JAVA-错误The type BookServiceImpl must implement the inherited abstract method
错误原因 :是因为class继承了其他的类,没有导入过来,选择add unimplemented methods进行解决
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(四)针对hadoop2.9.0启动执行start-all.sh出现异常:failed to launch: nice -n 0 /bin/spark-class org.apache.spark.deploy.worker.Worker
启动问题: 执行start-all.sh出现以下异常信息: failed to launch: nice -n 0 /bin/spark-class org.apache.spark.deploy.w ...
- php5.3升级脚本
在lanmp/wdcp/wdOS的当前版本中,默认的php都是用到5.2.17的版本如需要升级到php5.3的,可使用如下脚本升级(注:此升级无安全漏洞等原因,只为某些追求高版本或应用需求需要高版本, ...
- JAVA Eclipse如何导入已有的项目
File-Import,然后在弹出的窗口中输入exit,会自动提示下面的选项(已存在的项目) 把项目源代码放到Eclipse的工作目录,然后找到 导入完成
- docker安装tomcat
先在官网上找可用的镜像 我使用的是7-jre8 获取tomcat镜像的命令:$docker pull tomcat:7-jre8 获取完镜像以后,通过命令可以列举出已有的镜像: 列举镜像的命令:$do ...
- 微信小程序 - 分包加载(独立分包)
独立分包是小程序中一种特殊类型的分包,可以独立于主包和其他分包运行.从独立分包中页面进入小程序时,不需要下载主包.当用户进入普通分包或主包内页面时,主包才会被下载 将某些具有一定功能独立性的页面配置到 ...
- JAVA设计模式——第 7 章 门面模式【Facade Pattern】(转)
好,我们继续讲课.大家都是高智商的人,都写过纸质的信件吧,比如给女朋友写情书什么的,写信的过程大家都还记得吧,先写信的内容,然后写信封,然后把信放到信封中,封好,投递到信箱中进行邮递,这个过程还是比较 ...
- 算法笔记_226:填符号凑算式(Java)
目录 1 问题描述 2 解决方案 1 问题描述 匪警请拨110,即使手机欠费也可拨通! 为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训 ...