ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

运维100台服务器累成狗?一个命令搞定5000台,零门槛入门Ansible

运维100台服务器累成狗?一个命令搞定5000台,零门槛入门Ansible 你是否也曾遭遇这般绝望境况: 凌晨三点时分, 生产环境触发故障, 你得登录几十台服务器, 逐行敲下命令, 要手动进行艰难排查, 而后重启且修补问题。待完毕忙碌, 天色已然放亮。更为怖惧的是, 公司服务器数量从100台扩展至5000台, 你察觉单纯手动实施运维之举完全难以为继——因其效率低下, 容易出现差错, 而且颇具扩展难度。这并非是能力不足, 而是工具的选择存有偏差。今日咱们所谈及的正是那个可令运维从忙碌至极转变为可轻松惬意的得力工具。先说它因何这般厉害, 市面上自动化工具众多, 需装客户端, 配置繁杂, Chef学起来仿若学一门全新语言, 究竟为何呢? 一句话: 无需代理。你在控制节点装设软件, 受控节点只要具备SSH接入便可运行。简而言之, 不必在每台机器上安装应用, 直接经SSH连接来执行指令, 安全且简便。并且其采用YAML语法, 编写配置文件如同列清单一目了然, 学起来比煮菜还简易易上手。说到最为关键的一点, 那便是幂等性, 其意思是, 当你对于同一个任务进行重复性执行操作时, 是不会产生副作用的。比如说, 你编写了一个任务名为“安装Nginx”, 当你首次运行这个任务的时候, 它所执行的操作是开始安装, 然而当你运行第二次的时候, 它能够检测到Nginx在此设备上已经处于安装完成状态, 于是会直接跳过安装步骤。正是因为如此, 才避免了脚本因为重复执行而招惹出乱子的情况发生。有许多经验丰富的老运维人员在运用Shell脚本时, 每次脚本运行完毕后, 都需要目不转睛地观察上好半天, 就生怕有哪儿被改动后致使出现崩溃的情况。而拥有声明式配置的特性, 能够让你明确指定出“目标状态”, 随后它会自行判断是否需要开展操作予以执行。多得吓人的场景, 批量初始化新服务器, 装系统, 配基础软件, 设安全基线, 一个就能搞定。应用部署和滚动更新, 停服务器? 这是不存在的, 新服务器能控制并行数, 首先更新百分之十的机器, 确认没有问题之后再进行全量放行。不管你使用的是物理机, 还是虚拟机, 亦或是云服务器, 不管是阿里云, 还是 AWS, 又或是华为云, 一个工具就能管理全部。日常巡检以及故障修复, 同样能够写成自动化任务, 半夜出现问题会自动重启服务, 比你设置的闹钟还要准时。好, 咱们从零点开始搭建环境, 控制节点推荐使用Linux, 或者也都可以。包管理器安装最为省事, 首先配置EPEL仓库, 接着使用yum, 直接使用apt。要是版本想要自行控制, 运用pip, 输入pip 7.6.0。安装完成之后, 受控节点必须符合三个条件。一是SSH服务开启, 二是版本在2.7以上, 三是SSH免密登录。密钥对认证最好配置妥当, 否则每次执行都要输入密码, 自动化变为手动化就毫无意义了。验证连通性很简单在控制节点执行一行命令all -i , -m ping发现呈现返回pong, 恭贺你, 环境搭建妥当了。此命令之中-i界定主机清单, -m界定模块, ping模块的用处为本测试可不可以连接通。提及主机清单, 它乃是你的服务器通讯录, 最为常见的写法呈现为INI格式, 举例来说。web01 192.168.1.10web02 192.168.1.11db01 192.168.1.20你能够进行组变量定义, 比如说对于所有机器而言采用同一个SSH用户: admin 要是服务器数目很多, 运用范围表示法: 自动生成db1、db2、db3。接下来要讲的是核心部分, 也就是模块。有几百个模块是自带的, 这就如同给了你一个放置工具的箱子。其中最常被使用的是这几个:- ping测连通性。与shell相比: 可执行任意命令。其差异在于shell具备管道、重定向、变量的支持, 然而更加安全, 能够规避Shell注入风险。倘若可以使用那么就不要使用shell。将原本地处本地的文件, 复制至远程服务器之上。创建文件或者删掉已有文件, 创建目录或者撤销目录, 对所涉及的那些设置权限进行操作。依据给定的那种模板依靠动态化手法生成相应配置文件 , 像Nginx对应相关时, 会出现名为nginx.conf.j2的文件那般 , 此文件之中的一些变量会自行进行替换。yum以及apt用于安装软件包, 其中state的情况是, 若为安装, 若为卸载, 若为升级到最新。- 和控制服务启停设置开机自启。要创建用户, 要设置密码, 且要加组, 对于cron而言, 是要添加定时任务。模块乃小工具, 而真正具极大效应之举措是, 将繁多任务加以编排从而形成剧本, 典型便呈现为如此样貌:yaml---- name: 部署Nginx服务器hosts:: yesvars:: 8080tasks:- name: 安装Nginxyum:name: nginxstate:- name: 复制配置文件:src: nginx.conf.j2dest: /etc/nginx/nginx.conf- name: 启动并设置开机自启:name: nginxstate:: yes变量的来源呈现出诸多不同样式, 在里面予以定义, 于主机清单里进行书写, 通过命令行借助--extra-vars来进行传递, 又或者采用动态作出计算。在优先级层面, 命令行具备最高级别, 其次呢, 再者是, 最终是默认值。你能够运用获取主机相 的关信息, 打个比方操作系统种类: when:”。 这样一套剧本能在和上通用。条件控制会采用“when”, 循环则会运用“loop”。比如说去安装多个包这样的情况: 。yaml- name: 安装常用软件yum:name: {{ item }}state:loop:- git- vim- curl存在一种进阶用法, 它是这样的, 当某个任务的状态出现变化的时候, 才进行执行, 举例来说, 比如在修改了Nginx配置之后, 会自动重启服务, 此用法通过触发。yamltasks:- name: 更新配置:src: nginx.conf.j2dest: /etc/nginx/nginx.conf: nginx:- name: nginx:name: nginxstate:注意只在所有任务执行完后统一运行而且只执行一次。错误处理能够采用block加上回车符, 这跟编程之中的try-catch相似呀。yaml- block:- name: 启动服务: namehttpd state:- name: 启动失败尝试重启: namehttpd state:- name: 记录日志debug: msg操作完成当你撰写了诸多内容之后, 便会发觉存在许多任务出现了重复的情况。在这个时候, 就轮到角色Roles闪亮登场了。角色对诸如任务、变量、模板、文件等事物进行组织, 使其形成标准的目录结构。roles/nginx/tasks/main.yml/main.yml/main.ymlvars/main.yml/files/用- init nginx自动生成骨架。然后在里引用yaml- hosts:roles:-- nginx你能够定义角色依赖, 举例来说, 像Nginx依赖角色, 于meta/main.yml里书写:。{ role: }。这样别人用你的角色时依赖自动安装像搭积木一样。全新实战案例闪亮登场啦: 轻轻松松一键就能完成LNMP环境Linux加上Nginx加上MySQL加上PHP的部署工作。搞定它只需分几步走, 首先第一步要做的是安装Nginx, 接着还要利用相应工具生成配置迈出第两步, 紧接着是安装MySQL, 其中还要专门设置root密码这个密码的密文可是用-vault进行加密处理的哟然后来到第三步, 需要安装PHP-FPM, 同时还要细致地配置连接最后一步, 就是启动全部的服务并且妥善设置为自启状态。整个部署过程当中完全不需要手动去登录任何一台机器。你所要做的仅仅是执行- -lnmp.yml这个指令, 之后悠闲地去喝上一杯咖啡, 等你喝完回来就惊喜地发现已经部署妥当。怎么去玩滚动更新呢? 使用“控制并行度: : 5”从而表明每次仅仅更新5台机器。在更新以前运用“等待旧服务停止, 新服务启动后验证端口是否开放”。结合“tags”能够控制仅仅执行某个阶段, 举例而言只是更新配置却不更改代码。于安全范畴来讲, 切勿将敏感信息进行硬编码。采用-vault .yml予以加密, 在执行期间添加--ask-vault-pass。针对日志收集而言, 能够接入ELK, 通过回调插件朝着监控平台发送执行结果。就权限方面而言, 控制节点运用普通用户并搭配sudo, 请勿直接以root身份开展工作。性能方面的优化常常会遭受到忽视这一情况。开启 SSH这件事, 在.cfg里进行设置, 将其设为True, 这样一来能够减少 SSH握手的次数, 速度能加快一大截。关闭事实收集, 也就是在你并不需要主机信息的情况下, 写入: no, 如此能够节省几秒甚至几十秒时间。另外还能够运用rgs来对 SSH参数加以优化, 像进行压缩传输这种方式。首先来讲扩展, 它与CI/CD是天生的一对, 通过里调“-”, 能够达成代码提交所带来的自动部署运作。AWX也就是红盾的Web版本, 借助它产品经理仅需点点鼠标便可执行相关任务。事件驱动自动化方面, 监控告警会触发自动修复机制的启动, 像磁盘超过90%时便会自动清理日志操作得以实现。并且在有需要WinRM的情形下还可以管控设备, 对于网络设备诸如Cisco、华为等也具备管理能力。有一种清晰的学习路线, 首先要掌握环境搭建以及Ad - Hoc命令, 接着熟练掌握十几个核心模块, 然后去写第一个部署单机服务, 之后引入变量、条件以及循环, 并将其重构为角色, 最后集成CI / CD和监控, 再上线到生产环境。还有一些别犯的低级错误, 首先别什么都采用shell模块, 因为非幂等操作很容易搞崩系统, 之后要注意变量的作用域, 千万别定义出现冲突, 并且密码永远都要用vault加密。自动化并非是为了去炫耀技艺, 其目的在于能够将时间运用在更具价值的事项上面。若你花费仅仅十分钟即做完了从前一整天的工作, 你便已然将会察觉, 原来从事运维工作居然能够让人如此畅快。当下, 开启你的电脑, 安装一则, 而后撰写而成你的首个内容。要是存在哪些问题或者心得体会, 于评论区展开交流探讨, 我都将会逐个去做回复。
返回列表