翼度科技»论坛 编程开发 python 查看内容

Salt安装部署

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
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.110master端(主控端)192.168.0.101minion端(被控端)192.168.0.102minion端(被控端)192.168.0.103minion端(被控端)2.2:配置hosts文件,用于加速域名解析。
  1. # 服务端
  2. [root@manager110 ~]# vim /etc/hosts
  3. 192.168.0.101 db101
  4. 192.168.0.102 db102
  5. 192.168.0.103 db103
  6. 192.168.0.110 manager110
  7. # 客户端: 所有机器101-103都相同操作
  8. [root@db101 ~]# vim /etc/hosts
  9. 192.168.0.101 db101
  10. 192.168.0.102 db102
  11. 192.168.0.103 db103
  12. 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
    1. # 服务端和客户端节点都要执行(我直接使用官网镜像仓库,没有使用阿里云的)
    2. rpm --import https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
    3. curl -fsSL https://repo.saltproject.io/salt/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
    4. # 清空过期缓存
    5. sudo yum clean expire-cache
    复制代码
  • 配置阿里云镜像仓库
    1. yum install -y https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
    2. # 补充: 配置Redhat8/CentOS8 仓库
    3. #导入key,配置salt仓库
    4. rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
    5. curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
    6. # 教程链接 https://mirrors.aliyun.com/saltstack/#rhel
    复制代码
3.2:主控端部署
  1. sudo yum install salt-master
  2. sudo yum install salt-minion
  3. sudo yum install salt-ssh
  4. sudo yum install salt-syndic
  5. sudo yum install salt-cloud
  6. sudo yum install salt-api
复制代码
3.3:主控端设置开机自启
  1. sudo systemctl enable salt-master && sudo systemctl start salt-master
  2. sudo systemctl enable salt-minion && sudo systemctl start salt-minion
  3. sudo systemctl enable salt-syndic && sudo systemctl start salt-syndic
  4. sudo systemctl enable salt-api && sudo systemctl start salt-api
复制代码
3.4:被控端部署
  1. sudo yum install salt-minion
