Ansible部署 之 zookeeper集群

简介

Ansible是近年来越来越火的一款轻量级运维自动化工具,主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理,支持playbook编排。配置简单,无需安装客户端,被管理端主机通过ssh协议通信。Ansible本身不具有自动化部署功能,全交由其丰富的模块实现。

部署目标

  • 快速部署一个三节点的zookeeper集群
  • 部署过程中可以自定义软件安装目录及服务监听端口号

环境配置

hostname

IP

CPU

RAM

DISK

Network

master

192.168.199.201

2C

4G

40G

NAT

slave1

192.168.199.202

slave2

192.168.199.203

安装基础环境

# All node install
yum install -y wget unzip screen ntpdate net-tools sshpass vim tree telnet
# Only master node install
yum install -y ntp ansible

配置ssh互信

tee >> /etc/hosts <<EOF


192.168.199.201 master
192.168.199.202 slave1
192.168.199.203 slave2
EOF


ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""; \cp -f /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
tee /root/.ssh/config <<-'EOF'
host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
EOF
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

部署文件

  • jdk:jdk-8u341-linux-x64.tar.gz
  • zookeeper:apache-zookeeper-3.8.2-bin.tar.gz

创建目录

[root@master ~]# mkdir -p /opt/playbook/{group_vars,roles/{jdk/{files,tasks,templates},zk/{files,tasks,templates}}}
[root@master ~]# cd /opt/playbook/

部署清单目录结构

[root@master playbook]# tree
.
├── group_vars
│   └── all.yml
├── hosts
├── roles
│   ├── jdk
│   │   ├── files
│   │   │   └── jdk-8u341-linux-x64.tar.gz
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── jdk.sh.j2
│   └── zk
│       ├── files
│       │   └── apache-zookeeper-3.8.2-bin.tar.gz
│       ├── tasks
│       │   └── main.yml
│       └── templates
│           ├── setid.sh.j2
│           ├── zoo.cfg.j2
│           └── zookeeper.service.j2
└── zk.yml


10 directories, 11 files

清单内容

[root@master playbook]# cat hosts
[jdk]
192.168.199.201
192.168.199.202
192.168.199.203


[zk]
192.168.199.201
192.168.199.202
192.168.199.203

交互式配置文件

[root@master playbook]# cat zk.yml
---
- hosts: zk
  gather_facts: false
  vars_prompt:
  - name: install_path
    prompt: 请输入软件安装目录
    default: "/opt/soft"
    private: no
  - name: leader_port
    prompt: 请输入zk服务的Leader-Port
    default: 12888
    private: no
  - name: vote_port
    prompt: 请输入zk服务的Vote-Port
    default: 13888
    private: no
  - name: client_port
    prompt: 请输入zk服务的Client-Port
    default: 12181
    private: no
  roles:
    - jdk
    - zk

声明变量

[root@master playbook]# cat group_vars/all.yml
#Soft Package
jdk_pkg: jdk-8u341-linux-x64.tar.gz
jdk_version: jdk1.8.0_341
zk_pkg: apache-zookeeper-3.8.2-bin.tar.gz
zk_version: apache-zookeeper-3.8.2-bin
#Soft Name
jdk_soft_name: jdk
zk_soft_name: zookeeper
#Install Path
install_path: /opt/soft
#Zk Port
leader_port: 12888
vote_port: 13888
client_port: 12181
# Zk Host
zk_hosts: zk

JDK部署清单

[root@master playbook]# cat roles/jdk/tasks/main.yml
---
- name: "0、创建{{ install_path }}目录"
  file:
    path: "{{ install_path }}"
    state: directory


- name: "1、解压{{ jdk_soft_name }}二进制包"
  unarchive:
    src: "{{ jdk_pkg }}"
    dest: "{{ install_path }}"


- name: "2、建立{{ jdk_soft_name }}软链接"
  file:
    src: "{{ install_path }}/{{ jdk_version }}"
    dest: "{{ install_path }}/{{ jdk_soft_name }}"
    state: link


- name: "3、分发环境变量"
  template:
    src: jdk.sh.j2
    dest: /etc/profile.d/jdk.sh


- name: "4、加载{{ jdk_soft_name }}环境"
  shell: bash -c 'source /etc/profile.d/jdk.sh'

JDK环境变量

[root@master playbook]# cat roles/jdk/templates/jdk.sh.j2
#!/usr/bin/env bash
# JAVA
JAVA_HOME={{ install_path }}/{{ jdk_soft_name }}
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export PATH JAVA_HOME CLASSPATH JRE_HOME
[root@master playbook]# cat roles/zk/tasks/main.yml
- name: "1、创建安装目录"
  file:
    path: "{{ install_path }}"
    state: directory


- name:  "2、解压{{ zk_soft_name }}源码包"
  unarchive:
    src:  "{{ zk_pkg }}"
    dest: "{{ install_path }}"


- name: "3、建立{{ zk_soft_name }}软链接"
  file:
    src: "{{ install_path }}/{{ zk_version }}"
    dest: "{{ install_path }}/{{ zk_soft_name }}"
    state: link


