zookeeper(一) 集群安装

集群安装

        集群方式:Zookeeper 使用方式主要有单机、伪集群、集群三种部署方式.

1.下载zookeeper安装包

Apache ZooKeepericon-default.png?t=N7T8https://zookeeper.apache.org/releases.html

2.解压安装包到安装目录

#1.创建安装目录
mkdir /usr/local/zookeeper
#2.解压安装包到指定目录下(使用3.4.9 最新的curator只支持3.4.x与4.0)
tar -xzvf /home/czh/zookeeper-3.4.9.tar.gz -C /usr/local/zookeeper

3.添加文件myid(必须是数字)

$cd /usr/local/zookeeper/zookeeper-3.4.9/data
$touch myid
$ vi myid
1

4.配置

#1.到达安装目录
cd /usr/local/zookeeper/apache-zookeeper-3.6.0-bin
#2.在zookeeper中新建data文件夹,做为zookeeper数据存储文件夹
mkdir /usr/local/zookeeper/apache-zookeeper-3.6.0-bin/data
#3.复制zoo_sample.cfg,并给新起名的zoo.cfg
cp /usr/local/zookeeper/apache-zookeeper-3.6.0-bin/conf/zoo_sample.cfg /usr/local/zookeeper/apache-zookeeper-3.6.0-bin/conf/zoo.cfg

#4修改zoo.cfg中dataDir属性值为新建data文件夹的路径(vim zoo.cfg)
vim /usr/local/zookeeper/apache-zookeeper-3.6.0-bin/conf/zoo.cfg

# tickTime: 客户端与服务器、服务器与服务器之间维持心跳的时间间隔,也就是每一个 
# tickTime 会发送一次心跳,单位为毫秒
  tickTime=2000

# initLimit: 集群中 Leader 和 Follow 初始化连接时最多能容忍的心跳数
# 也就是初始化过程中,如果 Leader 和 Follow 在 (10*tickTime)的时间内还没有连
# 接上,则认为连接失败
  initLimit=10
  
# syncLimit: 同步通信实现, Leader 和 Follow 服务器之间发送请求和接收应答最多
# 能容忍的心跳数
# 也就是Leader和Follow如果发送的请求在 (5*tickTime)的时间没没有应答,那么就认
# 为Leader和Follow之间连接失败
  syncLimit=5

# dataDir: zookeeper保存日志文件的目录
  dataDir=/usr/local/zookeeper/apache-zookeeper-3.6.0-bin/data
  dataLogDir=/usr/local/zookeeper/apache-zookeeper-3.6.0-bin/data/logs
  
# clientPort: 客户端连接 zookeeper 服务器的端口, zookeeper 会监控这个端口
  clientPort=2181 #1,2,3 分别设置 2181 注意几个端口的区分

# the maximum number of client connections.
# increase this if you need to handle more clients
# maxClientCnxns=60

# 日志中保留的快照数目
  autopurge.snapRetainCount=3
  
# 定时清除任务,单位为小时
  autopurge.purgeInterval=1

###############cluster###############
server.1=hd09-1:2888:3888  #注意与clientPort的区分
server.2=hd09-2:2888:3888  #注意与clientPort的区分
server.3=hd09-3:2888:3888  #注意与clientPort的区分
server.1=192.168.137.230:2888:3888  #注意与clientPort的区分2181不正确
server.2=192.168.137.226:2888:3888  #注意与clientPort的区分
server.3=192.168.137.219:2888:3888  #注意与clientPort的区分
#最好直接使用ip不然会有问题(不确定)
#其中server.后面的数字1、2、3分别是机器hd09-1、hd09-2、hd09-3
#中zookeeper-3.4.10/zkData/myid文件中的值
#server.myid=ip:port1:port2
#port1:zk集群成员的信息交换 与clientPort 不同
#port2:在leader挂掉时专门用来进行选举leader所用
#clientPort=xxxx 对外暴露的端口
#clientPort=2181  
// 这个可以不用改变都是使用同一个,由于不同的机器不会存在端口冲突的情况了

# 集群信息规则(server.服务器编号=服务器的 IP 地址: LF 通信端口:选举端口
# server.N=YYY:A:B
# N: 服务器编号,每一台服务器的编号都是唯一的
# YYY: 服务器的 IP 地址
# A: LF 通信的端口,服务器与 zookeeper 集群中 Leader 交换信息的端口
# B: 选举端口,
#  集群中每一台服务器的 A 端口都是一样的,集群中的每一台服务器的 B 端口也是一样的
# 但是当采用伪集群的时候,由于 IP 地址都是一样的,只能是 A 端口和 B 端口不一样.

observer 节点配置

//此处声明表示作为一个观察者角色存在

     peerType=observer

    server.1=10.2.143.5:2887:3887   

    server.2=10.2.143.36:2888:3888   

    server.3=10.2.143.37:2889:3889 

//注意观察者角色的末尾,需要拼接上observer

    server.4=10.2.143.38:2886:3886:observer

5.修改环境变量

vi /etc/profile
export ZOOKEEPER_HOME=/root/hd/zookeeper3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

6.生效环境变量

source /etc/profile

7.启动zookeeper服务

/usr/local/zookeeper/apache-zookeeper-3.6.0-bin/bin/zkServer.sh start

8.验证是否启动成功:

/usr/local/zookeeper/apache-zookeeper-3.6.0-bin/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/apache-zookeeper-3.6.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

在Zookeeper服务器成功启动的前提下,在Linux侧的shell命令端口执行下面的ruok四字命令,如果能够显示imok,表示zk服务器端成功启动。

使用四字命令:

echo ruok | nc 127.0.0.1 2181

9.客户端连接:./zkCli.sh

Mode: follower //显示当前zk是follwer 还是Leader.

$ telnet 127.0.0.1 2181
Trying 127.0.0.1.....
Connected to  localhost.localdomain(127.0.0.1).
Escape character is '^]'
stat
Zookeeper version: 3.4.3-1240972,built on 02/06/2012 10:48 GMT
Clients:
/127.0.0.1:50257[0](queued=0,recved=1,sent=0)

Latency min/avg/max:0/1/4489
Received: 844689
Sent: 993100
Outstanding:  0
Zxid: 0x600084344
Mode: leader  ### 集群模式
Node count  37
出现以上信息则说明正常启动

10.关闭zookeeper

异常内容

2021-03-15 16:11:41,548 [myid:1] - WARN  [QuorumConnectionThread-[myid=1]-4:QuorumCnxManager@400] - Cannot open channel to 2 at election address zk_02/192.168.137.226:3888
java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

这种情况一般是两种:

1 端口的防火墙没开

2 如果是放在云上的话,zoo.cfg里面的ip要是内网地址,不能是别名或者公网地址

大坑

我们发现当我们启动zookeeper后data中除了自己写的myid外还多出一个version-2的文件夹,这就是关键!!我们可以看到这个文件夹对root可执行,但是当我们进入之后,发现里面的三个文件都是不可执行的。我们需要修改他们的权

集群端口配置错误可能造成follower与leader不同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值