自动化运维工具 salt 安装以及使用

幸运草 2020年10月21日22:11:02运维评论阅读模式

介绍

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

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草

发表评论