Linux下搭建ZooKeeper集群
摘要
Zookeeper是针对大型分布式系统的高可靠的协调系统。它基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题。把分布式集群当成zoo,那么zookeeper就是管理员。zookeeper本身也可以是个集群,通过几台follow机器选举leader。zookeeper的主要作用包括,命名服务,配置管理,分布式一致性锁,HA(High available)。真是因为zookeeper在分布式系统领域如此重要,可以说是基石,所以我们绕不开要学习其使用及原理。
本文基于Ubuntu 16.04 LTS,介绍如何搭建1主2从的zookeeper集群。
环境依赖
- 奇数台服务器,且非observer节点数>1;如果是偶数台服务器,可以把多出来的1台设置为observer
- Java 8+
- 防火墙开放2181、2888、3888端口:
ufw allow 2181
ufw allow 2888
ufw allow 3888
ufw reload
一、下载与解压ZooKeeper
1、下载
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
2、解压到指定位置
$ tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C /usr/local
$ mv /usr/local/apache-zookeeper-3.6.2-bin /usr/local/zookeeper_3.6.2
$ cd /usr/local/zookeeper_3.6.2
二、配置文件
本小节先在服务器1
上进行配置,下一小节再通过scp将配置好的ZooKeeper分发到其他服务器上,减少重复工作。
1、创建配置文件
利用模板文件zoo_sample.cfg,通过拷贝创建配置文件zoo.cfg
$ cd /usr/local/zookeeper_3.6.2/conf
$ cp zoo_sample.cfg zoo.cfg
2、创建数据目录
$ mkdir /usr/local/zookeeper_3.6.2/data
3、修改配置文件dataDir
$ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg
#修改dataDir为如下内容
dataDir=/usr/local/zookeeper_3.6.2/data
4、添加server.id
$ vim /usr/local/zookeeper_3.6.2/conf/zoo.cfg
# 添加如下内容:
server.1=192.168.1.113:2888:3888
server.2=192.168.1.114:2888:3888
server.3=192.168.1.115:2888:3888
# server.id=zookeeper节点主机名 或 主机ip:2888:3888 选举端口和投票端口固定
# 如果有四台zookeeper的话,由于非observer节点数必须为奇数个
# 所以如果有第四台的话,可以使用如下添加方式:
# server.4=xx.xx.xx.xx:2888:3888:observer
# id是自己定义的,0~255间,不必一次递增,自己定即可,id表示该节点所持有的投票编号id,必需保证全局唯一
注意:不要在配置后面加注释#,这会导致cfg文件解析失败!从而导致zookeeper无法正常启动!
server.A=B:C:D
中各参数解析如下:
A:其中 A 是一个数字,表示这个是服务器的编号;
B:是这个服务器的 ip 地址 或 主机名;
C:Leader选举的端口;
D:Zookeeper服务器之间的通信端口。
5、创建myid文件
在dataDir目录下创建myid文件
机器192.168.1.113
上:
$ vim /usr/local/zookeeper_3.6.2/data/myid
#输入server.1=192.168.1.113:2888:3888所指定的id:1
1
机器192.168.1.114
上:
$ vim /usr/local/zookeeper_3.6.2/data/myid
#输入server.1=192.168.1.114:2888:3888所指定的id:2
2
机器192.168.1.115
上:
$ vim /usr/local/zookeeper_3.6.2/data/myid
#输入server.1=192.168.1.115:2888:3888所指定的id:3
3
三、将ZooKeeper分发到各个节点
$ cd /usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.114:/usr/local/
$ scp -r zookeeper_3.6.2 root@192.168.1.115:/usr/local/
四、配置环境变量
需要再各个服务器上进行配置:
vim /etc/profile
#添加如下内容
export ZOOKEEPER_HOME=/usr/local/zookeeper_3.6.2
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#激活环境变量
source /etc/profile
五、启动zkServer
在所有节点上启动zkServer
$ zkServer.sh start
#输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
查看集群节点状态:
$ zkServer.sh status
#一个节点输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
#另外两个节点输出如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper_3.6.2/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
有一台服务器的zk Mode为leader
,另外两台服务器的zk Mode为follower
,如果配置了observer
节点,则会有一台服务器的zk Mode为observer
。
停止命令:
zkServer.sh stop
重启命令:
zkServer.sh restart
六、查看ZooKeeper日志
如果启动过程出现了failed,可通过查看详细日志进行分析:
$ cd /usr/local/zookeeper_3.6.2/logs
$ cat zookeeper-<somthing>.out
至此,ZooKeeper集群环境搭建结束。
参考
[1]Apache Zookeeper 集群的搭建[https://blog.csdn.net/qq_33713328/article/details/88854991]
[2]zookeeper 集群搭建[https://www.cnblogs.com/ysocean/p/9860529.html]
更多关于大数据、分布式、存储、区块链、Linux相关文章请关注我的微信公众号:asympTech渐进线实验室
Linux下搭建ZooKeeper集群的更多相关文章
- Linux下搭建tomcat集群全记录(转)
本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...
- Linux下搭建tomcat集群全记录
(转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...
- linux系统搭建zookeeper集群
转载至:https://blog.csdn.net/weixin_38111957/article/details/82927878 一.引言 今天咱们就来搭建一下zookeeper集群,当然搭建集群 ...
- Linux 下配置zookeeper集群
我们首先准备三台服务器,IP地址分别如下(前提是要先安装JDK) 192.168.100.101 192.168.100.102 192.168.100.103 1.配置主机名到IP地址的映射(此步骤 ...
- Linux下搭建Hadoop集群
本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...
- Linux下安装zookeeper集群
首先,准备三台Linux虚拟机 三台机器 centos01 :192.168.1.168(lxs001) centos03 :192.168.1.178(lxs003) centos03 :1 ...
- 170711、Linux下搭建MySQL集群
一.MySQL集群简介 1.什么是MySQL集群 MySQL集群是一个无共享的(shared-nothing).分布式节点架构的存储方案,其目的是提供容错性和高性能. 数据更新使用读已提交隔离级别(r ...
- Linux下搭建mpi集群(ubuntu下用虚拟机测试)
一 建立SSH连接(无密码登陆) 1 SSH连接的简单介绍 SSH 为 Secure Shell 的缩写,中文翻译为安全外壳协议,建立在应用层,是一种远程连接安全协议.传统的telnet,pop,ft ...
- Linux下搭建Hadoop集群(Centos7.0)
Hadoop集群安装 概述 集群 cluster,将很多任务进程分布到多台计算机上:通过联合使用多台计算机的存储.计算能力完成更庞大的任务.为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满 ...
随机推荐
- HDFS读写流程(转载)
概述开始之前先看看其基本属性,HDFS(Hadoop Distributed File System)是GFS的开源实现.特点如下: 能够运行在廉价机器上,硬件出错常态,需要具备高容错性 ...
- 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
- BZOJ1150 [CTSC2007]数据备份Backup 链表+小根堆
BZOJ1150 [CTSC2007]数据备份Backup 题意: 给定一个长度为\(n\)的数组,要求选\(k\)个数且两两不相邻,问最小值是多少 题解: 做一个小根堆,把所有值放进去,当选择一个值 ...
- 阅读笔记:ImageNet Classification with Deep Convolutional Neural Networks
概要: 本文中的Alexnet神经网络在LSVRC-2010图像分类比赛中得到了第一名和第五名,将120万高分辨率的图像分到1000不同的类别中,分类结果比以往的神经网络的分类都要好.为了训练更快,使 ...
- Codeforces Round #696 (Div. 2) D. Cleaning (思维,前缀和)
题意:有一堆石子,你每次可以选择相邻(就算两堆石子中间有很多空堆也不算)的两堆石子,使得两堆石子的个数同时\(-1\),你在刚开始的时候有一次交换相邻石子的机会,问你最后能否拿走所有石子. 题解:对于 ...
- 关于最小生成树 Kruskal 和 Prim 的简述(图论)
模版题为[poj 1287]Networking. 题意我就不说了,我就想简单讲一下Kruskal和Prim算法.卡Kruskal的题似乎几乎为0.(●-`o´-)ノ 假设有一个N个点的连通图,有M条 ...
- python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移
先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...
- Triangle War POJ - 1085 极小极大搜索
参考链接:https://www.cnblogs.com/nwpuacmteams/articles/5697873.html 极小极大搜索 的个人理解(alpha-beta剪枝):https://w ...
- LInux 终端命令
删除目录: 绝对路径开头以"/"开始之后跟着根目录或家目录 删除后不会在垃圾站中 树的顶部那个'.'代表当前目录 用mv命令对一个存在文件重命名 这个more关键字一次性显示不完的 ...
- pip&conda 换源
PIP 各种可用源 清华源:https://pypi.tuna.tsinghua.edu.cn/simple 临时指定源 pip install -i https://pypi.tuna.tsingh ...