当前位置: 首页 > news >正文

网站集群批量管理-Ansible(ad-hoc)

1. 概述

1. 自动化运维: 批量管理,批量分发,批量执行,维护

2. 无客户端,基于ssh进行管理与维护

2. 环境准备

环境主机
ansible10.0.0.7(管理节点)
nfs01 10.0.0.31(被管理节点)
backup10.0.0.41(被管理节点)

2.1 创建密钥认证

安装sshpass

yum install -y  sshpass

#!/bin/bash
##############################################################
# File Name:24-ssh.sh
# Version:V1.0
# Author:xzb996
# Organization:www.oldboyedu.com
# Desc:一键创建密钥对,分发密钥对
##############################################################
##1.vars
pass=1
ips="10.0.0.31 10.0.0.41"##2.创建密钥对
if [ ~/.shh/id_rsa] ;thenecho "已经有密钥对了"
elseecho "正在创建密钥对"ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
fi##3.通过循环发送密钥对
for ip in $ips
do sshpass -p${pass} ssh-copy-id -i ~/.ssh/id_rsa.pub -oStrictHostKeyChecking=no $ip &>/dev/nullecho "$ip 密钥已发送..."done 

3. 部署与配置

 yum install -y ansible 

3.1 配置

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

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

4. Ans-inventory主机清单 

1. ansible默认读取在/etc/ansible/hosts文件,并非/etc/hosts.

2.未来实际使用中一般我们会把主机清单文件存放在指定的目录中,运行ansible的时候通过-i选项指定主机清单文件即可

 4.1 主机清单必会格式

主机清单格式:

[分类或分组的名字]         #注意分类要体现出服务器的作用

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

4.1.1 对主机分组并进行连接测试 

##vim编辑后用gg+dG清空文件内容
[nfs]
172.16.1.31
[backup]
172.16.1.41

测试

ansible命令格式:

ansible 主机ip或分组或all   -m 指定使用的模块名字 

这里的ping模块用于检查被管理端是否可以访问

 4.2 子组

创建新的分组data包含已有的分组backup和nfs

[nfs]
172.16.1.31
[backup]
172.16.1.41
##c创建data的子组
[data:children]
nfs
backup

子组使用children关键词创建

格式:

[data:children]     #组名字:children即可 

 4.3 指定用户,密码

不推荐,推荐先配置密钥认证,然后管理
没有配置密钥认证,主机清单如何书写?

[nfs]
172.16.1.31 ansible_user=root  ansible_password=1 ansible_port=22 ##指定用户名,密码,端口

5.Ansible模块

1.Ansible中通过各种模块实现批量管理.

2.一般来说这些模块对应着Linux里面的基本操作或服务管理

3. 找出Linux场景操作对应的模块即可

5.1 命令与脚本类模块 

5.1.1 command模块

是ansible默认的模块,适用于执行简单的命令,不支持特殊符号

 批量获取所有主机的主机名
ansible all -m command -a 'hostname'

 5.1.2 shell模块

批量获取所有主机的IP地址
ansible all -m shell -a "ip a s eth0 |awk -F'[ /]+' 'NR==3{print \$3}'"

shell模块不推荐执行较为复杂的指令,如果需要执行放在脚本中执行 

5.1.3 script模块

1.分发脚本(传输脚本)

2.运行脚本

 批量执行脚本获取主机信息
#!/bin/bash
##############################################################
# File Name:25-ansible-script.sh
# Version:V1.0
# Author:xzb996
# Organization:www.oldboyedu.com
# Desc:系统巡检脚本
##############################################################
hostname
hostname -I
uptime 
whoami
date +%F
ansible all -m script -a '/server/scripts/25-ansible-script.sh'

 5.2 文件相关模块

管理文件,管理目录,软连接

file模块模块说明
path路径(目录,文件) 必须要写
src源文件一般用于link(创建软连接模式) 用于指定源文件
state

状态(模式)

state=directory 创建目录

state=file (默认) 更新文件,如果文件不存在也不创建

state=link 创建软连接

state=touch 创建文件