- name: "4、创建{{ zk_soft_name }}数据目录"
  file:
    path: "{{ item }}"
    state: directory
  with_items:
    - "{{ install_path }}/{{ zk_soft_name }}/data"
    - "{{ install_path }}/{{ zk_soft_name }}/logs"


- name: "5、修改{{ zk_soft_name }}配置文件"
  template: '{{ item }}'
  with_items:
    - "{'src': 'setid.sh.j2', 'dest': '{{ install_path }}/{{ zk_soft_name }}/bin/setid.sh'}"
    - "{'src': 'zoo.cfg.j2', 'dest': '{{ install_path }}/{{ zk_soft_name }}/conf/zoo.cfg'}"
    - "{'src': 'zookeeper.service.j2', 'dest': '/usr/lib/systemd/system/zookeeper.service'}"


- name: "6、写入myid"
  shell: /bin/bash setid.sh
  args:
    chdir: "{{ install_path }}/{{ zk_soft_name }}/bin"


- name: "7、启动{{ zk_soft_name }}集群"
  systemd:
    name: zookeeper
    state: started
    daemon_reload: yes
    enabled: yes


- name: "8、获取{{ zk_soft_name }}集群状态"
  shell: ./zkServer.sh status
  args:
    chdir: "{{ install_path }}/{{ zk_soft_name }}/bin"
  register: info


- name: "9、打印{{ zk_soft_name }}集群状态"
  debug:
    msg: "{{ info.stderr_lines }}, {{ info.stdout_lines }}"

myid模板

[root@master playbook]# cat roles/zk/templates/setid.sh.j2
#!/usr/bin/env bash


{% for ip in groups[zk_hosts] %}
{% if ip == inventory_hostname %}
echo {{ loop.index - 1 }} > {{ install_path }}/{{ zk_soft_name }}/data/myid
{% endif %}
{% endfor %}

zookeeper配置文件

[root@master playbook]# cat roles/zk/templates/zoo.cfg.j2
tickTime=2000
initLimit=100
syncLimit=10
clientPort={{ client_port }}
maxClientCnxns=10000
dataDir={{ install_path }}/{{ zk_soft_name }}/data
dataLogDir={{ install_path }}/{{ zk_soft_name }}/logs


{% for ip in groups[zk_hosts] %}
server.{{ loop.index - 1 }}={{ ip }}:{{ leader_port }}:{{vote_port }}
{% endfor %}

zookeeper服务文件

[root@master playbook]# cat roles/zk/templates/zookeeper.service.j2
[Unit]
# 服务描述
Description=zookeeper
# 在网络服务启动后运行
After=network.target
[Service]
Type=forking
# jdk环境变量
Environment=JAVA_HOME={{ install_path }}/jdk ZOO_LOG_DIR={{ install_path }}/zookeeper/logs
# 启动命令
ExecStart={{ install_path }}/zookeeper/bin/zkServer.sh start
# 停止命令
ExecStop={{ install_path }}/zookeeper/bin/zkServer.sh stop
# 重载命令
ExecReload={{ install_path }}/zookeeper/bin/zkServer.sh restart
[Install]
WantedBy=multi-user.target

延申阅读

以上清单中涉及的ansible模块比较多,同时还涉及jinja2相关的知识及服务配置文件的渲染。需要对此有一定的了解。下面我提供了一些相关知识的链接,供大家学习参考:

ansible学习文档: https://ansible-tran.readthedocs.io/en/latest/

yaml语法: https://www.runoob.com/w3cnote/yaml-intro.html

JinJa2语法: https://docs.jinkan.org/docs/jinja2/

部署

部署之前,需要配置Ansible主机到被管理节点的ssh免密登录;如未配置免密登录,需要额外在资产清单中配置ssh登录密码。

[root@master playbook]# ansible-playbook -i hosts zk.yml

部署完成后,从上图的显示结果中可以看到,192.168.199.203为leader节点,其余两个节点为follower节点。

来自: Ansible部署 之 zookeeper集群icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzk0NTQ3OTk3MQ==&mid=2247487456&idx=1&sn=1fa0cdb236b82678ca83afaceb4fdc9e&chksm=c31587acf4620eba0594962ad1c4f2f4e3365649fbfdde8c2352a230477db7a6753c443fe508&token=113329682&lang=zh_CN#rd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LNMP网络架构的搭建

操作准备&#xff1a;准备三台虚拟机 安装 MySQL 服务 &#xff08;1&#xff09;准备好mysql目录上传软件压缩包并解压 cd /opt mkdir mysql tar xf mysql-boost-5.7.44.tar.gz &#xff08;2&#xff09;安装mysql环境依赖包 yum -y install ncurses ncurses-devel bison…

idea 中:运行 Application 时出错。命令行过长

一、问题描述&#xff1a; idea 导入新项目&#xff0c;在编译后&#xff0c;运行项目时&#xff0c;报以下错误&#xff1a; 14:47 运行 Application 时出错运行 Application 时出错。命令行过长。通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。二、问题…

