(五)使用Ansible搭建分布式大数据基础环境-ZooKeeper集群模式搭建


“使用Ansible搭建分布式大数据基础环境”系列文章完整包含了如何使用Ansible这一分布式运维利器,来帮我们快速搭建Hadoop2/Spark2/Hive2/ZooKeeper3/Flink1.7/ElasticSearch5等一整套大数据解决方案。本篇是系列文章的第五篇。更多后续文章尽请关注。

(一)使用Ansible搭建分布式大数据基础环境-环境准备

(二)使用Ansible搭建分布式大数据基础环境-Ansible项目创建

(三)使用Ansible搭建分布式大数据基础环境-编写第一个playbook

(四)使用Ansible搭建分布式大数据基础环境-Ansible常用Module介绍

(五)使用Ansible搭建分布式大数据基础环境-ZooKeeper集群模式搭建

(六)使用Ansible搭建分布式大数据基础环境-Hadoop高可用集群搭建

(七)使用Ansible搭建分布式大数据基础环境-MySQL安装​​​​​​​

 

终于要开始介绍如何安装我们大数据基础组件的第一个组件-ZooKeeper了,选择ZooKeeper做为我们安装的第一个组件,不是因为ZooKeeper最容易安装(Spark更容易),而是因为Hadoop里Yarn和HDFS都依赖ZooKeeper实现高可用,要安装Hadoop就必须提前安装好ZooKeeper。

包括ZooKeeper在内,我们把所有这些大数据组件role编写工作按照vars,templates,tasks等目录分别介绍:

  1. vars/main.yaml编写,并把需要的变量录入(目前主要有的变量是组件下载地址每段path的构建,不同项目下载格式,需要定制不同变量value,参看下面tasks/main.yaml第一阶段)
  2. templates目录下,按照需要,创建合适的模板文件(比如yarn-site.xml使用模板文件替换)
  3. tasks/main.yaml,创建一个一个的指令,完成既定目标。
  4. 测试playbook能正常完成既定目标

1.vars/main.yaml

path: zookeeper  # zookeeper下载地址中间path,参看下面的tasks/main.yaml
filename: zookeeper # zookeeper下载安装文件第一段文件名
version: 3.4.14 # zookeeper下载安装文件版本号部分
suffix: tar.gz # zookeeper下载安装后缀
appname: zookeeper # zookeeper应用名称

2.templates下创建模板

分别创建zoo.cfg.j2和zootopia.service.j2,其中zoo.cfg.j2用于使用实际值渲染后保存到$ZOOKEEPER_HOME/conf目录下,做为zookeeper启动必须配置文件,zootopia.service.j2用于systemctl管理zookeeper启动脚本的service文件

#zoo.cfg.j2,在tasks/main.yaml里面会被copy到远程主机的$ZOOKEEPER_HOME/conf目录下,做为zookeeper启动的配置文件

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir={{data_base}}/zookeeper # data_base在groups_vars/cluster.yaml中配置
dataLogDir={{log_base}}/zookeeper  # log_base在groups_vars/cluster.yaml中配置
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=100
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1

server.1=192.168.0.1:2888:3888
server.2=192.168.0.2:2888:3888
server.3=192.168.0.3:2888:3888

minSessionTimeout=4000
maxSessionTimeout=40000
# zookeeper.service.j2,在tasks/main.yaml里面会被copy到/usr/lib/systemd/system/下,使得能够让systemd托管zookeeper
# {{ansible_managed}}

[Unit]
Description=ZooKeeper
After=network.target
Wants=network.target

[Service]
Type=simple
User=fangyu.fu
Group=fangyu.fu
ExecStart={{app_base}}/{{appname}}/bin/zkServer.sh start-foreground
Restart=always
RestartSec=3

TimeoutSec=300

[Install]
WantedBy=multi-user.target

3. tasks/main.yaml编写

---
# 第一阶段开始
# 创建数据保存目录
- name: Create Zookeeper Data Directory
  file: path={{data_base}}/{{appname}} state=directory # 在group_vars/cluster 定义

# 创建日志保存目录
- name: Create Zookeeper Log Directory
  file: path={{log_base}}/{{appname}} state=directory #在group_vars/cluster 定义