statestate=absent 删除 (注意如果是目录递归删除目录)
modemode=755创建并修改权限
onweronwer=root
groupgroup=root

创建/tmp/xzb666.txt
ansible all -m file -a 'path=/tmp/xzb66.txt state=touch'
创建目录/app/ 
ansible all -m file -a 'path=/app/xzb/xzb666 state=directory'
创建软连接 /etc/hosts创建软连接到/tmp/下
ansible all -m file -a 'path=/tmp/hosts src=/etc/hosts state=link'

创建/ans-backup目录 所有者是oldboy
ansible all -m file -a 'path=/ans-backup owner=oldboy group=oldboy mode=700 state=directory'

删除/ans-backup/
ansible all -m file  -a 'path=/ans-backup state=absent'

 5.3 copy模块

批量分发:scp

copy模块
srcsource 源文件
destdestination 目标
backupbackup=yes 则会在覆盖前进行备份
mode修改权限
owner修改为指定所有者
group修改为指定用户组

ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts backup=yes'

5.4 服务管理模块-systemd

1.相当于是systemctl 命令:

开启/关闭/重启服务

开机自启动

systemd模块
name用于指定服务名称
enabledyes开机自启动
state

表示服务开,关,重启

state=started 开启

state=stopped 关闭

state=reloaded 重读配置文件(服务支持)

state=restarted 重启(关闭再开启)

daemon-reloadyes是否重新加载对应的服务的管理配置文件

 启动服务crond
ansible all -m systemd -a 'name=crond enabled=yes state=started' 

关闭firewalld服务
ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'

5.5 软件管理模块

5.5.1 yum模块

yum模块
name指定软件包名字
state

installed 安装(present)(默认)

removed 删除 (absent)

lastest 安装或更新

update_cache可以设置为no加加速,表示不更新本地yum缓存.实际应用建议开启

安装htop,tree,lrzsz,sshpass服务
ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'

5.5.2  get_url模块

get_url下载功能
url指定要下载的地址
dest下载到哪个目录

https://tengine.taobao.org/download/tengine-2.4.1.tar.gz下载到/app/tools
ansible all -m get_url -a 'url=https://tengine.taobao.org/download/tengine-2.4.1.tar.gz dest=/app/tools'

5.5.3yum_repository模块

有点鸡肋,未来可以书写好yum配置文件,copy分发过去即可。

yum_repository模块

yum源
nameyum源中名字 []里面的内容
descriptionyum源的注释说明 对应的 是name的内容
baseurlyum源中baseurl下载地址
enabled是否启动这个源 yes/no
gpgcheck是否启动gpgcheck功能 no
file指定yum源的文件自动添加.repo 默认与模块名字一致

         

在nfs01上用yum安装nginx
##nginx官网的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
###用ansible的yum_repostiory模块安装
ansible nfs -m yum_repository -a 'name=nginx-stable description=nginx baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ enabled=yes gpgcheck=yes'

5.6 用户管理 

5.6.1 user模块

user模块
name指定用户名
uid指定uid
group指定用户组
shell指定命令解释器
create_home是否创建家目录(yes/no)
state

present 添加

absent删除

创建www-ans用户uid 2001虚拟用户
ansible all -m user -a 'name=ans-www uid=2001 shell=/sbin/nologin create_home=yes  state=present'
 批量更新密码
##下面命令可以更新密码,密码为1
ansible all -m user -a "name=xzb66 password={{'1'|password_hash('sha512','xzb666')}} state=present"

 5.7 mount模块

实现mount命令进行挂载可以修改/etc/fstab实现永久挂载

mount选项说明
fstypefilesystem type指定文件系统,xfs,ext4,iso9660,nfs
src源地址(nfs服务端地址)
path注意这里不是dest,挂载点(要把源挂载到哪里)
state参考下表

mount模块的state参数可使用的值
absent卸载并修改fstab
unmounted卸载不修改/etc/fstab
present仅修改/etc/fstab 不挂载
mounted挂载并修改/etc/fstab
remounted重新挂载

 通过ans管理在web01上挂载nfs:/data挂载到web01的/ans-upload/
