saltstack 安装
centos 6.5
saltstack 2015.5.10 (Lithium)
tips:上个版本2015.5.3或者5.5有个bug,Python调用salt的unzip模块报错;
安装
在配置了163和epel的源后使用yum安装即可;
# yum update python*
# yum -y install salt-master #主控端 # yum -y install salt-minion #被控端
配置主控端
主控端的基本配置
# vi /etc/salt/master interface [local ip] #绑定本机IP
auto_accept: False #自动接受连接,默认就是False
file_roots:
base:
- /srv/salt #salt的文件根目录,默认就是这个
配置开机自动启动,并启动:
# chkconfig salt-master on
# service salt-master start
日志文件:/var/log/salt/master
默认使用端口4505和4506,注意防火墙的情况;
配置被控端
被控端的基本配置
# vi /etc/salt/minion
master: [主控端IP]
id: [被控端名称] #考虑用主机名或根据业务起名,不可重复
配置开机自动启动,并启动:
# chkconfig salt-minion on
# service salt-minion start
日志文件:/var/log/salt/minion
主控端接受连接
# salt-key -A #接受所有连接 # salt-key -L #查看接受或拒绝的情况
测试连接情况(这里假设有两台被控端:DEV-APP-001,DEV-APP-002)
# salt '*' test.ping DEV-APP-001: True DEV-APP-002: True
使用salt批量远程执行命令
这是salt的基本功能之一,可以很大程度减少批量机器的运维工作量;
查看下有没有安装telnet,或者直接yum安装:
# salt '*' cmd.run 'which telnet' # salt '*' cmd.run 'yum -y install telnet'
可以传输文件或文件夹到被控端,目标文件必须放到salt的文件根目录,默认为/srv/salt;
假设在主控端有这个文件:/srv/salt/myfile/test.log
# salt '*' cp.get_file salt://myfile/test.log /root/test.log #传输文件
# salt '*' cp.get_dir salt://myfile /root #传输文件夹
环境变量的问题
注意环境变量的问题,很多时候一些奇怪的问题都是这个引起的;
比如用环境变量配置的Java,需要首先加载profile():
注:在最新版3001中还可以通过runsa='root'(其他用户都行)来自动加载,例:salt '*' cmd.run 'java -version' runas='root'
# salt '*' cmd.run 'source /etc/profile; java -version'
tips:遇到过一个特别的坑,使用salt远程启动的Java程序日志都为乱码,后来执行locale发现了问题:
# salt '*' cmd.run 'locale' DEV-APP-001: LANG=zh_CN.UTF-8 LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_PAPER="C" LC_NAME="C" LC_ADDRESS="C" LC_TELEPHONE="C" LC_MEASUREMENT="C" LC_IDENTIFICATION="C" LC_ALL=C
LC_ALL被置为了C,覆盖了LANG的配置,所以可以这样解决:
# salt '*' cmd.run 'export LC_ALL=""; locale' DEV-APP-001: LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
启动Java程序时就是这样了:
# salt '*' cmd.run 'source /etc/profile; export LC_ALL=""; java -version'
注:新版3001中不再有效,需要指定LC_ALL具体的值:export LC_ALL="zh_CN.UTF-8",然而其实有了更方便的参数:reset_system_locale=False
所以新版中只要runas和reset_system_locale这俩参数即可解决环境变量的问题:
# salt '*' cmd.run 'locale; java -version' runas='root' reset_system_locale=False
over