saltstack-自动化(2)
执行的命令写入mysql
[root@node1]#yum install MySQL-python -y
[root@node1]#vim /etc/salt/master
1 2 3 4 5 | master_job_cache: mysql ###把master的job写如mysql里面 mysql.host: '10.240.17.103' ###mysql地址 mysql.user: 'salt' ###连接mysql用户名 mysql.pass: 'salt' ###mysql的密码 mysql.db: 'salt' ###连接mysql的库<br>mysql.port: 3306 ###mysql的连接端口 |
[root@node1]#yum install mysql-server
[root@node1]#/etc/init,d/mysqld start
[root@node1]#mysql_secure_installation ##安全初始化
第一次直接回车
第二次是否为root配置密码 Y 输入密码
第三次是否删除匿名用户 Y
第四次是否禁止root远程登录 Y
第五次是否删除test数据库 Y
第六次是否刷新授权表 Y
[root@node1]#mysql -u root -p 123.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | https: //www .unixhot.com /docs/saltstack/ref/returners/all/salt .returners.mysql.html #module-salt.returners.mysql ##官网地址 CREATE DATABASE `salt` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; USE `salt`; -- -- Table structure for table `jids` -- DROP TABLE IF EXISTS `jids`; CREATE TABLE `jids` ( `jid` varchar(255) NOT NULL, `load` mediumtext NOT NULL, UNIQUE KEY `jid` (`jid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE INDEX jid ON jids(jid) USING BTREE; -- -- Table structure for table `salt_returns` -- DROP TABLE IF EXISTS `salt_returns`; CREATE TABLE `salt_returns` ( `fun` varchar(50) NOT NULL, `jid` varchar(255) NOT NULL, ` return ` mediumtext NOT NULL, ` id ` varchar(255) NOT NULL, `success` varchar(10) NOT NULL, `full_ret` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY ` id ` (` id `), KEY `jid` (`jid`), KEY `fun` (`fun`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Table structure for table `salt_events` -- DROP TABLE IF EXISTS `salt_events`; CREATE TABLE `salt_events` ( ` id ` BIGINT NOT NULL AUTO_INCREMENT, `tag` varchar(255) NOT NULL, `data` mediumtext NOT NULL, `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `master_id` varchar(255) NOT NULL, PRIMARY KEY (` id `), KEY `tag` (`tag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; grant all on salt.* to salt@10.240.17.103 identified by 'salt' ; |
[root@node1]#/etc/init.d/salt-master restart
[root@node1]#mysql -h 10.240.17.103 -u salt -p salt
1 2 3 4 5 | use salt; select * from salt_returns; [root@node1] #salt '*' test.ping select * from salt_returns; ##发现salt-master的命令已经存入数据库 |
https://www.unixhot.com/docs/saltstack/topics/targeting/globbing.html salt-master日常操作方法
1 2 3 4 5 6 | salt '*' network.active_tcp ###获取网络信息 salt '*' network.arp ###获取ARP信息 salt '*' network.connect archlinux.org 80 ###连通性测试 到这个域名的80端口 https: //www .unixhot.com /docs/saltstack/ref/modules/all/salt .modules.network.html #module-salt.modules.network |
salt 'node1' state.show_top ##查看node1的都有那些状态
include: ##引用web.下的httpd.sls来做配置
- web.httpd
###############################################
salt-run manage.status #####做状态管理
salt- run manage.versions ###查看版本是什么
################################################
自动化安装zabbix-agent
[root@node1 base]#mkdir init zabbix logstash
[root@node1 base]#cd init && mkdir files &&cd files
[root@node1 files]# wget http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 init]# vim yum_repo.sls
1 2 3 4 5 6 | /etc/yum .repos.d /epel-7 .repo: ##状态名 直接是路径名 file .managed: - source : salt: //init/files/epel-7 .repo - user: root - group: root - mode: 644 |
[root@node1 base]#cd zabbix && mkdir files && vim zabbix-agent.sls
1 2 3 4 5 6 7 8 9 10 11 12 | include:<br> - init.yum_repo<br>zabbix-agent: pkg.installed: - name: zabbix22-agent<br> - require:<br> - file : /etc/yum .repos.d /epel-7 .repo ##依赖这个名称ID<br> file .managed: - name: /etc/zabbix/zabbix_agentd .conf - source : salt: //zabbix/files/zabbix_agentd .conf - user: root - group: root - mode: 644 - template: jinja ###变成jinja模版 - defaults: ## 声明以下变量 ZABBIX_SERVER: 10.240.17.103 <br> AGENT_HOSTNAME: {{ grains[ 'fqdn' ] }} ###通过grains来获取主机名<br> - require: ###依赖与zabbix-agent,如果安装成功才执行file.managed<br> - pkg: zabbix-agent<br> service.running: ######状态管理<br> - name: zabbix-agent<br> - enable: True <br> - watch: ###依赖于<br> - file: zabbix-agent ##文件变更就重启<br> - pkg: zabbix-agent ##包变更就重启<br> zabbix_agentd.conf.d:<br> file.directory:<br> - name: /etc/zabbix/zabbix_agentd.conf.d<br> - watch_in: <br> - service: zabbix-agent <br> - require: <br> - pkg: zabbix-agent ##依赖包 zabbix-agent<br> - file: zabbix-agent ##依赖文件zabbix-agent |
[root@node1 zabbix]#sz /etc/zabbix_agentd.conf
[root@node1 files]#vim zabbix_agentd.conf
Server={{ ZABBIX_SERVER }}
Hostname={{ AGENT_HOSTNAME }}
INCLUDE=/etc/zabbix_agentd.conf.d/
[root@node1 prod]# mkdir -p modules/{apache,haproxy,keeplived,mysql,redis}
[root@node1 prod]# mkdir redis-cluster
[root@node1 prod]# cd modules && cd redis
[root@node1 redis]# vim redis-install.sls ######redis安装
1 2 3 | redis- install : pkg.installed: - name: redis |
[root@node1 redis-cluster]# mkdir files && vim redis-master.sls
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | include: - modules.redis.redis- install redis-master-config: file .managed: - name: /etc/redis .conf - source : salt: //redis-cluseter/files/redis-master .conf - user: root - group: root - mode: 644 - template: jinja - defaults: REDIS_MEM: 1G redis-master-reivice: service.running: - name: redis - enable : True - wath: - file : redis-master-config |
[root@node1 redis-cluster]# cd files && sz redis.conf && mv redis.conf redis-master.conf
[root@node1 files]# vim redis-master.conf
61 bind 0.0.0.0
128 daemonize yes
537 maxmemory {{ REDIS_MEM }}
[root@node1 prod]#salt 'node1' state.sls redis-cluster.redis-master test=True saltenv=prod
redis-cli -h 10.240.17.100
https://github.com/unixhot/saltbook-code/tree/master/salt/prod/keepalived
salt-ssh配置
[root@node1 ~]#yum install salt-ssh -y
[root@node1 ~]#vim /etc/salt/roster
1 2 3 4 5 6 7 8 9 10 11 12 | node1: host: 10.240.17.100 user: root passwd : 123.com port: 22 node2: host: 10.240.17.103 user: root passwd : 123.com port: 22 |
[root@node1 ~]#salt-ssh '*' test.ping -i
[root@node1 ~]#salt-ssh '*' -r 'w'
https://www,unixhot.com/docs/saltstack/ref/netapi/all/salt.netapi.rest_cherrypy.html#a--rest-api-for-salt
#########salt-api
[root@node1 ~]#yum install salt-api
[root@node1 ~]# rpm -qa |grep cherry
[root@node1 ~]# yum install pyOpenSSL
[root@node1 ~]# salt-call --local tls.create_self_signed_cert
[root@node1 ~]# vim /etc/salt/master
12 default_include: master.d/*.conf
[root@node1 salt]#mkdir master.d && master.d
[root@node1 master.d]vim api.conf
1 2 3 4 5 | rest_cherrypy: host: 10.240.17.103 port: 8000 ssl_crt: /etc/pki/tls/certs/localhost .crt ssl_key: /etc/pki/tls/certs/localhost .key |
[root@node1 salt]#useradd -M -s /sbin/nologin saltapi ##不创建家目录
[root@node1 salt]#echo "saltapi" |passwd saltapi --stdin ##创建非交互的密码
[root@node1 master.d]#vim auth.conf
1 2 3 4 5 6 7 | external_auth: pam: saltapi: - .* - '@wheel' - '@runner' - '@jobs' |
[root@node1 salt]# /etc/init.d/salt-master restart
[root@node1 salt]#/etc/init.d/salt-api restart
[root@node1 salt]# netstat- ntlp |grep 8000
[root@node1 salt] #curl -sSk https://10.240.17.103:8000/login \
-H 'Accept: application/x-yaml' \
-d username='saltapi' \
-d password='saltapi' \
-d eauth='pam'
[root@node2 ~]# curl -sSk https://10.240.17.103:8000 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 3eb37a72cc8ba6ade1be9bb73753514e746658c4' -d client=local -d tgt='*' -d fun=test.ping
[root@node2 ~]# curl -sSk https://10.240.17.103:8000 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 3eb37a72cc8ba6ade1be9bb73753514e746658c4' -d client=local -d tgt='*' -d fun=cmd.run -d arg='uptime'
########salt-master 集群架构
[root@node1]#vim /etc/master
master:
- 10.240.17.100
- 10.240.17.103
[root@node2]# yum install salt-master -y
[root@node1]#sz /etc/salt/master 传到salt2 /etc/salt/
[root@node1]#yum install nfs-utils -y
[root@node1]#vim /etc/export
/etc/salt/pki/master 10.240.17.100 *(rw,sync,no_root_squash,no_all_squash)
/srv/salt 10.240.17.100 *(rw,sync,no_root_squash,no_all_squash)
[root@node1]# /etc/init.d/nfs start
[root@node2]#showmount -e 10.240.17.103
[root@node2]#mkdir /etc/salt/pki/master
[root@node2]#mkdir /srv/salt
[root@node2]#mount -t nfs 10.240.17.103:/etc/salt/pki/master /etc/salt/pki/master
[root@node2]#mount -t nfs 10.240.17.103:/srv/salt /srv/salt
[root@node2]# systemctl start salt-master
1.master配置文件一样 2.master file_roots一样 3.master公钥和私钥一样4.修改salt-minion配置,设置2个master并重启 5.在另外一台master上同意设置

altStack生产实践建议 1.不建议使用Salt的File模块 目录管理 进行代码部署 命令编排的状态管理 压缩包,file.managed cmd.run 执行部署 2.配置管理,不建议使用salt管理项目代码的配置文件。 分层管理,salt只管理服务例如Nginx Tomcat Apache 3.如果你有固定的文件服务器,可以使用source: salt:// http:// ftp:// 4.SLS版本化 1.创建一个git项目。 2.找一个测试环境,编写SLS,测试,git commit && git push到版本仓库 3.生产环境git pull,测试。全部执行。 1.谁 什么时间 干了什么 输出是什么 5. 使用Master Job Cache保存job的输出到SQL 停机维护: 1.登录到xxx机器 检查:执行hostname检查主机 执行ifconfig检查ip地址 2.执行xxx。关闭xxx 检查:执行netstat -ntlp | grep 80检查端口 执行ps aux | grep nginx检查进程 SaLtStack 二次开发 1.Master Job cache将所有的job输出保存到MySQL 2.如果做管理平台,可以将User id和Jid做关联 3.使用List做目标选择 回忆过去: 1.SLS YAML ID NAME 2.状态模块 pkg file service cmd 3.状态间关系 require require_in watch watch_in unless 4.include minion_id怎么改 1.停止minion服务 2.salt-key -d minionid 删除minion 3.rm -f /etc/salt/minion_id 4.rm -rf /etc/salt/pki 5.修改配置文件id: 6.启动minion. 系统初始化: 1.DNS file.managed 2.防火墙 service.dead 3.selinux file.managed 4.limit设置 file.managed 5.SSH useDNS设置,改端口 file.managed 6.systctl 内核参数调优 systctl 7.关闭不需要的服务 service 8.时间同步 file.managed cron 9.基础软件包 pkg.installed 10.yum源 file.managed 生产环境按项目走 modules/ 基础状态 - files redis-cluster 公用服务 - files sms/ - redis-cluster/redis-master.sls redis-slave.sls - mysql-cluster/mysql-master.sls mysql-slave.sls - nginx shop/ user/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构