Linux集群自动化维护-Ansible

1.1Ansible概述

  • 自动化运维:批量管理,批量分发,批量执行,维护。。
  • 是python写的

批量管理工具:

Ansible(无客户端):无客户端,基于ssh进行管理与维护

Saltstack (python写的) : 需要安装客户端,基于ssh进行管理,与ansible

terraform (公有云-管理系统,比如创建100台阿里服务器/多少个磁盘,多少个系统) :批量管理基础设施(tf批量创建有100台公有云)github去下载软件

1.2环境架构准备

  • Inventory 主机清单:被管理主机的ip列表,分类
  • ad-hoc模式:命令行批量管理(使用ans模块),临时任务
  • playbook剧本模式:类似于把操作写出脚本,可以重复运行这个脚本

部署及配置

yum install -y ansible

修改配置文件关闭主机Host_key_checking .

修改配置文件开启日志功能

bash 复制代码
.[root@m01 ~]# egrep -vn '^$|#'
/etc/ansible/ansible.cfg
10:[defaults]
71:host_key_checking = False
111:log_path = /var/log/ansible.log
327:[inventory]340:[privilege_escalation]
346:[paramiko_connection]370:[ssh_connection]
431:[persistent_connection]
445:[accelerate]
460:[selinux]
469:[colors]
485:[diff]

ansible必会模块

  • ansible模块概述:ansible中模块类似于linux中的命令,我们通过Linux命令管理系统,通过ansible模块实现批量管理

  • ansible中模块一般相当于Linux中一些命令,yum模块,file模块,user模块

  • ansible中的模块拥有不同的选项这些选项一般是一些单词,拥有自己记得格式与要求

模块分类

命令和脚本模块

  • command模块 ansible默认的模块 执行简单的命令,不支持特殊符号

  • shell模块 执行命令 支持特殊符号

  • script模块 分发脚本并执行

文件

  • file 创建目录,文件,软链接
  • copy 远程分发文件,修改权限,所有者,备份

服务

  • systemd 服务管理
  • service 服务管理(了解)

软件包

  • yun源 yum_repository
  • yum命令

系统管理

  • get_url下载软件
  • mount模块 挂载
  • cron模块 定时任务

用户管理

  • group模块 管理用户组
  • user模块 该你了用户
  • 压缩解压(unarchive),rsync模块(synchronize),数据库模块(mysql_db,mysql_user)...

ansible-doc -l 查看