##1.在web01服务器上安装nfs
ansible web01 -m yum -a 'name=nfs-utils state=present'
##2.创建挂载点
ansible web01 -m file -a 'name=/ans-upload state=directory'
##3.挂载nfs
ansible web01 -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload fstype=nfs
state=mounted'
#4.检查
ansible web  -a 'df -h' 
ansible web  -a 'grep upload /etc/fstab'

5.8 cron模块

用于管理系统的定时任务,替代了crontab -e功能

cron模块说明
name定时任务名字(一定要加上), 注释的内容
minute分钟 minute="*/2"
hour小时
day日期
month月份
week周几
job

指定命令或脚本(定向到空)

job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"

state

present 添加定时任务(默认)

absent 删除

每3分钟同步时间
##清理已有的定时任务:
ansible all -a "sed -i '/ntpdate/d' /var/spool/cron/root"
##创建定时任务
ansible all  -m cron -a 'name="sync time by xzb666" minute="*/3"  job="/sbin/ntpdatentp1.aliyun.com  &>/dev/null"  state=present'
##查看定时任务
ansible all -a 'crontab -l'
##删除定时任务
ansible all -m cron -a 'name="time by xzb666" state=absent'

相关文章:

网站集群批量管理-Ansible(ad-hoc)

1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…...

github学生认证(Github Copilot)

今天想配置一下Github Copilot,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…...

【SQL调优指南--附带实例】

以下是50个SQL调优的例子,每个例子都附带了可执行的SQL语句: 删除重复记录: DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询: ALTER TABLE table_name ADD…...

Java基础(下)

泛型 Java 泛型&#xff08;Generics&#xff09; 是 JDK 5 中引入的一个新特性。使用泛型参数&#xff0c;可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测&#xff0c;并且通过泛型参数可以指定传入的对象类型 ArrayList<Person> persons new Arra…...

【python】极简教程1-何为程序

程序可以简单地理解为一系列执行运算的指令。这些运算可以是数学计算、符号运算(如检索或替换文档中的内容)或图形运算(如处理图像或播放视频)。 不同编程语言的基础指令大致相同,包括: 输入:从键盘、文件、网络或其他设备获取数据。输出:将数据显示在屏幕上、保存到文…...

【Transformer】Selective Attention Improves Transformer

这篇论文主要介绍了一种新方法——选择性注意力&#xff08;Selective Attention&#xff09;&#xff0c;用于改善Transformer模型的性能和效率。 &#x1f913; 摘要 无关元素在注意力机制中的存在会降低模型性能。论文提出了一种无需额外参数的简单调整方法&#xff0c;即…...

博客项目自动化测试(一)

1. 确认博客系统的环境搭建 http://49.235.129.183:8080/java109_blog_system/blog_list.html&#xff0c;即可访问我的小项目&#xff1b; 2. 确定测试用例 测试用例如下所示&#xff1a; 3. 关于登录的测试用例 3.1 初始化和退出浏览器 代码如下&#xff1a; package Blo…...

电商商品API接口系列(商品详情数据)商品比价、数据分析、自营商城上货

电商商品API接口系列中的商品详情数据接口&#xff0c;在商品比价、数据分析以及自营商城上货等方面发挥着重要作用。以下是对这些应用场景的详细分析&#xff1a; 一、商品详情数据接口概述 商品详情数据接口是电商平台上用于提供商品详细信息的API接口。这些接口允许开发者…...

排序算法总结(一)冒泡排序和选择排序

访问www.tomcoding.com网站&#xff0c;学习Oracle内部数据结构&#xff0c;详细文档说明&#xff0c;下载Oracle的exp/imp&#xff0c;DUL&#xff0c;logminer&#xff0c;ASM工具的源代码&#xff0c;学习高技术含量的内容。 冒泡排序 这个算法可以说是排序算法中最著名的…...

伺服电动缸

美国EXLAR原装K系列伺服缸 高精度运动&#xff0c;运动平稳&#xff0c;低噪音&#xff0c;高速度 向下翻动查看更多 力姆泰克伺服电动缸 k系列电动缸采用Exlar滚柱丝杠技术&#xff0c;提供多种不同性能等级的产品&#xff0c;可外配第三方电机。 通用型设计&#xff0c;无…...

