Salt 和 Puppet Chef 同样可让你同时在多台服务器上执行命令也包括安装和配置软件。Salt 有两个主要的功能:配置管理和远程执行。html
wget -q -O- “http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key” | apt-key add -node
echo “deb http://debian.saltstack.com/debian wheezy-saltstack main” /etc/apt/sources.listpython
add-apt-repository ppa:saltstack/salt 或linux
echo deb http://ppa.launchpad.net/saltstack/salt/ubuntu
lsb_release -sc
main | tee /etc/apt/sources.list.d/saltstack.listgitwget -q -O- “http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6” | apt-key add -github
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
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm或ubuntu
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmvim
yum update yum install salt-master # On the salt-master yum install salt-minion # On each salt-minion
saltstack 的配置文件格式centos
Salt默认使用PyAMl语法(http://pyyaml.org) 做为它的模板文件的格式,其余不少模板语言在Salt中是可使用的。
必定要按照正确的格式书写YAML,好比最基本的,它使用到两个空格代替tab,: 或 - 后面要有空格。api
例一:
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
user: root
schedule: highstate: function: state.highstate seconds: 60
通常来说,Salt的配置管理指令和文件保存在/srv/salt目录下,这里存放着全部的配置文件,和一些你想要拷贝到从服务器的文件。Salt 的特色之一是包含一个文件服务器。虽然Salt不会在你的主服务器建立系统文件,可是全部的配置管理发生在/srv/salt目录中。
file_roots: base: - /srv/salt
base: '*': - ubuntu.vim
详细解释一下这个本配置文件的参数
一个简单的例子: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
简要解释一下配置文件
一样,使用以下命令来验证结果须要
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 软件包列表
Deian/Ubuntu 软件包列表
下面按照服务端(主控端)和客户端(受控端)来讲明主要功能项。
基本操做命令通用格式
命令 对象 执行模块 参数 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 '*' 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 -d
salt-key -L
salt-key -a KeyName
salt-key -A
salt-key -D
salt-key -d KeyName
*批量复制文件到受控主机
salt-cp '*' /home/vmdisk.img /var/lib/libvirtsh/vmdisk.img
*拷贝小文件颇有效,简单测试,拷贝2.5MB以上的文件就会超时报错
salt-run 是用于管理虚拟机的命令
查询虚拟机信息
salt-run virt.hyper_info
查询虚拟机信息
salt-run virt.query
基于云镜像建立一个新的虚拟机
salt-run virt.init centos1 2 512 salt://centos.img
编辑配置文件 /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的master和minion的交互很大程度上都和网络有关系,好比在管理多个国家的机器的时候(好比大中华局域网),一个master控制多个master,同时被控制的master又能够控制不少的minion,就比如是在 master 和 minions 之间又加了一层的分布式架构。
启动服务
salt-minion -d
问题:
来自:http://my.oschina.net/u/877567/blog/182923