复制代码
3.5:被控端设置开机自启
  1. 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目录,默认为:
    1. file_roots:   
    2.    base:   
    3.        - /srv/salt
    复制代码
  • pillar_roots:指定pillar目录,默认为:
    1. pillar_roots:     
    2.    base:     
    3.        - /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配置即可。
  1. # 完整配置:(大部分是默认配置)
  2. [root@manager110 salt]# cat /etc/salt/master
  3. file_roots:
  4.   base:
  5.     - /srv/salt/base
  6.   grantcron:
  7.     - /srv/salt/grantcron
  8.   revokecron:
  9.     - /srv/salt/revokecron
  10. publisher_acl:
  11.   dba:
  12.     - test.ping
  13.     - cmd.*
  14.     - cron.*
  15.     - cp.*
  16.   devuser:
  17.     - test.ping
  18.     - cmd.*
  19.     - cron.*
  20.     - cp.*
  21.    
  22. default_include: master.d/*.conf
  23. interface: 0.0.0.0
  24. ipv6: False
  25. publish_port: 4505
  26. user: root
  27. ret_port: 4506      # 这里ret_port和后面minion配置中的master_port对应保持一致。
  28. pidfile: /var/run/salt/salt-master.pid
  29. conf_file: /etc/salt/master
  30. pki_dir: /etc/salt/pki/master
  31. cachedir: /var/cache/salt/master
  32. keep_jobs: 2
  33. gather_job_timeout: 10
  34. timeout: 5
  35. sock_dir: /var/run/salt/master
  36. max_open_files: 100000
  37. worker_threads: 12
  38. zmq_backlog: 1000
  39. open_mode: False
  40. auto_accept: true
  41. file_recv: True
  42. file_recv_max_size: 1000
  43. tcp_keepalive: True
  44. 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。
  1. # 修改主控端的minion配置文件  修改 #id和#master:salt 这两行 (注意书写规范:每个冒号后面都要跟一个空格)
  2. # #master: salt  指向管理端地址,这里是指向salt-master服务器,可以是IP、域名或主机名
  3. # #id: xxx       minion主机标识必须唯一,如果不配置,默认取机器的hostname。
  4. [root@manager110 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion   #注意master:后的空格
  5. [root@manager110 ~]# sed -i 's/^#id:/id: manager110/g'  /etc/salt/minion   #注意id:后的空格
  6. # 查看配置内容
  7. [root@manager110 ~]# sed -n '/^master:/p'  /etc/salt/minion
  8. master: 192.168.0.110
  9. [root@manager110 ~]# sed -n '/^id:/p'  /etc/salt/minion
  10. id: manager110
  11. [root@manager110 salt]# cat /etc/salt/minion
  12. master: 192.168.0.110
  13. id: manager110
复制代码
完整配置:(大部分都是默认配置)
  1. [root@manager110 salt]# cat /etc/salt/minion
  2. master: 192.168.0.110
  3. ipv6: False
  4. master_port: 4506
  5. user: root
  6. pidfile: /var/run/salt/salt-minion.pid
  7. conf_file: /etc/salt/minion
  8. pki_dir: /etc/salt/pki/minion
  9. minion_id_caching: True
  10. cachedir: /var/cache/salt/minion
  11. sock_dir: /var/run/salt/minion
  12. log_file: /var/log/salt/minion
  13. log_level: warning
  14. log_datefmt: '%H:%M:%S'
  15. tcp_keepalive: True
  16. tcp_keepalive_idle: 300
复制代码
4.4:修改被控端的minion配置文件

最简配置:配置master: 192.168.0.110即可;id可以不用配置,默认取hostname。
切记:“master: ” 冒号后要添加一个空格,然后再写IP。
  1. [root@db101 ~]# sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion   #注意master:后有空格
  2. [root@db101 ~]# sed -i 's/^#id:/id: db101/g'  /etc/salt/minion   #注意id:后的空格
  3. [root@db101 ~]# sed -n '/^master:/p'  /etc/salt/minion
  4. master: 192.168.0.110
  5. [root@db101 ~]# sed -n '/^id:/p'  /etc/salt/minion
  6. id: db101
  7. [root@db101 ~]# cat /etc/salt/minion
  8. master: 192.168.0.110
  9. id: db101
  10. # 其它被控端部署同上,db101修改成对应的host名称就可以了。
  11. # db102修改
  12. sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion
  13. sed -i 's/^#id:/id: db102/g'  /etc/salt/minion
  14. # db103修改
  15. sed -i 's/^#master: salt/master: 192.168.0.110/g' /etc/salt/minion
  16. sed -i 's/^#id:/id: db103/g'  /etc/salt/minion
  17. # 查看
  18. sed -n '/^master:/p'  /etc/salt/minion
  19. sed -n '/^id:/p'  /etc/salt/minion
复制代码
完整配置:(大部分是默认配置)
  1. [root@db101 ~]# cat /etc/salt/minion
  2. master: 192.168.0.110
  3. ipv6: False
  4. master_port: 4506
  5. user: root
  6. pidfile: /var/run/salt/salt-minion.pid
  7. conf_file: /etc/salt/minion
  8. pki_dir: /etc/salt/pki/minion
  9. minion_id_caching: True
  10. cachedir: /var/cache/salt/minion
  11. sock_dir: /var/run/salt/minion
  12. log_file: /var/log/salt/minion
  13. log_level: warning
  14. log_datefmt: '%H:%M:%S'
  15. tcp_keepalive: True
  16. tcp_keepalive_idle: 300
复制代码
4.5:重启服务
  1. # 主控端
  2. systemctl restart salt-master
  3. systemctl status salt-master
  4. systemctl restart salt-minion
  5. systemctl status salt-minion
  6. # 被控端
  7. systemctl restart salt-minion
  8. 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常用选项
  1. -L             列出所有公钥信息
  2. -a minion      接受指定minion等待认证的key
  3. -A             接受所有minion等待认证的key
  4. -r minion      拒绝指定minion等待认证的key
  5. -R             拒绝所有minion等待认证的key
  6. -f minion      显示指定key的指纹信息
  7. -F             显示所有key的指纹信息
  8. -d minion      删除指定minion的key
  9. -D             删除所有minion的key
  10. -y             自动回答yes
复制代码
查看当前证书情况
  1. [root@manager110 salt]# salt-key -L
  2. Accepted Keys:
  3. manager110
  4. Denied Keys:
  5. Unaccepted Keys:
  6. Rejected Keys:
复制代码
接受指定minion的新证书
  1. [root@manager110 salt]# salt-key -a -y db101
  2. The key glob '-y' does not match any unaccepted keys.
  3. # 查看salt master和minion的版本是否一致,如果不一致保持一致。
  4. [root@manager110 salt]# salt-minion --versions-report
复制代码

接受所有minion的新证书
  1. [root@manager110 manager110]# salt-key -y -A
复制代码
4.7:debug
  1. [root@db101 salt]# salt-minion -l debug
  2. [DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
  3. [DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load raven
  4. [DEBUG   ] Reading configuration from /etc/salt/minion
  5. [WARNING ] Insecure logging configuration detected! Sensitive data may be logged.
  6. [DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load log4mongo
  7. [DEBUG   ] TiamatPipPathFinder.find_spec: First time trying to load raven
  8. [DEBUG   ] Configuration file path: /etc/salt/minion
  9. [INFO    ] Setting up the Salt Minion "db101"
  10. [INFO    ] An instance is already running. Exiting the Salt Minion
  11. [INFO    ] Shutting down the Salt Minion
  12. The Salt Minion is shutdown.
复制代码
4.8:查看日志
  1. [root@manager110 salt]# cat /var/log/salt/master
  2. [root@manager110 salt]# cat /var/log/salt/minion
  3. [root@db101 salt]# tail -f /var/log/salt/minion
  4. 2023-03-21 21:38:47,174 [salt.minion      :1089][ERROR   ][95757] Minion unable to successfully connect to a Salt Master.
  5. 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?
  6. # 查看端口是否通
  7. [root@db101 salt]# telnet 192.168.0.110 4505
  8. Trying 192.168.0.110...
  9. telnet: connect to address 192.168.0.110: No route to host
  10. # 端口不通,直接关闭防火墙
  11. $ systemctl stop firewalld && systemctl disable firewalld
  12. # 重新查看
  13. [root@manager110 manager110]# salt-key -L
  14. Accepted Keys:
  15. db101
  16. db102
  17. db103
  18. manager110
  19. Denied Keys:
  20. Unaccepted Keys:
  21. Rejected Keys:
复制代码

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

5.1:列出所有salt的sys模块
  1. [root@manager110 manager110]# salt db101 sys.list_modules
复制代码
5.2:test模块下的ping方法测试主机是否存在
  1. # 指定一个minion
  2. [root@manager110 manager110]# salt db101 test.ping
  3. db101:
  4.     True
  5. # 指定多个minions : -L:list,可指定多个minions,多个minions之间用空格或者逗号隔开
  6. [root@manager110 manager110]# salt -L "db101 db102 db103" test.ping
  7. [root@manager110 manager110]# salt -L "db101,db102,db103" test.ping
  8. db102:
  9.     True
  10. db101:
  11.     True
  12. db103:
  13.     True
  14. # 所有的minions
  15. [root@manager110 manager110]# salt "*" test.ping
  16. db101:
  17.     True
  18. db102:
  19.     True
  20. manager110:
  21.     True
  22. db103:
  23.     True
  24.    
复制代码
5.3:cmd超级模块,所有shell命令都能执行
  1. [root@manager110 manager110]# salt '*' cmd.run 'ps -ef | grep python'
  2. db101:
  3.     root       1053      1  0 Mar16 ?        00:00:37 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  4.     root      97014  97013  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
  5.     root      97016  97014  0 22:09 ?        00:00:00 grep python
  6. manager110:
  7.     root       1143      1  0 Mar19 ?        00:00:17 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  8.     root      55232  78679 64 22:09 pts/0    00:00:00 /opt/saltstack/salt/run/run * cmd.run ps -ef | grep python MainProcess
  9.     root      55247  55243  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
  10.     root      55249  55247  0 22:09 ?        00:00:00 grep python
  11. db102:
  12.     root       1047      1  0 Mar17 ?        00:00:28 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  13.     root      66497  66496  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
  14.     root      66499  66497  0 22:09 ?        00:00:00 grep python
  15. db103:
  16.     root       1052      1  0 Mar17 ?        00:00:29 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
  17.     root     113232 113231  0 22:09 ?        00:00:00 /bin/sh -c ps -ef | grep python
  18.     root     113234 113232  0 22:09 ?        00:00:00 grep python
复制代码
5.4:salt-run命令

该命令执行runner(salt带的或者自定义的,runner以后会讲),通常在master端执行,比如经常用到的manage
  1. salt-run [options] [runner.func]
  2. salt-run manage.status   ##查看所有minion状态
  3. salt-run manage.down     ##查看所有没在线minion
  4. salt-run manage.up       ##查看所有在线minion
复制代码
5.5:salt-key密钥管理,通常在master端执行
  1. salt-key [options]
  2. salt-key -L              ##查看所有minion-key
  3. salt-key -a <key-name>   ##接受某个minion-key
  4. salt-key -d <key-name>   ##删除某个minion-key
  5. salt-key -A              ##接受所有的minion-key
  6. salt-key -D              ##删除所有的minion-key
复制代码
5.6:salt-call

该命令通常在minion上执行,minion自己执行可执行模块,不是通过master下发job
  1. salt-call [options] <function> [arguments]
  2. salt-call test.ping           ##自己执行test.ping命令
  3. salt-call cmd.run 'ifconfig'  ##自己执行cmd.run函数
复制代码
5.7:salt-cp

分发文件到minion上,不支持目录分发,通常在master运行
  1. salt-cp [options] '<target>' SOURCE DEST
  2. salt-cp '*' testfile.html /tmp
  3. salt-cp 'test*' index.html /tmp/a.html
复制代码
5.8:salt-ssh
  1. [/code][size=4]5.9:salt-master[/size]
  2. [indent]master 运行命令
  3. [/indent][code]salt-master [options]
  4. salt-master            ##前台运行master
  5. salt-master -d         ##后台运行master
  6. salt-master -l debug   ##前台debug输出
复制代码
5.10:salt-minion

minion运行命令
  1. salt-minion [options]
  2. salt-minion            ##前台运行
  3. salt-minion -d         ##后台运行
  4. 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

来源:https://www.cnblogs.com/DBArtist/p/17243131.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具