Saltstack
Saltstack介绍
01 自动化运维介绍 02 Saltstack介绍 03 Saltstack部署 04 使用saltstack部署环境 # 运维自动化介绍 背景 传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问题并加以解决。但是,随着互联网 +时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心 # 自动化运维 自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。 自动化 监控自动化 数据采集自动化 数据分析自动化 日常巡检自动化 设备配置比对自动化 故障定位自动化 故障处理自动化 流程处理自动化 日常备份自动化 系统优化自动化 大批量配置自动化 # 自动化运维工具 saltstack:https://docs.saltstack.com/en/latest/ puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578 ansible:https://www.ansible.com/ # Saltstack介绍 • SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统 • Saltstack最主要的两个功能是:配置管理与远程执行 • Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器 • 采用订阅者模式的分布式管理工具 管理节点【发命令】——>被管理节点 【去执行 返回结果】 • 采用自定义协议zeromq 比SSH(一对一)速度更快 ## Salt 原理! SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列列通信 minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信 master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了。它们通常位于你的python库中,这些模块是 python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。 关于zeroMQ master监听4505和4506端口: 4505对应的是ZMQ的PUB system,用来发送消息; 4506对应的是REP system是来接受消息的。 # Saltstack部署 ## salt-master 安装! • yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm • yum install salt-master • yum install salt-syndic 分布式代理 • yum install salt-cloud 也是基于openstack来做的,它可以支持多种云的使用。 如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP Cloud、OpenStack ## Salt-minion 安装! • yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm • yum install salt-minion ## 修改配置文件! [root@master ~]# cat /etc/salt/master |head -5 master: 192.168.10.42 user: root [root@minion01 ~]# head -10 /etc/salt/minion master: 192.168.10.42 user: root id: minion-01 ## 启动 管理 认领 [root@master salt]# systemctl start salt-master [root@master salt]# netstat -ntpl [root@master salt]# salt-key -L [root@master salt]# salt-key -A ... ... [root@minion01 salt]# systemctl start salt-minion ## minion管理! minion加入架构 [root@master srv]# salt-key -L Accepted Keys: 同意加入的 Denied Keys: 未被加入的 Unaccepted Keys: 未知的 Rejected Keys: 被拒绝的 Salt-key! • salt-key -L 列列出来认大哥的 • salt-key -A 所有小弟都认 • salt-key -a 单个认 • salt-key -D 剔除所有小弟 • salt-key -d 删除某个 ## 如何使用salt查看手册 查看模块列列表module salt 'minion-01' sys.list_modules 查看指定module的function用法 salt 'minion-01' sys.list_functions cmd 查看指定模块的详细用法 salt 'minion-01' sys.doc cmd ## 查看minion状态! # 查看minion的状态 [root@master salt]# salt-run manage.status down: up: - minion-01 # 查看minion在线状态 [root@master salt]# salt-run manage.up - minion-01 #查看minion不在线状态 [root@master salt]# salt-run manage.down ## 文件分发 salt-cp! # salt-cp 分发文件到minion上,不支持目录分发,通常在master运行 #考本单个文件 [root@master salt]# salt-cp minion-01 /root/salt-repo-latest-2.el7.noarch.rpm /tmp minion-01: ---------- /tmp/salt-repo-latest-2.el7.noarch.rpm: True # 拷贝单个文件到minion的目标目录下并改名 [root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc minion-01: ---------- /tmp/abc: True ## minion本地执行命令:salt-call! #salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job [root@minion01 tmp]# salt-call test.ping local: True ## 批量操作! # 执行单个salt命令 [root@master salt]# salt "*" test.ping *代表所有主机 test.ping 命令 # 执行一个linux命令 [root@master salt]# salt "*" cmd.run "whoami" cmd.run 告诉客户端执行什么命令 # 执行一个脚本 [root@master salt]# salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认 ## 查看salt minion在执行什么操作! [root@master ~]# salt-run jobs.active 20181029231137078329: ---------- Arguments: - yum -y update Function: cmd.run Returned: Running: |_ ---------- minion-01: 2651 StartTime: 2018, Oct 29 23:11:37.078329 Target: minion-01 Target-type: glob User: root ## 查看正在运行的任务,找到jid! [root@master ~]# salt 'minion-01' saltutil.running minion-01: |_ ---------- arg: - yum -y update fun: cmd.run jid: 20181029231137078329 pid: 2651 ret: tgt: minion-01 tgt_type: glob user: root ## 根据jid杀掉任务! [root@master ~]# salt 'minion-01' saltutil.kill_job 20181029231137078329 minion-01: Signal 9 sent to job 20181029231137078329 at pid 2651 ## 清除minion缓存 [root@master ~]# salt '*' saltutil.clear_cache minion-01: True ## 使用saltstack部署环境 1)部署业务 2)升级业务 3)配置文件升级业务 4)服务管理 ## saltstack 传统的IT运维是将数据中心中的网络设备、服务器、数据库、中间件、存储、虚拟化、硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行排查,找出问 题并加以解决。但是,随着互联网+时代的到来,移动互联网、云计算和大数据技术得到了广泛应用,从而导致企业所管理的IT架构不断扩大,服务器、虚拟化、存储设备的数量越来越 多,网络也变得更加复杂,业务流程越来越繁琐,传统的运维管理也越来越力不从心IT环境异构:系统软硬件种类繁多,导致运维人员运维监控压力大,日常工作量繁重。 故障发生后,运维工程师花费大量精力排查问题,"无法快速和准确的定位问题,治标不治本。由于设备数量巨大,日常巡检占用大量时间,导致工作效率低下,事倍功半。 工作机制混乱,面对庞大的IT系统,缺乏有效、自动化的运维流程,缺乏有效的绩效考核依据。 缺少自动运维机制:IT部门人员过少,导致运维压力大;由于误操作,导致"无法挽回的灾难;大而全的系统,对运维人员技术能力要求越来越高。 系统内数据非常重要,如果遗漏漏备份,系统瘫痪/误操作等出现时会导致"无法估量的后果。自动化运维,可实现日常设备监控、主动发现问题、自动分析定位、基于标准化流程工具规范 化处理、通过自动化运维操作工具处理修复等功能,最终实现监管治自动化运维。 监控自动化zabbix 数据采集自动化 elk 数据分析自动化 日常巡检自动化 设备配置比对自动化 故障定位自动化 blueking 故障处理自动化 流程处理自动化 日常备份自动化 系统优化自动化 kickstart cobbler 大批量配置自动化 分布式管理工具 saltstack:https://docs.saltstack.com/en/latest/ puppet:https://puppet.com/?_ga=2.223205342.4314246.1540783578-2053614486.1540783578 ansible:https://www.ansible.com/ # 为什么不用shell 1.交互式 进程模式 多进程 机器受不了 2.开发周期长 没有第三方 SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统 Saltstack最主要的两个功能是:配置管理与远程执行 Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利利器 # 分布式工具 管理节点 被管理节点 管理节点【发命令】——>被管理节点 【去执行 返回结果】 几款软件 使用的协议 ssh ssh 加密 一对一 所以比较慢 点对点 自定义协议 zeromq 管理和被管理建立长连接 pub—>sub 模式发布消息 发布者—> 订阅者 发布消息 传输消息 加密 字典方式发布 # salt 工作原理 SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列列通信 minion上线后先与master端联系,把自己的pub key发过去,这时master端通过saltkey-L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信 master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。 这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*'cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。 master监听4505和4506端口,4505对应的是ZMQ的PUBsystem,用来发送消息,4506对应的是REP system是来接受消息的。 slat master minion 主人 奴隶 奴隶去找主人 minion 找 master 自己也可以管理自己 1) 安装包 2)配置文件 3)调整平台 4)应用 5)部署一个环境使用salt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #install master salt-master minion salt-minion yum install https://repo.saltstack.com/yum/redhat/salt-repolatest- 1.el7.noarch.rpm ◦ sudo yum install salt-master #master ◦ sudo yum install salt-minion #minion yum install salt-ssh yum install salt-syndic 分布式代理 yum install salt-cloud 也是基于openstack来做的,它可以支持多种云的使用。 比如:Aliyun、Azure、DigitalOcean、EC2、Google Compute Engine、HP Cloud、OpenStack、等等 #安装后 查看每台主机的主机名 cat /etc/hosts 主机名和ip对应 ========================== #0.配置文件 /etc/salt/master #主 /etc/salt/minion #节点 ##节点配置 yaml语言 master: IP #注意冒号空格不能少 id: 主机名 #注意冒号空格不能少 ========================== #1.启动 关闭防⽕火墙 selinux 使用端口 4505 4506 第一次启动 salt-master -l debug salt-minion -l debug 正常 service salt-master start service salt-minion start [root@master salt]# salt-key Accepted Keys: Denied Keys: Unaccepted Keys: minion-01 Rejected Keys: [root@master salt]# salt-key -a minion-01 The following keys are going to be accepted: Unaccepted Keys: minion-01 Proceed? [n/Y] Y Key for minion minion-01 accepted. [root@master salt]# salt-key -L Accepted Keys: minion-01 Denied Keys: Unaccepted Keys: Rejected Keys: ========================== #2.master认小弟 salt-key -L 列列出来认大哥的 salt-key -A 所有小弟都认 salt-key -a 单个认 salt-key -D 剔除所有小弟 salt-key -d 删除某个 ========================== 使用salt #如何使用salt 看手册 查看模块列列表module salt 'minion-01' sys.list_modules 查看指定module的function用法 salt 'minion-01' sys.list_functions cmd 查看指定模块的详细用法 salt 'minion-01' sys.doc cmd #查看minion #查看minion的状态 [root@master salt]# salt-run manage.status down: up: - minion-01 #查看minion在线状态 [root@master salt]# salt-run manage.up - minion-01 #查看minion不在线状态 [root@master salt]# salt-run manage.down #salt-cp 分发文件到minion上,不支持目录分发,通常在master运行 #考本单个文件 [root@master salt]# salt-cp minion-01 /root/salt-repolatest- 2.el7.noarch.rpm /tmp minion-01: ---------- /tmp/salt-repo-latest-2.el7.noarch.rpm: True #拷贝单个文件到minion的目标目录下并改名 [root@master salt]# salt-cp minion-01 /root/anaconda-ks.cfg /tmp/abc minion-01: ---------- /tmp/abc: True #salt-call minion本地执行命令,自己执行可执行模块,不是通过master下发job [root@minion01 tmp]# salt-call test.ping local: True #查看salt minion在执行什么操作 [root@master ~]# salt-run jobs.active 20181029231137078329: ---------- Arguments: - yum -y update Function: cmd.run Returned: Running: |_ ---------- minion-01: 2651 StartTime: 2018, Oct 29 23:11:37.078329 Target: minion-01 Target-type: glob User: root #查看正在运行的任务,找到jjd [root@master ~]# salt 'minion-01' saltutil.running minion-01: |_ ---------- arg: - yum -y update fun: cmd.run jid: 20181029231137078329 pid: 2651 ret: tgt: minion-01 tgt_type: glob user: root #根据jid杀掉任务 [root@master ~]# salt 'minion-01' saltutil.kill_job 20181029231137078329 minion-01: Signal 9 sent to job 20181029231137078329 at pid 2651 #清除minion缓存 [root@master ~]# salt '*' saltutil.clear_cache minion-01: True #执行单个salt命令 salt "*" test.ping *代表所有主机 test.ping 命令 #执行一个linux命令 salt "*" cmd.run "whoami" cmd.run 告诉客户端执行什么命令 #执行一个脚本 salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认 salt "*" grains.items 查看minion的硬件信息 模块命令 salt "minion_name" 模块.函数 参数 系统命令 cmd.run salt "*" cmd.run 'hostname' #执行一个脚本 salt "*" cmd.script "salt://脚本名" #/srv/salt 脚本路径默认