在Oracle VM virtual box 中复制 CentOS 7虚拟机更改IP地址的操作

最近玩Redis主从复制的时候&#xff0c;我装了一个虚拟机&#xff0c;但主从复制需要准备3个虚拟机&#xff0c;这个时候&#xff0c;我又不想一个一个去装&#xff0c;我看到Oracle VM virtual box提供了一个虚拟机复制操作&#xff0c;于是就用了一下这个功能&#xff0c;发现…

LabVIEW传感器虚拟综合实验系统

LabVIEW传感器虚拟综合实验系统 开发了一个基于LabVIEW的传感器虚拟综合实验系统&#xff0c;该系统集成了NIELVIS和CSY系列传感器实验平台&#xff0c;通过图形化编程语言进行数据处理和实验管理。系统允许用户进行多种传感器参数的测量和实验报告的自动生成&#xff0c;支持…

SqlServer2016企业版安装

前言 好久没有知识的累积&#xff0c;最近工作上遇到新的SqlServer2016安装&#xff0c;记录一下 参考文章 SQL Server 2016软件安装包和安装教程 - 哔哩哔哩 (bilibili.com) 安装包准备 需要提前准备软件安装包如下 cn_sql_server_2016_enterprise_x64_dvd_8699450&…

(免费领源码)Java#springboot#MySQL书法社团管理系统36200-计算机毕业设计项目选题推荐

目 录 摘要 Abstract 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 书法社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析…

重邮803计网概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成&#xff08;功能&#xff09; 6.互联网功能 7.互联网的组成&#xff08;物理&#…

Vitis HLS 学习笔记--static RAM/ROM

目录 1. 简介 2. static RAM 2.1 无 reset 的情形 2.2 含 reset 的情形 3. static ROM 4. 总结 1. 简介 本文仍然是讨论阵列的初始化与复位问题&#xff0c;区别于《Vitis HLS 学习笔记--global_array_RAM初始化及复位-CSDN博客》&#xff0c;本文讨论的对象是静态阵列&…

ARM的异常处理

目录 异常的概念 ARM的异常源 异常优先级 异常模式 异常处理的过程 状态寄存器CPSR 异常向量表 异常的概念 异常是计算机系统中一种突发事件或错误情况&#xff0c;它打破了正常的程序执行流程&#xff0c;需要特殊处理。异常可能由硬件错误、软件错误或外部事件引发&am…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

8990890

作者主页&#xff1a;作者主页 数据结构专栏&#xff1a;数据结构 创作时间 &#xff1a;2024年5月18日

Mac OS 用户开启 8080 端口

开启端口 sudo vim /etc/pf.conf # 开放对应端口 pass out proto tcp from any to any port 8080 # 刷新配置文件 sudo pfctl -f /etc/pf.conf sudo pfctl -e获取本机ip地址 ifconfig en0 | grep inet | grep -v inet6 | awk {print $2}访问指定端口

JAVA环境的安装

一、JAVA环境的安装 像Java和一些其他的高级语言计算机直接识别不了&#xff0c;需要进行翻译&#xff0c;所以需要事先安装翻译工具 文件都在硬盘上&#xff0c;程序都在内存中 具体操作流程&#xff1a; 一、JDK的下载及安装 二、配置JAVA环境 1.打开环境变量 2.新建系…

Linux云计算架构师涨薪班就业服务有哪些?

学员一站式就业服务:一次学习&#xff0c;薪资翻倍 简历制作与指导 学员在培训期间&#xff0c;人才顾问会提供简历制作和指导服务&#xff0c;帮助学员制作出一份专业、有吸引力的简历。简历是求职者给招聘单位的第一印象&#xff0c;因此非常重要 模拟面试与技巧指导 为了让…

SpringBoot定时任务+Quartz 动态调度

1、分部解释 2、完整代码 3、SpringBoot定时任务Quartz 1、动态定时任务&#xff1a; 动态定时任务&#xff0c;即定时任务的动态调度&#xff0c;可根据需求自由的进行任务的生成、暂停、恢复、删除和更新操作。Quartz本身没有提供动态调度的功能,需要自己根据相关的API开发。…

Github 2024-06-06 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

小程序丨最大填表限制如何开启?

老师在新建填表时&#xff0c;希望设置最大数量限制&#xff0c;若填表达到限制&#xff0c;后续的学生将不能继续提交填表。 通过开启【表格最大限制】功能即可实现&#xff0c;下面就来教大家如何制作吧。 &#x1f50e;如何开启表格最大限制功能&#xff1f; 按照常规流程…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战&#xff1a;探索 LLM 预训练的挑战 一、背景 在过往的文章中&#xff0c;我们详细阐述了LLM预训练的数据集、清洗流程、索引格式&#xff0c;以及微调、推理和RAG技术&#xff0c;并介绍了GPU及万卡集群的构建。然而&#xff0c;LLM预训练的具体细节尚待进一…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

word2016版本中同时显示多个页面

为了方便查看word内容&#xff0c;我们会将多个页面同时显示。 对于2016版&#xff0c;操作方法如下&#xff1a; 视图 ---》多页