saltstack 安装

时间:2022-07-09 18:29:20

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-:
True
DEV-APP-:
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:

# salt '*' cmd.run 'source /etc/profile; java -version'

tips:遇到过一个特别的坑,使用salt远程启动的Java程序日志都为乱码,后来执行locale发现了问题:

# salt '*' cmd.run 'locale'
DEV-APP-:
LANG=zh_CN.UTF-
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-
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'

over