热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:自动化运维Ansible批量部署服务+shell脚本批量推送公钥

篇首语:本文由编程笔记#小编为大家整理,主要介绍了自动化运维Ansible批量部署服务+shell脚本批量推送公钥相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了自动化运维Ansible批量部署服务+shell脚本批量推送公钥相关的知识,希望对你有一定的参考价值。



一、概述分析

由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行
大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下。这时,部署自动
化运维就可以尽可能安全、高效地完成这些工作。
一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于
专用的ABem程序来完成管理功能,如: Puppet、Func、 Zabbix等;另外一类是不需
要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible、 Fabric等。


-



下面介绍几款功能类似的自动化运维工具:


1. Puppet


Pup基于Rpy开发,支持Linx、UNDX、 Windows平台,可以针对用户、系统服务
配置文件、软件包等进行管理,有很强的扩展性,但远程执行命令相对较弱。


2. SaltStack


CallStack基于 Python开发,允许管理员对多个操作系统创建统一的管理系统,比
pet更轻量级




































工具 开发语言 结构 配置文件 格式 运行任务
Ansible Python YAML 支持命令行
SaltStack Python C/S YAML 支持命令行
Puppet Ruby C/S Ruby语法格式 通过模块实现


Ansible
Ansible基于 Python开发,集合了众多优秀运维工具的优点,实现了批量运行命令
部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需
部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台
主机并行管理,使得管理主机更加便捷。


   官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。

Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。



Ansible跟其他IT自动化技术的区别在于其关注点并非配置管理、应用部署或IT流程工作流,而是提供一个统一的界面来协调所有的IT自动化功能,因此Ansible的系统更加易用,部署更快。
Ansible可以让用户避免编写脚本或代码来管理应用,同时还能搭建工作流实现IT任务的自动化执行。IT自动化可以降低技术门槛及对传统IT的依赖,从而加快项目的交付速度。
自动化运维Ansible批量部署服务+shell脚本批量推送公钥


Ansible基本架构由六个部分组成:


Ansible core 核心引擎。
Host inventory 主机清单:用来定义Ansible 所管理的主机,默认是在Ansible的host配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置。
Connection plugins连接插件:负责和被管理主机实现通信。除支持使用ssh连接被管理主机外, Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到 Ansible。
Playbooks(yaml, injaz2)剧本:用来集中定义 Ansible任务的配置文件,即将多个任务定义在一个剧本中由 Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务。
Core modules核心模块:是 Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。
Custom modules自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志、发送邮件等功能。


-



ansible功能特性:



  • 应用代码自动化部署


  • 系统管理配置自动化


  • 支持持续交付自动化


  • 支持云计算,大数据平台环境


  • 轻量级,无序在客户端安装agent,更新时只需在控制机上进行更行即可


  • 批量任务执行可以写成脚本,不用分发到远程就可以执行


  • 支持非root用户管理操作,支持sudo


  • 使用python编写,维护更简单




二、Ansible安装

Ansible 自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装和运行任何代理程序。



实验安装环境:































角色 主机名 IP地址 组名
控制主机 01 192.168.100.129
被管理主机 02 192.168.100.128 webserver
被管理主机 03 192.168.100.130 mysql

三台主机关闭防火墙:

[root@localhost ~]# systemctl stop firewalld.service[root@localhost ~]# setenforce 0

安装步骤:


控制主机安装ansible并生成密钥对批量发送给被管理主机


1.yum安装环境包与ansible:

yum install epel-release -y
yum install ansible –y

2.查看ansible版本

[root@01 ~]# ansible  --version

自动化运维Ansible批量部署服务+shell脚本批量推送公钥


3.yum安装完成后会生成3个文件

[root@01 ~]# cd /etc/ansible/[root@01 ansible]# ls

自动化运维Ansible批量部署服务+shell脚本批量推送公钥


4.配置被管理端主机IP清单

[root@01 ansible]# vim /etc/ansible/hosts                     //配置主机清单

自动化运维Ansible批量部署服务+shell脚本批量推送公钥


5.虽然ansible的配置文件已经设置完成被管理端的IP地址,但是因为ansible是基于ssh协议,所以还需要配置密钥对验证

[root@01 ~]# ssh-keygen -t rsa           //生成密钥对

自动化运维Ansible批量部署服务+shell脚本批量推送公钥
自动化运维Ansible批量部署服务+shell脚本批量推送公钥


6.ssh协议免交互代理

[root@01 ~]# ssh-agent bash[root@01 ~]# ssh-add

自动化运维Ansible批量部署服务+shell脚本批量推送公钥



shell脚本批量发送公钥



(1).下载安装expect

[root@01 .ssh]# yum install expect -y                   //yum安装expect

(2). ping通所有可互通的主机

[root@01 .ssh]# ansible all -m ping       //使用ansible中的ping模块

自动化运维Ansible批量部署服务+shell脚本批量推送公钥



ansible是基于SSH协议,所以可以ping通的主机储存在.ssh/known_hosts的文件当中。


[root@01 ~]# cd ~/.ssh/[root@01 .ssh]# lsid_rsa  id_rsa.pub  known_hosts
[root@01 .ssh]# vim known_hosts                   //查看下已经记录在SSH协议的主机,不做任何修改操作

自动化运维Ansible批量部署服务+shell脚本批量推送公钥


(2).编写shell脚本实现批量推送公钥

[root@01 .ssh]# cd ~[root@01 ~]# chmod 777 .ssh/                  //更改  .ssh/  的权限,有利于后面脚本的执行

[root@01 .ssh]# vim ~/.ssh/pushssh.sh

脚本如下:

#!/bin/shcat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat known_hosts | awk -F " " '{print $1}'`for i in $host1;docommand1="scp ~/.ssh/authorized_keys root@$i:~/.ssh/authorized_keys"password="123123" /usr/bin/expect -c "        spawn ssh-copy-id root@$i        expect {        \"*password\" { send \"$password\r\"; exp_continue }        }     expect eof"done#编写脚本完成后保存退出[root@01 .ssh]# sh pushssh.sh        //执行脚本

PS:想要执行这个脚本,首先需要下载安装expect,并且把 .ssh/ 的权限放到最大便于shell脚本的执行,同时被管理端主机的密码需要是一致的。


----------------------验证-------------------

查看下脚本是否执行成功:

自动化运维Ansible批量部署服务+shell脚本批量推送公钥
自动化运维Ansible批量部署服务+shell脚本批量推送公钥


此时就可以进行ansible批量部署操作

[root@01 ~]# ansible all -m command -a 'date'

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

自动化运维Ansible批量部署服务+shell脚本批量推送公钥



推荐阅读
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细介绍了如何在Azure DevOps Services和Azure DevOps Server中调整时区设置,以及这些设置对不同功能的影响。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • 检查 Kubernetes 系统命名空间中的 Pod 状态时,发现 Metric Server Pod 虽然处于运行状态,但存在异常:日志显示 'it doesn’t contain any IP SANs'。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • Python作为当今IT领域中最受欢迎且高效的语言之一,其框架能够显著加速Web应用程序的开发过程。本文推荐并对比了十大顶级Python Web开发框架,其中CubicWeb以其卓越的代码重用性和模块化设计脱颖而出,为开发者提供了强大的支持。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
author-avatar
mobiledu2502892377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有