# 下载安装包
- name: Download zookeeper file #download_server在group_vars/cluster中定义,path,filename,version,suffix等变量在zookeeper/vars/main.yaml中定义  get_url: url='{{download_server}}/{{path}}/{{filename}}-{{version}}/{{filename}}-{{version}}.{{suffix}}' dest="{{download_base}}/{{filename}}-{{version}}.{{suffix}}" remote_src=yes
  register: download_result

# debug输出安装包下载结果
- debug:
    msg: "{{download_result.state}}"

# 校验解压缩目录(/data/bigdata/app/zookeeper-3.4.14)是否存在,并注册到node_filters变量中(保证第一次运行之后,再次运行不会再次解压缩覆盖)
- name: Check whether registered
  stat:
    path: "{{app_base}}/{{filename}}-{{version}}"
  register: node_files

# debug输出node_filters.stat.exists值
- debug:
    msg: "{{node_files.stat.exists}}"

# 如果文件下载成功,并且解压缩目录(/data/bigdata/app/zookeeper-3.4.14)不存在,则解压缩,否则跳过不解压缩
- name: Extract archive
  unarchive: dest={{app_base}} src='{{download_base}}/{{filename}}-{{version}}.{{suffix}}' remote_src=yes
  when: download_result.state == 'file' and node_files.stat.exists == False

# 创建/data/bigdata/app/zookeeper软链接到解压缩目录(/data/bigdata/app/zookeeper-3.4.14)
- name: Add soft link
  file: src="{{app_base}}/{{filename}}-{{version}}" dest={{app_base}}/{{appname}} state=link

# 添加"export ZOOKEEPER_HOME=/data/bigdata/app/zookeeper" 到/etc/profile.d/app_bin.sh文件中
- name: Add bin to path
  lineinfile: dest=/etc/profile.d/app_bin.sh line="export ZOOKEEPER_HOME={{app_base}}/{{appname}}"
  
# 添加"export $PATH=$PATH:$ZOOKEEPER_HOME/bin" 到/etc/profile.d/app_bin.sh文件中
- name: Export Path
  lineinfile: dest=/etc/profile.d/app_bin.sh line="export PATH=$PATH:$ZOOKEEPER_HOME/bin"

# 第一阶段完成
# 第二阶段开始,配置/替换 必须配置文件

# 渲染zoo.cfg.j2并复制到远程$ZOOKEEPER_HOME/conf/zoo.cfg
- name: Copy zoo.cfg Template
  template: src=zoo.cfg.j2 dest="{{app_base}}/{{appname}}/conf/zoo.cfg" mode=0755

# 在每台机器的/data/bigdata/data/zookeeper下,创建myid文件,并使用with_indexed_items语法,设置文件内容为当前主机在production/hosts文件中的序号+1
- name: Set Zookeeper Id
  copy: content={{item.0 + 1}} dest="{{data_base}}/{{appname}}/myid" mode=0744 force=no
  with_indexed_items: "{{groups['cluster']}}"
  when: item.1 == inventory_hostname

# 第二阶段完成
# 第三阶段 配置systemctl管理zookeeper开始

# 使用本地zookeeper.service.j2为模板创建/usr/lib/systemd/system/zookeeper.service 文件
- name: auto service manager zookeeper
  become: yes
  template:
    src:  zookeeper.service.j2
    dest: /usr/lib/systemd/system/zookeeper.service
    mode: 0755
    force: no

# rerolad systemctl
- name: Reload systemd
  become: yes
  command: systemctl daemon-reload

# 启动/重启服务
- name: Restart ZooKeeper service
  become: yes
  shell: "systemctl restart zookeeper"

# 查看状态
- name: Status ZooKeeper service
  shell: "systemctl status zookeeper"
  register: zookeeper_status_result
  ignore_errors: True
  
# debug输出状态结果
- debug:
    msg: "{{ zookeeper_status_result }}"

4. 执行playbook文件并测试zookeeper是否安装正常

ansible-playbook zookeeper.yaml -i production/hosts

如无意外,zookeeper安装完成,是不是很简单?下次需要在别的集群安装,只需要修改production/hosts文件的集群信息就可以了。

你可能感兴趣的:((五)使用Ansible搭建分布式大数据基础环境-ZooKeeper集群模式搭建)