深度学习中的logit到底是什么?

1. 问题 在做深度学习的过程中&#xff0c;经常会碰到logit。这个和在学校学的概率有出入&#xff0c;因而想弄明白这到底是个什么参数。 2. 使用logit的原因 定义几率&#xff08;odds&#xff09;和 logit 函数的主要原因在于使用了线性空间转换&#xff0c;使得非线性的概…...

idea使用记录

文章目录 1、idea调出maven窗口2、跳转到指定行 1、idea调出maven窗口 首先尝试菜单栏View→Tool Windows→Maven&#xff0c;如果没有maven那很有可能是idea没有识别到这是一个maven项目&#xff0c;此时可以尝试在项目的pom文件上右击&#xff0c;选择“add as maven projec…...

Python - HTTP servers

python的http.server模块用于HTTP服务器的功能&#xff0c;这个模块是python标准库的一部分&#xff0c;不需要pip install。 使用前需要import&#xff1a; import http.server 然后就可以编辑代码&#xff0c;使用此模块提供的接口&#xff0c;实现http server相关功能。 除…...

内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖

文章目录 背景一、下载依赖二、拷贝到内网三、 使用dpkg安装可能会遇到的问题 背景 由于生产服务器是Debian\Ubuntu系统且在内网环境&#xff08;不联网&#xff09;&#xff0c;需要使用拷贝deb格式的包使用dpkg的方式进行安装。所以&#xff0c;需要现在联网的环境中将所需的…...

大模型——如何实现超长多轮对话

在自然语言处理的领域中&#xff0c;多轮对话系统是构建智能化交互应用的关键。无论是聊天机器人、虚拟助手&#xff0c;还是客户服务系统&#xff0c;能够保持连贯的对话并记住上下文信息是用户体验的核心。然而&#xff0c;大规模语言模型&#xff08;如GPT等&#xff09;的对…...

大数据面试-笔试SQL

一个表table: c_id u_id score&#xff1b;用SQL计算每个班级top5学生的平均分&#xff08;腾讯&#xff09; select class_id,avg(score) as score_avg from (select *,row_number() over(partition by class_id order by score desc) as score_rank from table ) t1 where t…...

希尔排序和直接插入排序

因为排序这些比较复杂点我就分几期给大家来讲~~~ 直接插入排序 直接插入排序是一种简单的排序算法&#xff0c;主要用于对少量数据进行排序。其基本思想是将待排序的元素逐个插入到已经排好序的部分中&#xff0c;从而形成一个有序序列。 具体步骤如下&#xff1a; 初始化&…...

IDEA 配置 Git 详解

本文将介绍在IntelliJ IDEA 中如何配置Git 没有安装配置 Git 的可以参考我的这篇文章&#xff1a;安装配置 Git 一、操作环境及准备 1.win 10 2.已安装且配置了Git 3.有Gitee账户 4.安装了IntelliJ IDEA 2023.2.1 5.全程联网 二、配置步骤 2.1 配置git 1.采用全局设置&…...

Docker 部署 Redis 监控系统实战:Redis Exporter 与 Prometheus 完整配置指南

Docker 部署 Redis 监控系统实战&#xff1a;Redis Exporter 与 Prometheus 完整配置指南 文章目录 Docker 部署 Redis 监控系统实战&#xff1a;Redis Exporter 与 Prometheus 完整配置指南一 缓存简述二 redis exporter 部署三 环境变量配置四 修改文件权限五 验证 exporter …...

高级算法设计与分析-MaxFlow网络流基础知识

MaxFlow网络流 1 网络流基础概念 source:源点 sink:终点 Flow:流量 capacity:容量 Residual:残量 Residual Network:残量网络 Augmenting path:增广路径,表示从源点 s 到终点 t 不包含环的路径 Bottleneck capacity:瓶颈容量 2 最大流 2.1 基础概念 2.2 增广路算法 …...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...