Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是pssh+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。
1. saltstack安装
1
2
3
4
|
#导入EPEL YUM源
rpm -Uvh http:
//mirror
.pnl.gov
/epel/5/i386/epel-release-5-4
.noarch.rpm
#服务器master的安装
yum -y
install
salt-master
|
1
2
3
|
#导入EPEL YUM源
rpm -Uvh http:
//mirror
.pnl.gov
/epel/5/i386/epel-release-5-4
.noarch.rpm
yum -y
install
salt-minion
|
1
2
3
4
5
6
7
|
wget -q -O -
"http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key"
| apt-key add -
echo
"deb http://debian.saltstack.com/debianwheezy-saltstack main"
/etc/apt/sources
.list
echo
"debhttp://debian.saltstack.com/debian wheezy-saltstack main"
|
tee
/etc/apt/sources
.list
apt-get update
apt-get installsalt-master
# On the salt-master
apt-get installsalt-minion
# On each salt-minion
apt-get
install
salt-syndic
|
2. saltstacks配置文件修改
master端配置文件修改
1
2
3
|
vi
/etc/salt/master
interface: 115.28.2.1
#此处是server端监听的地址。
auto_accept: True
#此处是自动接受客户端发送过来的key,如果服务器很多的话,需要开启该功能。
|
1
2
|
/etc/salt/master
-d
#后台启动
/etc/salt/master
#前台启动,方便调试
|
minion端配置文件修改:
1
2
3
4
5
6
7
8
9
|
#vi /etc/salt/minion
master: 115.28.2.1
#这里改成你的master服务器地址
id
: web01
#建议这里修改成主机名,便于master端分辨
#在配置文件末尾加入下面内容,每隔5分钟自动同步master配置,效果等同于在客户端执行salt-call state.highstate或在server端执行 salt '*'state.highstate
schedule:
highstate:
function
: state.highstate
minutes: 5
|
1
2
3
|
/etc/salt/minion
-d
#后台启动
/etc/salt/minion
#前台启动,方便调试
注:minion启动后,自动会生成公钥私钥,并把公钥发送到master端。minion不监听端口,全靠和master保持长连接,可通过
netstat
-an|
grep
ES来查看是否有连接。
|
3. salt-key证书管理
1
2
3
4
5
|
salt-key -L
#查询所有接收到的证书
salt-key -a <证书名>
#接收单个证书
salt-key -A
#接受所有证书
salt-key -d <证书名>
#删除单个证书
salt-key -D
#删除所有证书
|
4. salt实时批量操作
1
|
salt [选项]
'<target>'
<
function
> [arguments]
|
1
2
3
4
5
6
7
8
9
10
11
|
salt
'*'
test
.
ping
#*为匹配所有主机,test.ping为salt一个函数,注:*号是正则,若分了多个组,可以类似于web*,只匹配web服务器
salt
'*'
cmd.run
'df -h'
#查看所有主机的磁盘信息,cmd.run执行单个命令
salt
'*'
cmd.script salt:
//hello
.sh
salt
'*'
cmd.script salt:
//scripts/runme
.sh
'arg1 arg2 "arg 3"'
#cmd.script执行一个脚本,即把本地脚本拷贝到远程主机上执行,hello.sh要放在指定的文件存放路径,默认是/srv/salt/
salt
'*'
state.highstate
#向客户端推送master端配置。
salt
'*'
cmd.run
'df -h '
-t 5
#超时控制
|
5. salt分组管理
1
2
3
4
5
6
|
[root@yang salt]
# vimaster.d/group.conf
nodegroups:
group1:
'L@DG-Server-27,DG-Server-28'
group2:
'L@qsmind'
#分组格式可在/etc/salt/master中搜索group看示例
|
1
|
salt -N group1 cmd.run
'hostname'
|
6. salt-ssh远程主机批量自动登陆
7. salt-run检查客户端up状态
1
2
3
|
salt-run manage.status
#查看所有客户端up/down状态
salt-run manage.up
#只显示up状态的客户端
salt-run manage.down
#只显示down状态的客户端
|
8. salt-cp批量拷贝文件
1
2
3
4
5
|
语法:
salt-
cp
[options]
'<target>'
SOURCE DEST
示例:
salt-
cp
'*'
/etc/hosts
/etc/hosts
#把master上的hosts文件分发到所有主机。
|
9. saltstack定时同步
1
2
3
4
|
schedule:
highstate:
function
:state.highstate
seconds:300
|
10. saltstack自动分发目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
#在top.sls文件中指定哪些主机访问哪些目录
[root@yang salt]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/scripts
:
#指定minion端同步后生成的目录
file
.recurse:
-
source
: salt:
//zabbix/zabbix_scripts
#指定要master端同步的原始目录,以后只要把想要分发的文件放在这个目录中,就会自动同步了。
- dir_mode: 755
- file_mode: 744
#用dir_mode和file_mode来设置文件和目录的权限
|
11. saltstack自动分发文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@yang salt]
# cat /srv/salt/top.sls
base:
"DG-Server*"
:
- ssh_key.key
- zabbix.zabbix
[root@yang zabbix]
# cat /srv/salt/zabbix/zabbix.sls
/usr/local/zabbix/etc/zabbix_agentd
.conf.d
/UserParameter
.conf:
#指定在minion端生成的文件名
file
.managed:
-
source
: salt:
//zabbix/UserParameter
.conf
#指定在master同步的原始文件
- backup: minion
#当文件发生变化时,都会把原文件备份,备份文件目录:/var/cache/salt/minion/file_backup/
- mode: 744
- user: root
- group: root
|