root@m01 \~\]#ansible-doc -l \|wc -l 3387 ### 命令脚本模块 command模块 * 是ans默认的模块。适用于简单的命令,不支持特殊符号 * 批量获取所有的主机的主机名 执行hostname命令 ansible > \[root@m01 \~\]#vim /etc/ansible/hosts ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/26b82637a40d4fbe829e5a1961094ba7.png) 主机清单必会格式: 主机清单格式:\[分类或分组的名字\] #注意分类要体现出服务器的作用 ip地址或主机名或域名 #注意主机名要能解析才行 案例:对主机分组并进行连接测试 ```bash [root@m01 ~]# cat/etc/ansible/hosts [web] 172.16.1.7 [backup] 172.16.1.41 [nfs] 172.16.1.31 [root@m01 ~]# ansible all -m ping172.16.1.31 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python":"/usr/bin/python"}, changed": false, "ping": "pong" } 172.16.1.41 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": " /usr/bin/python" }, "changed": false, "ping": "pong" } 172.16.1.7 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": " /usr/bin/python" }, "changed": false, "ping": "pong" } ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0bd5a2cf3f5849dc98263a3bcf7c226b.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/16189f7e3176413a8911910136684202.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1168edfcca35478c871946382ac1f7e6.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7f5185f77f244c96b2df3df770c0c436.png) * 批量删除/tmp/目录下的所有内容 \[root@m01 \~\]#ansible all -m shell -a 'rm -fr /tmp/\*' shell模块虽然和modle模块相似,但是shell支持特殊命令 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1ad925fe4ef3491dab25e52343ca0ff4.png) ll /tmp/可以进行查看 * 批量获取ip地址 \[root@m01 \~\]#ip a s ens33 \[root@m01 \~\]#ip a s ens33 \|awk -F'\[/ \]+' 'NR==5{print $3}' ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1be106a9109c43cbb684aed6bf28ed86.png) 测试: ```bash [root@m01 ~]#ansible all -m shell -a "ip a s ens33 |awk -F'[/ ]+' 'NR==5{print \$3}'" ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/881f894de3924c309844c3409819a951.png) shell模块不推荐使用执行较为复杂的指令,如果需要执行放到脚本中进行执行 避免因为特殊符号与引号进行导致问题 script模块 * 执行流程:分发脚本(传输脚本),在被管理端运行脚本 在m01管理机上进行编写脚本: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/135fa4e2be40453bb7be87c65e35fb6b.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff1043cced29411782d0d54ad82860a8.png) 进行检查 \[root@m01 \~\]#ansible all -m script -a'/server/scripts/xunjian.sh' ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/08525f4fe15b4915a203780011f58ae2.png) 查看python及ansible进程号 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6858220c730d4324a0dc75de4926d33f.png) 这里查看进程,只看到了ansible控制进程,这是因为ansible在这里进行了串行 (除非使用并行功能),并且通过ssh连接到远程主机进行执行命令 若为串行,需要登录到各个分别的服务器登录查看ansible相关进程信息 若ansible剧本包含其任务,不仅为script模块,它们的进程也有可能在后台进行运行,不会直接显示在ansible的控制进程中 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a0f07bfb2458423fa51b7c2e1b86ae64.png) ansible会等待一个主机上的脚本执行完毕后再开始下一个主机的脚本执行(但是并不意味着ansible)并不意味着ansible控制进程本身上脚本执行创建单独的进程可以使用 ```bash ansible all -m script -a '/server/scripts/xunjian.sh' --forks 10 forks进行会同时最多连接10个本地进程,它会创建足够多多进程管理进行连接 ``` 在管理机m01上进行ll /root/.ansble/tmp/ 查看为0 在进行运行脚本,查询会看到相关的信息,然后可以cat进行查询巡检脚本内容 ### 文件相关模块 file模块 * file模块不仅可以管理文件,还可以管理目录,及软链接 * file模块相当于touch,mkdir,rm ,ln -s命令相结合的模块 path 路径(目录文件会写) src 源文件一般用于link(创建软链接模式,并且指定源文件) state:状态(模式)具体要做什么,删除/创建/操作文件,目录;state=directory床啊金目录,state=file(默认)state=linl创建软链接;state touch创建文件 state=absent删除(如果是目录递归删除目录) mode=755创建并修改权限 owner=root group=root 创建文件 ```bash ansible all -m file -a 'path=/wulin/a/b/c/d/ state=directory' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cf999d4f1efe43acb03c082409dde7ba.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d8096af301cf45d3bda1aed10ad4a262.png) 创建软链接 ```bash [root@m01 ~]#ansible all -m file -a 'path=/opt/hosts src=/etc/hosts state=link' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/65175b09cc7d4782804ecd7278c48bbe.png) 创建/ans-backup/目录结果是wulin ```bash [root@m01 ~]#ansible all -m file -a 'path=/ans-backup mode=700 group=root owner=wulin state=directory' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0c8082512ca84fc1a53013336e3a724c.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/67ae0617a06c40a29d8a25293a326ffe.png) 删除文件或目录 ```bash [root@m01 ~]#ansible all -a 'ls-l /wulin/' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/40e94d5c52c64e7cbd7947944fa9a189.png) copy模块 * 批量分发:scp,1个节点()发送文件或压缩包到所有被管理者端,copy是单向传输 src source源文件,管理端的某一个文件 dest destination 目标被管理者端的目录/文件 backup backup=yes 会在覆盖前进行备份 mode修改权限 owner修改为指定所有者 group修改为指定用户组 \[root@m01 \~\]#ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes' ```bash [root@m01 ~]#ansible all -m yum -a 'name=tree,lrzsz update_cache=yes state=present' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/26a9c466866347f2a652430d74e35c87.png) ```bash [root@m01 ~]#ansible all -m get_url -a 'url="https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm" dest=/tmp/' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f17eedcbcc0f45eb9bef83facfc2088e.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5949ace67abb4319bd93af39d68077bb.png) ```bash [root@m01 ~]#ansible all -m get_url -a 'url="https://tengine.taobao.org/download/tengine-2.3.3.tar.gz" dest=/app/tools/' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8403734a55f443fa90fd936ae3188949.png) \[root@m01 \~\]#wget \[root@m01 \~\]#ansible all -m get_url -a 'url="https://tengine.taobao.org/download/tengine-2.3.3.tar.gz" dest=/app/tools/' \[root@m01 \~\]#cat /etc/resolv.conf Generated by NetworkManager search localdomain nameserver 192.168.28.2 ping192.168.28.2(测试是否拿到淘宝nameserver地址) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1b7e19c5db0747749b95fa69db1c7f08.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/107f9d0e8c94478295ebb457249576bf.png)给web服务器配置yum源 ```bash [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true ``` ```bash [root@m01 ~]#ansible web -m yum_repository -a 'name=ngx description="nginx repo" baseurl="http://nginx.org/packages/centos/$releasever/$basearch/" gpgcheck=no enabled=yes' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5fad3d6d575d4114ba0c84d0ddece46f.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fada47d53dd74086a191bb83b723efbd.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/65f9bd5889174addab1a6a1fca38f2f1.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/662f55280f9c4010bffb9c4d5c81d0e5.png) 批量创建用户 ```bash [root@m01 ~]#ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present' ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ce54708494a14dab8a4acae2b19d772f.png) 更多内容关注小编!!!

相关推荐
lqj_本人19 分钟前
鸿蒙OS&UniApp微服务架构实践:从设计到鸿蒙部署#三方框架 #Uniapp
架构·uni-app·harmonyos
十五年专注C++开发29 分钟前
CMake指令:string(字符串操作)
linux·开发语言·c++·cmake·跨平台编译
ak啊43 分钟前
域名系统(DNS)
运维·前端·后端
明早你自己说1 小时前
根据Cortex-M3(包括STM32F1)权威指南讲解MCU内存架构与如何查看编译器生成的地址具体位置
stm32·架构·内存
halugin1 小时前
Linux-cron
运维
一只BI鱼1 小时前
微服务常用日志追踪方案:Sleuth + Zipkin + ELK
elk·微服务·架构
李明卫杭州1 小时前
架构设计中的4+1视图
后端·架构
藥瓿亭1 小时前
IPtables部署和使用
linux·运维·服务器·网络·iptables·防火墙·firewall
前端付豪1 小时前
网易微前端架构实战:如何管理100+子应用而不崩
前端·后端·架构
zhaoolee1 小时前
一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban
运维·服务器·chatgpt