介绍
salt 与 ansible 类似,是常用的 linux 自动化运维工具,典型的应用场景为:多个节点执行命令、批量执行命令、分发文件、同步配置等,号称可以轻松管理成千上万台节点,速度较快。是部署分布式系统,比如 `Hadoop `、分布式数据库等常用工具。
salt 使用 python 编写,代码地址 https://github.com/saltstack/salt ,采用 Apache License 2.0 协议。
salt 采用主从架构,主节点为 master,从节点叫做 minion 相当于angent,本文将介绍如何安装以及使用 salt。
节点规划
主机名 | 角色 |
---|---|
test1 | master/minion |
test2 | minion |
Test3 | minion |
安装
下载安装包,本地安装包放在/utf7/salt_pkgs/ 目录
test1 节点执行
$ yum install -y /utf7/salt_pkgs/salt-master-2019.2.0-2.el7.noarch.rpm
$ yum install -y /utf7/salt_pkgs/python36-zmq-15.3.0-6.el7.x86_64.rpm
$ yum install -y /utf7/salt_pkgs/salt-2019.2.0-2.el7.noarch.rpm
$ yum install -y /utf7/salt_pkgs/salt-minion-2019.2.0-2.el7.noarch.rpm
其他节点执行
$ yum install -y /utf7/salt_pkgs/python36-zmq-15.3.0-6.el7.x86_64.rpm
$ yum install -y /utf7/salt_pkgs/salt-2019.2.0-2.el7.noarch.rpm
$ yum install -y /utf7/salt_pkgs/salt-minion-2019.2.0-2.el7.noarch.rpm
配置
salt 节点角色分为 master 和 minion
master 配置文件为 /etc/salt/master
minion 配置文件为 /etc/salt/minion
test1 master 节点
vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
pillar_roots:
base:
- /srv/pillar/base
prod:
- /srv/pillar/prod
auto_accept: True
然后创建上面配置对应的目录
$ mkdir -p /srv/salt/base
$ mkdir -p /srv/salt/dev
$ mkdir -p /srv/pillar/base
$ mkdir -p /srv/pillar/prod
由于我的 master 节点同时也是 minion 功能,所以这里也需要配置 minion
vim /etc/salt/minion
master:
- test1
id: test1
master_port: 4506
其他minion 配置,除了id,其他都一样
test2 节点
vim /etc/salt/minion
master:
- test1
id: test2
master_port: 4506
test3 节点
vim /etc/salt/minion
master:
- test1
id: test3
master_port: 4506
启动命令
启动 master (在test1上执行)
$ /bin/systemctl enable salt-master;
$ /bin/systemctl restart salt-master > /dev/null 2>&1
启动 minion (test1/test2/test3都需要启动)
$ /bin/systemctl enable salt-minion;/bin/systemctl restart salt-minion > /dev/null 2>&1
测试是否可用
在 master 即 test1 节点执行如下命令
/所有节点执行命令
$ salt "*" cmd.run "hostname"
执行命令
//所有节点执行命令
$ salt "*" cmd.run "hostname"
//以某个用户执行
$ salt "*" cmd.run runas="hadoop" "hostname;id"
//指定节点执行
$ salt "test" cmd.run runas="hadoop" "hostname;id"
//正则匹配
$ salt -E "test" cmd.run runas="hadoop" "hostname;id"
//指定多个节点执行
$ salt -E "test2|test3" cmd.run runas="hadoop" "hostname;id"
//debug 模式
$ salt -l debug "*" cmd.run "hostname"
拷贝文件
salt-cp 用于拷贝从 master 上面拷贝文件到 minion
//拷贝文件
$ echo "salt-cp getfile test" > getfile.txt;
$ salt-cp -C -E "test" getfile.txt /tmp/
$ salt "test" cmd.run "cat /tmp/getfile.txt"
-C 可以支持拷贝大文件,具体参考 salt-cp -h
-C, --chunked Use chunked files transfer. Supports big files,
recursive lookup and directories creation.
文件服务器功能
Salt 内置一个简单的文件服务器,用于分发文件给 Salt minions.
Salt文件服务器可以用于从 master 到 minions 的文件传输。
salt 自带的一个简单的 ftp 服务器功能,参考上面的 master 配置。
文件路径说明
salt 文件文件服务器中的路径 url以 salt:// 开头,
注意的是 salt://表示的 base环境,拷贝文件到 /srv/salt/base/目录而不是/srv/salt/目录。
cp.get_file 使用
cp.get_file 命令可用于从 master 文件服务器上面拷贝文件到 minion
$ echo "salt get_file_test " > /srv/salt/base/get_file_test.txt
$ md5sum /srv/salt/base/get_file_test.txt
$ salt '*' cp.get_file "salt://get_file_test.txt" "/tmp/"
$ salt '*' cmd.run run.as="root" "md5sum /tmp/get_file_test.txt"
cp.get_file 可以指定参数
makedirs=True 如果目标目录不存在,则创建目录,默认不会创建目录,不存在则拷贝失败
gzip=n n 为 1-9,表示压缩级别,数字越大,压缩比越高,越消耗 CPU
cp.get_dir 使用
cp.get_dir 命令用于从 master 文件服务器上面拷贝文件夹/目录到 minion
使用方法与 cp.get_file 类似,区别是一个是文件,一个是文件夹
$ salt '*' cp.get_dir salt://package /tmp/
$ salt '*' cp.get_dir salt://package /tmp/utf7/ makedirs=True gzip=5
问题处理
安装好以后,发现在salt master上面执行命令没有返回,表现如下
salt "*" cmd.run "hostname"
test1: Minion did not return. [No response]Test2: Minion did not return. [No response]Test3: Minion did not return. [No response]ERROR: Minions returned with non-zero exit code
到 minoin节点查看日志
vim /var/log/salt/minion
2020-09-12 14:48:18,182 [salt.crypt :1081][ERROR ][19925] The master key has changed, the salt master could have been subverted, verify salt master's public key
2020-09-12 14:48:18,182 [salt.crypt :764 ][CRITICAL][19925] The Salt Master server's public key did not authenticate!
The master may need to be updated if it is a version of Salt lower than 2019.2.0, or
If you are confident that you are connecting to a valid Salt Master, then remove the master public key and restart the Salt Minion.
The master public key can be found at:
/etc/salt/pki/minion/minion_master.pub
2020-09-12 14:48:18,183 [salt.minion :1026][ERROR ][19925] Error while bringing up minion for multi-master. Is master at test1 responding?
这里的原因是之前 minion 配置了其他节点的 master ,需要删除之前的 master公钥,重启各个 minion 即可
rm -rf /etc/salt/pki/minion/minion_master.pub;
/bin/systemctl enable salt-minion;/bin/systemctl restart salt-minion > /dev/null 2>&1
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论