天天看点

大数据运维环境下ansible-playbook应用案例文章内容不够清晰,还有视频辅助学习哦,访问:

在大数据运维环境下,对主机名要求比较严格,所以对大数据节点的主机名要进行统一规划,然后集中设置,如果本地没有建立DNS解析服务器,还需要对每个节点添加本地解析,也就是将每个节点的ip和主机名的对应关系添加到/etc/hosts文件中。要解决这两个问题,只需要两个playbook脚本即可自动完成。

要批量更改每个节点的主机名,首先需要修改ansible中/etc/ansible/hosts文件内容,添加如下配置:

这里定义了一个名为hostall的主机组,组中有三台主机,每个主机IP后面跟了一个hostname变量,变量后面就是定义好的主机名,而这个变量可以在playbook脚本中直接引用。

接下来就可以编写playbook脚本了,内容如下:

这个脚本中,变量{{hostname}}以及值就是在/etc/ansible/hosts文件中定义的“hostname=namenodemaster”这部分内容。通过使用shell模块,实现将定义好的主机名添加到每个远程主机的/etc/hostname文件中(限于RHEL/Centos7/8系统),然后执行hostname命令使其生效。

每个主机名修改完毕后,还需要构建一个本地解析文件(IP和主机名对应的文件),然后传到每个远程主机上,要实现这个功能,可以编写如下playbook脚本,内容如下:

这个playbook中,使用了角色中的变量,所以要了解下我们这个ansible的默认目录结构,如下图所示:

大数据运维环境下ansible-playbook应用案例文章内容不够清晰,还有视频辅助学习哦,访问:

我们的程序安装在/etc/ansible命令下,在这个目录中有三个子目录,分别是files 、templates 和roles,files目录主要是存放一些要拷贝的远程主机的程序文件,templates 目录下存放的是一些配置好的模板文件,这些模板文件会统一拷贝到远程主机中,最后,还有一个roles目录,此目录下我们创建了一个main.yml文件,用来定义角色变量,main.yml中变量定义方式如下:

其中,每行内容中冒号前面的就是变量名,后面的内容是变量的值,定义变量后,就可以在playbook中进行引用了。

最后,再回到上面这个playbook文件中,由于要使用角色变量,所以引入了roles关键字,接下来,在tasks任务中,首先使用了local_action模块,在管理机上生成了一个模板文件hosts.j2,注意这里面的变量{{AnsibleDir}}就是在main.yml中定义好的,run_once表示这个本地shell仅仅执行一次,接着通过set_fact定义了两个变量ipaddress和hostname,这两个变量都从ansible内置变量中获取具体的值,然后将获取到的ipaddress和hostname值写入管理机上的hosts.j2文件中,最后一个操作步骤是通过template模块,将hosts.j2模板文件拷贝到远程主机的/etc/目录下并重命名为hosts文件。

将此脚本放到/etc/ansible目录下,并命名为hosts.yml,然后执行如下命令:

如果执行成功,会有绿色、浅黄色输出提示,如果执行失败,可以看红色输出内容,判断检查问题。

大数据环境下,为了安装、配置和维护的方便,一般会设置管理机(安装ansible的机器)和每个集群节点之间的无密码登录(单向信任),而无密码登录最简单的方式是通过设置ssh公私钥认证机制,下面playbook脚本可以完成管理机到远程主机组hostall的无密码登录,脚本内容如下:

这个playbook稍微复杂一些,它仍然用到了角色变量,所以此脚本要放在/etc/ansible目录下,脚本一开始通过lineinfile模块对远程主机上的sshd配置文件ssh_config进行文件内容替换,这个替换是关闭ssh第一次登陆时给出的“yes/no”提示,接着在远程主机上删除/root/.ssh目录,并重新创建此目录,这个操作的目的是确保远程主机/root/.ssh目录是干净的、权限正确的。然后通过local_action模块在管理机上生成一对公私钥,同时将生成的公钥文件内容作为变量sshinfo的值,并通过set_fact模块重新定义一个变量sshpub,此变量引用sshinfo变量的stdout输出,也就是最终的公钥值,紧接着,将变量sshpub的内容写入管理机authorized_keys.j2模板文件中,最后,使用template模块将authorized_keys.j2模板文件拷贝到每个远程主机的/root/.ssh目录下,并重命名为authorized_keys,同时给文件授于属主读、写权限。

将此脚本放到/etc/ansible目录下,并命名为ssh.yml,然后执行如下命令:

自动化安装JDK是大数据运维中最常见的一个场景,JDK一般我们下载二进制版本解压即可使用,所以安装JDK的过程就是把下载好的JDK程序拷贝到远程主机的过程,JDK安装完成后,还要添加JAVA_HOME到系统环境变量中,以让系统识别安装的JDK,下面的这个playbook文件就是自动化安装JDK的整个过程,内容如下:

此脚本中的BigdataDir、AnsibleDir都是角色变量,前面已经定义过具体的路径了,其中,jdk.tar.gz位于管理机上,脚本最后通过item.value这个变量将JDK环境变量写入到了/etc/profile文件的最后,这个变量的定义和引用方式需要引起大家注意。

将此脚本放到/etc/ansible目录下,并命名为jdk.yml,然后执行如下命令:

脚本执行成功的话,那么jdk和环境变量就都配置好了。

https://edu.51cto.com/course/23377.html ,Ansible与Ansible-playbook应用实战视频课程,帮助一次性掌握Ansible自动化运维工具的使用。

继续阅读