SaltStack是基础设施管理的一种具有革命性意义的方法,以速度替代复杂性。SaltStack足够简单,可以在几分钟内运行,可扩展到足以管理数万台服务器,并且能够在几秒钟内快速与每个系统进行通信。
底层采用动态的连接总线(ZeroMQ消息队列pub/sub方式通信),使用ssl证书签发的方式进行认证管理
yum -y install salt-master salt-minion systemctl start salt-master systemctl enable salt-master
yum -y install salt-minion sed -i 's/#master: salt/master: IPADDRESS/g' /etc/salt/minion systemctl start salt-minion systemctl enable salt-minion
git clone https://github.com/saltstack/salt.git pip install -r salt/requirements/zeromq.txt python salt/setup.py install mkdir /etc/salt/; cp salt/conf/master /etc/salt/ salt-master -d
git clone https://github.com/saltstack/salt.git pip install -r salt/requirements/zeromq.txt python salt/setup.py installSalt mkdir /etc/salt/; cp salt/conf/minion /etc/salt/ sed -i 's/#master: salt/master: IPADDRESS/g' /etc/salt/minion #IPADDRESS为Master服务器地址 salt-minion -d
pip install salt mkdir /etc/salt/;wget -SO /etc/salt/master https://github.com/saltstack/salt/blob/develop/conf/master salt-master -d
pip install salt mkdir /etc/salt/;wget -SO /etc/salt/minion https://github.com/saltstack/salt/blob/develop/conf/minion sed -i 's/#master: salt/master: IPADDRESS/g' /etc/salt/minion #IPADDRESS为Master服务器地址 salt-minion -d
salt-bootstrap是SaltStack的一个单独项目,该项目主要用于解决多平台一键部署SaltStack环境。核心工程就是维护一个庞大的bash脚本
Wget -c https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh —no-check-certificate wget -O [bootstrap-salt.sh](http://bootstrap-salt.sh) https://bootstrap.saltstack.com sudo sh [bootstrap-salt.sh](http://bootstrap-salt.sh)
只安装最新版Minion并且指定Minion id关于salt-bootstrap脚本的参数大家可以运行sh install_salt.sh -h查看,该脚本也提供非常方便的一键部署参数。
echo "IPADDRESS salt" >> /etc/hosts #IPADDRESS为Master服务器地址 curl -L https://bootstrap.saltstack.com -o install_salt.sh sh install_salt.sh -i Minion
master 和minion 全部直连
4505 (publish_port) Salt Master pub 接口
可以通过修改/etc/salt/master配置文件的publish_port参数设置。它是salt的消息发布系统,如果查看4505端口,会发现所有的Minion连接到Master的4505端口,TCP状态持续保持为ESTABLISHED。
4506 (ret_port) Salt-Master Ret 接口
ZeroMQ REP系统,默认监听4506端口,可以通过修改/etc/salt/master配置文件的ret_port参数设置。它是salt客户端与服务端通信的端口。比如说Minion执行某个命令后的返回值就是发送给Master的4506这个REP端口
user: 指定master 进程的运⾏⽤户, 如果调整, 则需要调整部分目录的权限(默认为root)
timeout: 指定timeout时间, 如果minion规模庞⼤或⺴络状况不好,建议增⼤该值(默认5s)
keep_jobs: 默认情况下, minion 会执⾏结果会返回master, master会缓存到本地的cachedir 目录, 该参数指定缓存多⻓时间, 以供查看之前的执⾏结果, 会占⽤磁盘空间(默认为24h)
job_cache: master 是否缓存执⾏结果, 如果规模庞⼤(超过5000台), 建议使⽤其他⽅式来存储jobs, 关闭本选项(默认为True)
file_recv : 是否允许minion传送⽂件到master 上(默认是Flase)
file_roots: 指定file server目录, 默认为:
file_roots: base: - /srv/salt
指定pillar 目录, 默认为:log_level: 执⾏⽇志级别, ⽀持的⽇志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)
pillar_roots base: - /srv/pillar
/etc/salt/master /etc/salt/minion
/usr/bin/python /usr/bin/salt-master -d /usr/bin/python /usr/bin/salt-minion -d
Salt-key 命令来管理minion 密钥
[root@server ~]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: minion-one Rejected Keys:
master上接受密钥
[root@localhost ~]# salt-key -L Accepted Keys: Denied Keys: Unaccepted Keys: 192.168.1.11 Rejected Keys: [root@localhost ~]# salt-key -A -y The following keys are going to be accepted: Unaccepted Keys: 192.168.1.11 Key for minion 192.168.1.11 accepted. [root@localhost ~]# salt-key -L Accepted Keys: 192.168.1.11 Denied Keys: Unaccepted Keys: Rejected Keys:
minion在第一次启动时, 会自动生成minion.pem, 然后将 minion.pub发送给master。master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的 public key,然后master就能对minion发送指令了。
查看密钥的职位密码来确保其与minion的密钥相匹配,在master上查看
[root@server ~]# salt-key -f minion-one Unaccepted Keys: minion-one: ad:e0:1c:1f:46:c6:93:24:fb:e6:b2:f5:bc:e5:fa:b6
在minion上查询minion的私钥
[root@client ~]# salt-call --local key.finger local: ad:e0:1c:1f:46:c6:93:24:fb:e6:b2:f5:bc:e5:fa:b6
在命令行中和配置文件中使用的指令模块,可以在命令行中运行
为minion端下发永久添加状态,从sls配置文件读取.即同步状态配置
触发所有minion从master下载top.sls文件以及其中定一个的states,然后编译、执行。执行完之后,minion会将执行结果的摘要信息汇报给master。
[root@localhost pillar]# salt '*' state.highstate 192.168.1.11: ---------- ID: apache-service Function: pkg.installed Name: httpd Result: True Comment: The following packages were installed/updated: httpd Started: 04:25:07.910627 Duration: 77592.817 ms Changes: ---------- apr: ---------- new: 1.4.8-3.el7_4.1 old: apr-util: ---------- new: 1.5.2-6.el7 old: httpd: ---------- new: 2.4.6-89.el7.centos old: httpd-tools: ---------- new: 2.4.6-89.el7.centos old: mailcap: ---------- new: 2.1.41-2.el7 old: ---------- ID: apache-service Function: pkg.installed Name: httpd-devel Result: True Comment: The following packages were installed/updated: httpd-devel Started: 04:26:25.518515 Duration: 21131.086 ms Changes: ---------- apr-devel: ---------- new: 1.4.8-3.el7_4.1 old: apr-util-devel: ---------- new: 1.5.2-6.el7 old: cyrus-sasl: ---------- new: 2.1.26-23.el7 old: cyrus-sasl-devel: ---------- new: 2.1.26-23.el7 old: expat-devel: ---------- new: 2.1.0-10.el7_3 old: httpd-devel: ---------- new: 2.4.6-89.el7.centos old: libdb-devel: ---------- new: 5.3.21-24.el7 old: openldap: ---------- new: 2.4.44-21.el7_6 old: 2.4.44-20.el7 openldap-devel: ---------- new: 2.4.44-21.el7_6 old: ---------- ID: apache-service Function: service.running Name: httpd Result: True Comment: Service httpd has been enabled, and is running Started: 04:26:46.743870 Duration: 612.381 ms Changes: ---------- httpd: True Summary ------------ Succeeded: 3 (changed=3) Failed: 0 ------------ Total states run: 3
会自动保持客户端配置
通过syndic 对Minion进行管理
Syndic 建立在中心master 和minion之间,并允许多层分级Syndic
Syndic运行在一个Master上,并连接到另外一个Master(比她更高级别),然后Syndic minion所连接的高级Master就可以控制连接到运行Syndic的Master 上的minion。
只需要在每台机器上安装Minion,然后采用本机只负责对本机的配置管理工作机制服务模式
直接在本地使用salt-call命令使用Saltstack的各种功能,而不用连接到master上
# salt-call --local state.highstate
minion端的变量,静态的
Grains是SaltStack记录Minion的一些静态信息的组件,我们可以简单地理解为Grains里面记录着每台Minion的一些常用属性,比如CPU、内存、磁盘、网络信息等,我们可以通过grains.items查看某台Minion的所有Grains信息,Minions的Grains信息是Minions启动的时候采集汇报给Master的,在实际应用环境中我们需要根据自己的业务需求去自定义一些Grains
grains的特性–每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了那一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num),操作系统版本等诸如此类非常固定的属性。
通过master下发的grains优先级是最高的(/etc/salt/grains),/etc/salt/minion次之,/etc/salt/grains最低
可以通过state.highstate
、saltutil.sync_grains
、saltutil.sync_all
等方法批量下发,切记所有在_grains目录下的所有自定义grains值都会下发到minion,这是血的教训。
通过state.highstate
下发的grains好处是无须重启minion即可生效
固定存放在minion端配置文件中,如grains、minion文件中,可以通过file manager的方法去批量下发/etc/salt/grains等配置文件实现grains的批量下发,当然了也通过别的方式把这个文件批量下发下去,都是ok的。
通过下发/etc/salt/grains文件下发的grains值则必须重启minion端服务才可以生效
用于指定匹配的grains
salt -G 'os:CentOS' test.ping
查询grains 信息
# salt \* grains.items 192.168.1.11: ---------- SSDs: biosreleasedate: 12/01/2006 biosversion: VirtualBox cpu_flags: - fpu
在Minion的/etc/salt/minion配置文件中默认有一些注释行。这里就是在Minion上
的minion配置文件中如何定义Grains信息例子。下面只需根据自动的需求按照以下格式去填写相应的键值对就行,大家注意格式就行,SaltStack的配置文件的默认格式都是YAML格式
# Custom static grains for this minion can be specified here and used in SLS # files just like all other grains. This example sets 4 custom grains, with # the 'roles' grain having two values that can be matched against. #grains: # roles: # - webserver # - memcache # deployment: datacenter4 # cabinet: 13 # cab_u: 14-15 #
为了统一管理Minion的Grains信息,需要把这
些注释复制到minion.d/grains文件中
# vi /etc/salt/minion # Custom static grains for this minion can be specified here and used in SLS # files just like all other grains. This example sets 4 custom grains, with # the 'roles' grain having two values that can be matched against. grains: roles: - nginx env: - test myname: - hadron # deployment: datacenter4 # cabinet: 13 # cab_u: 14-15
Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用
minion端的变量, pillar 和 grains 不一样,是在 master 上定义的,并且是针对 minion 定义的一些信息。像一些比较重要的数据(密码)可以存在 pillar 里,还可以定义变量等。
# vim /etc/salt/master pillar_roots: base: - /srv/pillar
mkdir /srv/pillar
总入口文件,内容如下
[root@nb0 ~]# vim /srv/pillar/top.sls [root@nb0 ~]# cat /srv/pillar/top.sls base: 'nb1': - test
自定义配置文件,内容如下
[root@nb0 ~]# vim /srv/pillar/test.sls [root@nb0 ~]# cat /srv/pillar/test.sls conf: /etc/test123.conf myname: hadron
获取pillar 状态
[root@localhost pillar]# salt '*' saltutil.refresh_pillar 192.168.1.11: True [root@localhost pillar]# salt '*' pillar.items 192.168.1.11: ---------- conf: /etc/test123.conf myname: rick [root@localhost pillar]# salt '*' pillar.items myname 192.168.1.11: ---------- myname: rick
vim /etc/salt/master file_roots: base: - /srv/salt
cat /srv/salt/top.sls base: '192.168.1.11': - apache
cat /srv/salt/apache.sls apache-service: pkg.installed: - names: - httpd - httpd-devel service.running: - name: httpd - enable: True
apache-service 是自定义的 id 名。pkg.installed 为包安装函数,下面是要安装的包的名字。service.running 也是一个函数,来保证指定的服务启动,enable 表示开机启动