• 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 .

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

    .[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

    在这里插入图片描述
    主机清单必会格式:

    主机清单格式:[分类或分组的名字] #注意分类要体现出服务器的作用

    ip地址或主机名或域名 #注意主机名要能解析才行

    案例:对主机分组并进行连接测试

    [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"
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 批量删除/tmp/目录下的所有内容

    [root@m01 ~]#ansible all -m shell -a ‘rm -fr /tmp/*’

    shell模块虽然和modle模块相似,但是shell支持特殊命令
    在这里插入图片描述
    ll /tmp/可以进行查看

    • 批量获取ip地址

    [root@m01 ~]#ip a s ens33

    [root@m01 ~]#ip a s ens33 |awk -F’[/ ]+’ ‘NR==5{print $3}’
    在这里插入图片描述
    测试:

    [root@m01 ~]#ansible all -m shell -a "ip a s ens33 |awk -F'[/  ]+' 'NR==5{print \$3}'"
    

    在这里插入图片描述
    shell模块不推荐使用执行较为复杂的指令,如果需要执行放到脚本中进行执行

    避免因为特殊符号与引号进行导致问题

    script模块

    • 执行流程:分发脚本(传输脚本),在被管理端运行脚本

    在m01管理机上进行编写脚本:
    在这里插入图片描述
    在这里插入图片描述
    进行检查

    [root@m01 ~]#ansible all -m script -a’/server/scripts/xunjian.sh’
    在这里插入图片描述
    查看python及ansible进程号
    在这里插入图片描述
    这里查看进程,只看到了ansible控制进程,这是因为ansible在这里进行了串行

    (除非使用并行功能),并且通过ssh连接到远程主机进行执行命令

    若为串行,需要登录到各个分别的服务器登录查看ansible相关进程信息

    若ansible剧本包含其任务,不仅为script模块,它们的进程也有可能在后台进行运行,不会直接显示在ansible的控制进程中

    在这里插入图片描述
    ansible会等待一个主机上的脚本执行完毕后再开始下一个主机的脚本执行(但是并不意味着ansible)并不意味着ansible控制进程本身上脚本执行创建单独的进程可以使用

    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

    创建文件

    ansible all -m file -a 'path=/wulin/a/b/c/d/ state=directory'
    

    在这里插入图片描述
    在这里插入图片描述
    创建软链接

    [root@m01 ~]#ansible all -m file -a 'path=/opt/hosts src=/etc/hosts  state=link'
    

    在这里插入图片描述
    创建/ans-backup/目录结果是wulin

    [root@m01 ~]#ansible all -m file -a 'path=/ans-backup mode=700 group=root  owner=wulin  state=directory'
    

    在这里插入图片描述
    在这里插入图片描述
    删除文件或目录

    [root@m01 ~]#ansible all -a 'ls-l /wulin/'
    

    在这里插入图片描述
    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’

    [root@m01 ~]#ansible all -m yum -a 'name=tree,lrzsz update_cache=yes state=present'
    

    在这里插入图片描述

    [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/'
    

    在这里插入图片描述
    在这里插入图片描述

    [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 ~]#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地址)
    在这里插入图片描述
    在这里插入图片描述给web服务器配置yum源

    [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
    
    [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'
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    批量创建用户

    [root@m01 ~]#ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present'
    

    在这里插入图片描述
    更多内容关注小编!!!

  • 相关阅读:
    【OpenCV】 - 显示图像API之imshow()对不同位深度(数据类型)的图像的处理方法
    JavaEE三剑客之JDBC
    物联网开发笔记(7)- 使用Wokwi仿真ESP32开发板实现LED灯点亮、按钮使用
    Swagger ui接口自动化批量漏洞测试
    Seata分布式事务
    R语言ggplot2可视化:可视化折线图、使用labs函数为折线图添加自定义的X轴标签信息
    万字血书Vue—Vue语法
    2.29log | 968.监控二叉树,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
    Linux磁盘常见知识
    Android组件通信——Service(二十七)
  • 原文地址:https://blog.csdn.net/2302_78067597/article/details/139881872