Salt安装部署

一:salt简介

​ 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。

  salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

  不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

  Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

官方中文文档网站:http://docs.saltstack.cn/

官方安装配置教程: http://docs.saltstack.cn/topic

github:https://github.com/saltstack/salt

二:背景环境

2.1:部署情况

机器IP/HOST 安装内容
192.168.0.110 master端(主控端)
192.168.0.101 minion端(被控端)
192.168.0.102 minion端(被控端)
192.168.0.103 minion端(被控端)

2.2:配置hosts文件,用于加速域名解析。

# 服务端
[root@manager110 ~]# vim /etc/hosts
192.168.0.101 db101
192.168.0.102 db102
192.168.0.103 db103
192.168.0.110 manager110 # 客户端: 所有机器101-103都相同操作
[root@db101 ~]# vim /etc/hosts
192.168.0.101 db101
192.168.0.102 db102
192.168.0.103 db103
192.168.0.110 manager110

2.3:端口号

  • publish_port:4505
  • ret_port:4506

三:下载安装

安装教程:http://docs.saltstack.cn/topics/installation/rhel.html

安装教程:https://mirrors.aliyun.com/saltstack/#rhel

3.1:配置yum仓库

  • 配置官网镜像仓库和key

    # 服务端和客户端节点都要执行(我直接使用官网镜像仓库,没有使用阿里云的)
    rpm --import https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub curl -fsSL https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo # 清空过期缓存
    sudo yum clean expire-cache
  • 配置阿里云镜像仓库

    yum install -y https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    
    # 补充: 配置Redhat8/CentOS8 仓库
    #导入key,配置salt仓库
    rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
    curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo # 教程链接 https://mirrors.aliyun.com/saltstack/#rhel

3.2:主控端部署

sudo yum install salt-master
sudo yum install salt-minion
sudo yum install salt-ssh
sudo yum install salt-syndic
sudo yum install salt-cloud
sudo yum install salt-api

3.3:主控端设置开机自启

sudo systemctl enable salt-master && sudo systemctl start salt-master
sudo systemctl enable salt-minion && sudo systemctl start salt-minion
sudo systemctl enable salt-syndic && sudo systemctl start salt-syndic
sudo systemctl enable salt-api && sudo systemctl start salt-api

3.4:被控端部署

sudo yum install salt-minion

3.5:被控端设置开机自启

sudo systemctl enable salt-minion && sudo systemctl start salt-minion

四:配置

4.1:Master端和Minion端常用配置参数说明

Master端常用的配置参数说明:

  • interface:指定bind的地址,默认为0.0.0.0

  • publish_port:指定发布端口,默认为4505

  • ret_port:指定结果返回端口,与minion配置文件中的master_port对应,默认为4506

  • uesr:指定master进程的运行用户,如果调整,则需要调整部分目录的权限,默认权限为root

  • timeout:指定timeout时间,如果minion规模庞大或络状况不好,建议增该值,默认5s

  • keep_jobs:默认情况下,minion会执行结果会返回master,master会缓存到本地的cachedir目录,该参数指定缓存多长时间,以供查看之前的执行结果,会占用磁盘空间,默认为24h

  • job_cache:master是否缓存执行结构,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项,默认为True

  • file_recv:是否允许minion传送文件到master上,默认是Flase

  • file_roots:指定file server目录,默认为:

    file_roots:
    base:
    - /srv/salt
  • pillar_roots:指定pillar目录,默认为:

    pillar_roots:
    base:
    - /srv/pillar
  • log_level:执行日志级别,支持的日志级别由'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ,默认为’warning’

Minion端常用的配置参数说明:

  • master:指定master主机,默认为salt
  • mastar_port:指定认证和执行结果发送到master的哪个端口,与master配置文件中的ret_port对应,默认为4506
  • id:指定minion的标识,Salt内部使用id作为标识,唯一标识符,默认为主机名
  • user:指定运行minion的用户,由于安装包,启动服务等操作需要特殊用户,推荐使用root,默认为root
  • cache_jobs:minion是否缓存执行结果,默认为False
  • backuo_mode:在文件操作(file.managed或file.recurse)时,如果文件发送更改,指定备份目录,当前有效的值为minion,备份在cachedir/file_backups目录下,以原始文件名称加时间戳来命名,默认为Disabled
  • providers:指定模块对应的providers,如果RHRL系列中,pkg对应的providers是yumpkg5
  • renderer:指定配置管理系统中的渲染器,默认值为:yaml_jinja
  • file_client:指定file client默认去哪里(remotr或local)寻找文件,默认值为remote
  • loglevel:指定日志级别,默认为warnning
  • tcp_keepalive:minion是否与master保持keepalive检查,zeromq3一下版本存在keepalive bug,会导致某些情况下链接异常后minion无法重连master,建议有条件的话吧zeromq3以上版本,默认为True

