ansible--部署jdk以及zookeeper集群

2022-06-26 10:05:36 浏览数 (1)

昨天我们用ansible做了服务器互信,其中的动作比较少,也没有太多的变量,那么我们就都写到一个playbook当中了。

今天我们稍微复杂一点,希望大家还能跟着波哥思路走。

先看一下波哥的ansible结构:

我们yum安装完ansible不会有这么多目录,你们需要自己创建

files:放我们的安装介质。

hosts:写我们的nodes配置信息。

里面的内容:

roles:这个目录下面放一些我们需要自行动作的一些独特的配置。

templates:目录是放一些活动性的配置文件。

vars:看名字就应该知道了,就是放变量的。

work_yml:是我们的入口文件存放的位置,一般我们会再这里写playbook,然后其中有些变量是要到上面各个目录上去找和加载的,只要我们指定了相应的文件就行。

目录介绍完了,我们脑袋里可能有个大概的印象了。

别蒙圈奥!咱们再总结一下奥:

1、hosts,配置服务器信息,以及跟服务器相关的变量。

2、files,存放安装介质。

3、roles,放应用里面的独特配置的目录

4、work_yml,编写主流程的文件目录

OK!我们先看jdk

先看主流程文件:

波哥主要提几个比较经典的配置:

代码语言:javascript复制
- hosts: "{{host}}"
gather_facts: false
remote_user: root
ignore_errors: yes

这段里面的第一个"{{host}}",他的作用是让我们再执行playbook的时候可以更灵活的指定服务器组。当然我们也可以写死到底是哪个组要执行这个剧本。如果像波哥这么写呢?就可以在执行的时候通过-e选项带入分组变量,这个也是我们再生产中比较常用的配置,例如我CI一侧jenkins在构建完后需要推送的时候,就可以配置这个参数test,deploy等等分组,带入到固定的剧本中执行。我们只需要修改hosts文件中的分组即可。

代码语言:javascript复制
ansible-playbook jdk8.yml -e "host=jdk8"

参照波哥开篇截图的hosts文件内容就明白了。

脚本里面波哥用到了一个循环,是的,ansible的流程控制是少不了的。

代码语言:javascript复制
    - name: set env  #设置环境变量
      lineinfile: dest=/etc/profile insertafter="{{item.position}}" line="{{item.value}}" state=present
      with_items:
        - {position: EOF, value: "export JAVA_HOME={{BigdataDir}}/jdk1.8.0_241"}
        - {position: EOF, value: "export PATH=$JAVA_HOME/bin:$PATH"}

像这样的东西波哥就提一嘴,我相信你们能看懂。

稍微了解过前端的兄弟都应该听过j2模板,他们引用变量的模式就是这个{{变量}} 在两个大括号中传递变量。

当我们在roles:中指定了相应的名称,那么ansible就会到相应目录下去找对应的变量。例如我们的{{BigdataDir}}这个变量就在rolesjdk8varsmain.yml中配置的。

代码语言:javascript复制
BigdataDir: /opt/hzgc
AnsibleDir: /etc/ansible

为什么这个变量要在这里配置?回忆一下波哥的上段总结。

这个jdk我们就过了奥,等会你们自己仔细看看文件配置体会一下。

第二个:zookeeper

这个相对于之前的可能还有点别的东西,那就是修改配置文件。

这个剧本稍微比上一个步骤长一点。

波哥在剧本的一开始就全局的变量定义,这个写这也是为了告诉大家,这里也可以定义变量,大家注意看这段:

代码语言:javascript复制
  vars: 
    - AnsibleDir: /etc/ansible 
    - zookeeperVersion: apache-zookeeper-3.5.7-bin
    - JAVAHOME: /opt/hzgc/jdk1.8.0_241

而在核心剧本中我们定义了两个template这个动作,那么大家心里就应该知道了,这个应该就是配置zookeeper的文件了。

代码语言:javascript复制
    - name: install configuration file for zookeeper
template: src={{AnsibleDir}}/roles/zookeeper/templates/zoo.cfg.j2 dest={{BigdataDir}}/{{zookeeperVersion}}/conf/zoo.cfg
    - name: add myid file
      shell: echo {{ myid }} > {{BigdataDir}}/{{zookeeperVersion}}/data/myid
    - name: aotu start zookeeper
template: src={{AnsibleDir}}/roles/zookeeper/templates/zookeeper.j2 dest=/etc/init.d/zookeeper

下面这个是波哥配置开机自启动定义模板。其实和简单,就是把对应的文件推送到指定的位置。当然,文件的内容是需要跟进变量替换的哦!

我们去看看模板是什么样子的

代码语言:javascript复制
ansibleroleszookeepertemplates

玩过zookeeper的应该都了解这个配置文件了吧。固定的格式,不一样的变量就是模板文件的作用。

我们再去看看如何定义zookeeper变量的呢?

代码语言:javascript复制
cat /etc/ansible/roles/zookeeper/vars/main.yml
server1_hostname: 192.168.1.117
server2_hostname: 192.168.1.118
server3_hostname: 192.168.1.119
BigdataDir: /opt/hzgc

‍再看看上面的模板文件,是不是有点头绪啦?哈哈哈!playbook是不是超级简单?

那么有心人应该觉察到了,全局没看到其中一个变量在哪定义的。

代码语言:javascript复制
    - name: add myid file
      shell: echo {{ myid }} > {{BigdataDir}}/{{zookeeperVersion}}/data/myid

这里面的{{ myid }} 在哪?全局变量没看见,我们的roles下面配置也没看见?这事什么情况?

还记得波哥说的嘛?关于服务器的变量我们在hosts文件中定义就可以啦

嗯,就这里!可能波哥之前写的shell脚本我们只需关注base.config配置就行了。改完执行就OK了,但是ansible需要大家配置很多地方,软件还需要自己下载等等一些列动作,但是没办法,这个东西比较早。

等波哥牛X了,让所有人都习惯咱们的东西。但是现在波哥不行啊,咱们得学通用的东西,费劲也得学奥!

ansible相对开发难度小,你们看看波哥之前写的互信脚本的代码量,再比比咱们上一边推的互信demo。就知道了。

自己写脚本和用ansible都忽悠利弊吧!大家可以看情况来决定。

对ansible感兴趣,想要学习的朋友可以关注公众号后回复: zookeeper 获取上面两个playbook,files文件里的安装包波哥没传,比较大。你们自己下载去!

不知不觉写了这么多东西,希望能让大家能有点小小收获吧!

PS:多说一句奥:我们上次出的openvpn脚本,有不少朋友都在用,但是波哥在添加脚本中多注释了一行。如果你们想添加完key,直接把配置文件下载到你本机的话,去掉这行注释就可以了。

添加脚本核心文件的第65行

代码语言:javascript复制
sz /data/openvpn/conf/$Persons.ovpn

这个前面的注释符去掉保存即可,当然,如果你不愿意弄可以重新下载波哥的脚本,因为我已经改好了。

好了就这样吧,大家在使用过程中有什么错误可以发到后台,我看到后会立即改正。

0 人点赞