ansible-playbook实现MySQL的二进制部署

犀渠玉剑良家子,白马金羁侠少年。这篇文章主要讲述ansible-playbook实现MySQL的二进制部署相关的知识,希望能为你提供帮助。
    在第十周作业的《通过编译、二进制安装mysql5.7》一篇中,笔者演示了如何利用二进制来完成指定版本的MySQL安装,但此种方法仅适用于单台主机,如果是企业中,要安装MySQL的主机数量很多,则费时费力。借助于运维自动化软件ansible软件包中的ansible-plabook,可以定制自动化任务,编排剧本工具,相当于脚本,可从而实现MySQL等服务的批量部署。
    本次实验,笔者准备了5台虚拟机,ip分别为10.0.0.152-156,其中ip为10.0.0.152的虚拟机作为ansible主控制端,取名为ansible;ip10.0.0.154-156的三台虚拟机是需要进行部署MySQL的被控制端,分别取名db1、db2和db3。

  1. ?主控制端安装ansible?
    ansible的安装方法包括官网??(下载选择界面:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)??下载包安装,或者直接利用yum/apt来进行安装等,目前官网已更新到3.0版本,考虑到最新版本可能会有不稳定的现象,而直接在虚拟机中安装的ansible版本够用,笔者这边就直接在CentOS虚拟机中利用yum来安装。要注意的是,下载时走的是epel源,要保证epel可用。



  1. ?基于key验证?
    ansible要求主控制端与被控制端直接能实现互联互通,因此要做好基于key验证。笔者在《总结ssh常用参数、用法》??(链接:???https://blog.51cto.com/u_15473594/5023550??????一篇中提到了如何做好基于key验证,这里要做好基于key验证的主机较多,因此可以使用脚本??(如下图)??。
【ansible-playbook实现MySQL的二进制部署】




  1. ?设置主机清单?
    打开/etc/ansible/hosts文件,添加主机清单,主机清单多为分组的形式,将使用目的不同的主机进行分类,同一台主机可以添加到不同的分组中。local分组中的ansible_connection=local指的是指定本地连接,无需ssh配置??(如下图)??。

    执行  ?ansible all --list-hosts?  命令可以查看主机清单中一共有哪些主机,也可以将all替换成具体的分组名称来查看,例如针对本次实验的三台虚拟机所规划的dbsrvs分组??(如下图)??。

    设置完主机清单,建议先用ansible的ping模块来测试ansible主控制端与被控制端之间是否可通,如果返回结果是绿色的,并有pong的回应,即为可通??(如下图)??。



  1. ?下载MySQL压缩包?
    MySQL二进制安装的压缩包可从官网??(下载选择页面:??https://downloads.mysql.com/archives/community/????下载,目前最新版为8.0.27,更新时间已超过半年,相对会比较稳定,那笔者就直接下载最新版本。




  1. ?创建playbook剧本?
      playbook剧本是由一个或多个"play"组成的列表,其主要功能在于将预定义的一组主机装扮成事先通过ansible中的task定义好的角色。task实际是调用ansible的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作。playbook文件是采用YAML语言编写的,根据此次实验的要求,笔者创建了install_mysql.yml文件,具体内容如下:


    yaml文件中:
    ①“hosts”部分限定对象为dbsrvs分组,变量“remote_user”使用root避免执行时出现权限问题,“gather_facts”设为no,即不开启搜集功能,如果开启会影响执行速度;
    ②“vars”部分将MySQL压缩包分成版本和后缀两部分,方便后面创建软链接,同时“root_password”部分将MySQL数据的登录密*码设置为变量;
    ③“tasks”部分从上到下分别表示安装依赖包、创建mysql组、创建mysql用户、解压ansible主机压缩包到目标主机并修改文件权限、创建软链接、生成数据库文件存放路径、拷贝MySQL配置文件至目标主机、生成启动脚本文件并添加到启动项、生成PATH变量、开启MySQL服务、设置MySQL登录密*码。
    由于规划中的my.cnf文件并不存在,我们需在ansible主机上手动创建一个??(如下图)??。



  1. ?检查语法并运行?
    执行 ?ansible-playbook --syntax-check install_mysql.yml?  命令可检查是否有语法错误,如果只是检查而不执行的话可以执行?  ansible-playbook -C install_mysql.yml?  命令,因为时间会较长,笔者就不演示了,在语法没错的情况下笔者就直接运行脚本??(如下图)??。





  1. ?测试环节?
    如果是利用xshell等远程终端进行登录,利用ansible-playbook部署安装MySQL后,需退出并重新登录后再使用,因笔者在yaml文件中并未设置开机自启动,因此还需开启mysql服务后才能通过指定密*码进行登录??(如下图)??。




    推荐阅读