4.2:修改主控端的maser配置文件

最简配置:不用调整master,直接使用默认master配置即可。

# 完整配置:(大部分是默认配置)
[root@manager110 salt]# cat /etc/salt/master
file_roots:
base:
- /srv/salt/base
grantcron:
- /srv/salt/grantcron
revokecron:
- /srv/salt/revokecron publisher_acl:
dba:
- test.ping
- cmd.*
- cron.*
- cp.*
devuser:
- test.ping
- cmd.*
- cron.*
- cp.* default_include: master.d/*.conf
interface: 0.0.0.0
ipv6: False
publish_port: 4505
user: root ret_port: 4506 # 这里ret_port和后面minion配置中的master_port对应保持一致。
pidfile: /var/run/salt/salt-master.pid
conf_file: /etc/salt/master
pki_dir: /etc/salt/pki/master
cachedir: /var/cache/salt/master
keep_jobs: 2
gather_job_timeout: 10
timeout: 5
sock_dir: /var/run/salt/master
max_open_files: 100000
worker_threads: 12
zmq_backlog: 1000
open_mode: False
auto_accept: true
file_recv: True
file_recv_max_size: 1000
tcp_keepalive: True
tcp_keepalive_idle: 300

4.3:修改主控端的minion配置文件

最简配置:配置master: 192.168.0.110即可;id可以不用配置,默认取hostname。

切记:“master: ” 冒号后要添加一个空格,然后再写IP。

如果需要调整id,先删除/etc/salt/minion_id文件,然后重启minion,会自动在/etc/salt目录下新生成一个minion_id文件来存放id。

# 修改主控端的minion配置文件  修改 #id和#master:salt 这两行 (注意书写规范:每个冒号后面都要跟一个空格)
# #master: salt 指向管理端地址,这里是指向salt-master服务器,可以是IP、域名或主机名
# #id: xxx minion主机标识必须唯一,如果不配置,默认取机器的hostname。
[root@manager110 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion #注意master:后的空格
[root@manager110 ~]# sed -i 's/^#id:/id: manager110/g' /etc/salt/minion #注意id:后的空格 # 查看配置内容
[root@manager110 ~]# sed -n '/^master:/p' /etc/salt/minion
master: 192.168.0.110
[root@manager110 ~]# sed -n '/^id:/p' /etc/salt/minion
id: manager110 [root@manager110 salt]# cat /etc/salt/minion
master: 192.168.0.110
id: manager110

完整配置:(大部分都是默认配置)

[root@manager110 salt]# cat /etc/salt/minion
master: 192.168.0.110
ipv6: False
master_port: 4506
user: root
pidfile: /var/run/salt/salt-minion.pid
conf_file: /etc/salt/minion
pki_dir: /etc/salt/pki/minion
minion_id_caching: True
cachedir: /var/cache/salt/minion
sock_dir: /var/run/salt/minion
log_file: /var/log/salt/minion
log_level: warning
log_datefmt: '%H:%M:%S'
tcp_keepalive: True
tcp_keepalive_idle: 300

4.4:修改被控端的minion配置文件

最简配置:配置master: 192.168.0.110即可;id可以不用配置,默认取hostname。

切记:“master: ” 冒号后要添加一个空格,然后再写IP。

[root@db101 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion   #注意master:后有空格
[root@db101 ~]# sed -i 's/^#id:/id: db101/g' /etc/salt/minion #注意id:后的空格 [root@db101 ~]# sed -n '/^master:/p' /etc/salt/minion
master: 192.168.0.110
[root@db101 ~]# sed -n '/^id:/p' /etc/salt/minion
id: db101 [root@db101 ~]# cat /etc/salt/minion
master: 192.168.0.110
id: db101 # 其它被控端部署同上,db101修改成对应的host名称就可以了。
# db102修改
sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion
sed -i 's/^#id:/id: db102/g' /etc/salt/minion # db103修改
sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion
sed -i 's/^#id:/id: db103/g' /etc/salt/minion # 查看
sed -n '/^master:/p' /etc/salt/minion
sed -n '/^id:/p' /etc/salt/minion

完整配置:(大部分是默认配置)

[root@db101 ~]# cat /etc/salt/minion
master: 192.168.0.110
ipv6: False
master_port: 4506
user: root
pidfile: /var/run/salt/salt-minion.pid
conf_file: /etc/salt/minion
pki_dir: /etc/salt/pki/minion
minion_id_caching: True
cachedir: /var/cache/salt/minion
sock_dir: /var/run/salt/minion
log_file: /var/log/salt/minion
log_level: warning
log_datefmt: '%H:%M:%S'
tcp_keepalive: True
tcp_keepalive_idle: 300

4.5:重启服务

# 主控端
systemctl restart salt-master
systemctl status salt-master systemctl restart salt-minion
systemctl status salt-minion # 被控端
systemctl restart salt-minion
systemctl status salt-minion

4.6:salt-minion和salt-master认证过程

  • minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
  • master收到minion的公钥后,通过salt-key命令接受该公钥。此时master的/etc/salt/pki/master/minions目录将会存放以minion id命名的公钥,然后master就能对minion发送控制指令了
  • master 秘钥对默认存储在/etc/salt/pki/master/master.pub /etc/salt/pki/master/master.pem
  • master 端认证的公钥存储在:/etc/salt/pki/master/minions/
  • minion 秘钥对默认存储在/etc/salt/pki/minion/minion.pub /etc/salt/pki/minion/minion.pem
  • minion 存放的master公钥/etc/salt/pki/minion/minion_master.pub
  • minion_id 默认存储在/etc/salt/minion_id

    若想修改minion名称,需删除原来的minion_id,重启重新生成一个minion_id

salt-key常用选项

-L             列出所有公钥信息
-a minion 接受指定minion等待认证的key
-A 接受所有minion等待认证的key
-r minion 拒绝指定minion等待认证的key
-R 拒绝所有minion等待认证的key
-f minion 显示指定key的指纹信息
-F 显示所有key的指纹信息
-d minion 删除指定minion的key
-D 删除所有minion的key
-y 自动回答yes

查看当前证书情况

[root@manager110 salt]# salt-key -L
Accepted Keys:
manager110
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接受指定minion的新证书

[root@manager110 salt]# salt-key -a -y db101
The key glob '-y' does not match any unaccepted keys. # 查看salt master和minion的版本是否一致,如果不一致保持一致。
[root@manager110 salt]# salt-minion --versions-report

接受所有minion的新证书

[root@manager110 manager110]# salt-key -y -A

4.7:debug

[root@db101 salt]# salt-minion -l debug
[DEBUG ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
[DEBUG ] TiamatPipPathFinder.find_spec: First time trying to load raven
[DEBUG ] Reading configuration from /etc/salt/minion
[WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
[DEBUG ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
[DEBUG ] TiamatPipPathFinder.find_spec: First time trying to load raven
[DEBUG ] Configuration file path: /etc/salt/minion
[INFO ] Setting up the Salt Minion "db101"
[INFO ] An instance is already running. Exiting the Salt Minion
[INFO ] Shutting down the Salt Minion
The Salt Minion is shutdown.

4.8:查看日志

[root@manager110 salt]# cat /var/log/salt/master
[root@manager110 salt]# cat /var/log/salt/minion [root@db101 salt]# tail -f /var/log/salt/minion
2023-03-21 21:38:47,174 [salt.minion :1089][ERROR ][95757] Minion unable to successfully connect to a Salt Master.
2023-03-21 21:39:07,335 [salt.minion :1141][ERROR ][95757] Error while bringing up minion for multi-master. Is master at 192.168.0.110 responding? # 查看端口是否通
[root@db101 salt]# telnet 192.168.0.110 4505
Trying 192.168.0.110...
telnet: connect to address 192.168.0.110: No route to host # 端口不通,直接关闭防火墙
$ systemctl stop firewalld && systemctl disable firewalld # 重新查看
[root@manager110 manager110]# salt-key -L
Accepted Keys:
db101
db102
db103
manager110
Denied Keys:
Unaccepted Keys:
Rejected Keys:

五:常用模块、命令、执行

5.1:列出所有salt的sys模块

[root@manager110 manager110]# salt db101 sys.list_modules

5.2:test模块下的ping方法测试主机是否存在

# 指定一个minion
[root@manager110 manager110]# salt db101 test.ping
db101:
True # 指定多个minions : -L:list,可指定多个minions,多个minions之间用空格或者逗号隔开
[root@manager110 manager110]# salt -L "db101 db102 db103" test.ping
[root@manager110 manager110]# salt -L "db101,db102,db103" test.ping
db102:
True
db101:
True
db103:
True # 所有的minions
[root@manager110 manager110]# salt "*" test.ping
db101:
True
db102:
True
manager110:
True
db103:
True

5.3:cmd超级模块,所有shell命令都能执行

[root@manager110 manager110]# salt '*' cmd.run 'ps -ef | grep python'
db101:
root 1053 1 0 Mar16 ? 00:00:37 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 97014 97013 0 22:09 ? 00:00:00 /bin/sh -c ps -ef | grep python
root 97016 97014 0 22:09 ? 00:00:00 grep python
manager110:
root 1143 1 0 Mar19 ? 00:00:17 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 55232 78679 64 22:09 pts/0 00:00:00 /opt/saltstack/salt/run/run * cmd.run ps -ef | grep python MainProcess
root 55247 55243 0 22:09 ? 00:00:00 /bin/sh -c ps -ef | grep python
root 55249 55247 0 22:09 ? 00:00:00 grep python
db102:
root 1047 1 0 Mar17 ? 00:00:28 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 66497 66496 0 22:09 ? 00:00:00 /bin/sh -c ps -ef | grep python
root 66499 66497 0 22:09 ? 00:00:00 grep python
db103:
root 1052 1 0 Mar17 ? 00:00:29 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root 113232 113231 0 22:09 ? 00:00:00 /bin/sh -c ps -ef | grep python
root 113234 113232 0 22:09 ? 00:00:00 grep python

5.4:salt-run命令

该命令执行runner(salt带的或者自定义的,runner以后会讲),通常在master端执行,比如经常用到的manage

salt-run [options] [runner.func]
salt-run manage.status ##查看所有minion状态
salt-run manage.down ##查看所有没在线minion
salt-run manage.up ##查看所有在线minion

5.5:salt-key密钥管理,通常在master端执行

salt-key [options]
salt-key -L ##查看所有minion-key
salt-key -a <key-name> ##接受某个minion-key
salt-key -d <key-name> ##删除某个minion-key
salt-key -A ##接受所有的minion-key
salt-key -D ##删除所有的minion-key

5.6:salt-call

该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job

salt-call [options] <function> [arguments]
salt-call test.ping ##自己执行test.ping命令
salt-call cmd.run 'ifconfig' ##自己执行cmd.run函数

5.7:salt-cp

分发文件到minion上,不支持目录分发,通常在master运行

salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html

5.8:salt-ssh



5.9:salt-master

master 运行命令

salt-master [options]
salt-master ##前台运行master
salt-master -d ##后台运行master
salt-master -l debug ##前台debug输出

5.10:salt-minion

minion运行命令

salt-minion [options]
salt-minion ##前台运行
salt-minion -d ##后台运行
salt-minion -l debug ##前台debug输出

5.11:salt-syndic

syndic是salt的代理

十:参考文章

参考文章:https://blog.csdn.net/hbhe0316/article/details/122701252

参考文章:https://blog.csdn.net/m0_46674735/article/details/113928894

参考文章:[死磕salt系列-salt配置文件 - biglittleant - 博客园 (cnblogs.com)](https://www.cnblogs.com/biglittleant/p/8743843.html#:~:text=死磕salt系列-salt配置文件 1 interface%3A 服务器监听地址。 2 ipv6%3A 是否启用ipv6。 3,5 timeout%3A 设置saltAPI和命令默认超时时间。 6 state_verbose%3A 显示返回状态的详细信息程度。 False 只返回变化的地方及执行结果。)

参考文章:zmq导致master收不到minion的key - doublexi - 博客园 (cnblogs.com)

参考文章:salt常用命令、模块、执行 - davygeek - 博客园 (cnblogs.com)

salt命令详解:https://docs.saltproject.io/en/getstarted/fundamentals/remotex.html, https://docs.saltproject.io/en/getstarted/system/execution.html

执行函数模块:https://docs.saltproject.io/en/latest/ref/modules/all/index.html#all-salt-modules

salt 插件:https://docs.saltproject.io/en/getstarted/system/plugins.html

Salt安装部署的更多相关文章

  1. saltstack入门至放弃之salt安装部署

    学习了一段时间的saltstack,是时候记录下了.友提:学习环境是两台centos_7.2_x64机器 系统初始化: 两台机器执行以下脚本即可(友提:两台服务器的主机名配置在/etc/hosts中, ...

  2. Linux系统批量化安装部署之Cobbler

    说明: Cobbler服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统: eth0(第一块网卡,用于外网)IP地址段:192.168.2 ...

  3. saltStack 安装部署

    1.saltStack 服务架构介绍 SaltStack 是一种基于C/S架构的服务模式,在SaltStack架构中服务器端叫作Master,客户端叫作Minion,传统C/S架构为:客户端发送请求给 ...

  4. saltstack安装部署以及简单实用

    一,saltstack简介:     SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位. SaltSta ...

  5. 基于centos6.5安装部署mongdb3.6

    注意:不同的版本的centos,mongdb安装方式不同,请注意版本号!! 基于centos6.5安装部署mongdb3.6 方式有多种,本文介绍使用wget命令来下载获取mongdb,具体命令如下 ...

  6. Cobbler全自动批量安装部署Linux系统

    说明: Cobbler服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统: eth0(第一块网卡,用于外网)IP地址段:192.168.2 ...

  7. redis常用服务安装部署

    常用服务安装部署   学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell 即将登场的是: mysql(m ...

  8. 安装部署Ceph Calamari

    根据http://ovirt-china.org/mediawiki/index.php/%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2Ceph_Calamari 原文如下: ...

  9. Cobbler自动化安装部署系统

    自动化安装部署 https://www.cnblogs.com/nulige/p/6796593.html PXE+Kickstart工作原理 pxe+kickstart工作流程 网卡上的pxe芯片有 ...

  10. SaltStack安装部署

    SaltStack安装部署 安装: 一. master: 1. 配置yum源安装 # rpm --import https://repo.saltstack.com/yum/redhat/6/x86_ ...

随机推荐

  1. 【停用词】NLP中的停用词怎么获取?我整理了6种方法

    目录 一.停用词介绍 二.停用词应用场景 2.1 提取高频词 2.2 词云图 三.停用词获取方法 3.1 自定义停用词 3.2 用wordcloud调取停用词 3.3 用nltk调取停用词 3.3.1 ...

  2. 数据可视化技术应用:“Python环境管理器-Anaconda”的安装

    目录 1. Python环境管理器:Anaconda 2. 在Windows上安装Anaconda 3. Anaconda和Miniconda的区别 1. Python环境管理器:Anaconda P ...

  3. ansible系列(28)--ansible的playbook异常处理

    目录 1. playbook的异常处理 1.1 Playbook错误忽略 1.2 task执行失败强制调用handlers 1.3 控制Tasks报告状态为OK 1.4 changed_when检查任 ...

  4. cesium教程5-用primitive加载glb和gltf格式的小模型

    primitive加载方法更底层,用起来更麻烦,但是效率更高. 完整示例代码: <!DOCTYPE html> <html lang="en"> <h ...

  5. C#.Net筑基-运算符🔣Family

    C#运算符 内置了丰富的运算符操作类型,使用方便,极大的简化了编码,同时还支持多种运算符重载机制,让自定义的类型也能支持运算符行为. 01.运算符概览 运算符分类 描述 数学运算 基础的加减乘除,及+ ...

  6. 启动vite和electron项目配置多个主进程

    推荐 concurrently 点击查看代码 "dev": "concurrently \"nodemon --exec electron . \" ...

  7. 让智慧物联赋能高效生产, AIRIOT助力数字化油田转型升级

    ​ 近年来,中国石油行业为了推进工业化和信息化深度融合,充分结合勘探开发.生产科研和经营管理的实际需求,积极通过信息化建设促进油田业务转型升级.在勘探开发与管理的领域中,油气生产物联网系统是一个极其重 ...

  8. saltstack实践案例

    master某个配置参考案例 [root@]# cat /etc/salt/master file_ignore_regex: - '/\.git($|/)' file_ignore_glob: - ...

  9. Python:Python字符串中的r、u和转义字符

    Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢? 1.r(R) r意为raw,表示不包含转义字符的原生字符串.常见的转义字符包括下列几种: 转义字符 描述 ...

  10. NFS共享文件

    NFS共享文件 服务端 安装NFS [root@localhost www] yum -y install nfs-utils rpcbind 创建需要共享的文件夹share [root@localh ...