文章目录
1 安装 ZooKeeper
zookeeper
一般建议为奇数个(2n+1
),方便快速投票和选举
,半数以上的才可以选出主机
搭建伪集群, 在同一个Linux
中安装三个 ZooKeeper
实例。 使用不同的端口实现同时启动。 端口分配如下:
主机 | 服务端口 | 投票端口 | 选举端口 |
---|---|---|---|
192.168.159.130 | 2181 | 2881 | 3881 |
192.168.159.130 | 2182 | 2882 | 3882 |
192.168.159.130 | 2182 | 2882 | 3882 |
1.1 解压缩
tar -zxvf zookeeper
1.2 复制配置文件
在zookeeper解压后的conf
目录中,把zoo_sample.cfg
给复制一份并且名字为zoo.cfg
,这是因为zoo_sample.cfg
只是配置模板,需要我们以这个模板为基础创建zoo.cfg
,并且zookeeper
真正读取的是zoo.cfg
文件
cp zoo_sample.cfg zoo.cfg
1.3 创建 data 数据目录
因为在 zookeeper
中需要临时的数据目录,因为在解压后的文件夹中创建文件夹 data
目录
mkdir data
另外,需要在每个Zookeeper
应用内的 data
目录中增加文件myid
,内部定义每个服务的编号
. 编号要求为数字
,是正整数
可以使用回声命名
快速定义 myid
文件,这个文件的名字必须是myid,其他的话回启动失败
echo 1 > myid
1.4 编写Zookeeper配置文件
vi /usr/local/solrcloude/zookeeper1/conf/zoo.cfg
- 修改
data
数据目录的路径 clientPort=2181
客户端访问端口,因此三个zookeeper
实例不能端口相同.
还需要如下配置:server.服务的编号=IP:投票端口:选举端口
服务器编号:
表示这是第几号服务器
投票端口:
是这个服务器
与集群中的Leader服务器
交换信息的端口,用于决定正在运行的主机是否宕机
选举端口:
如果集群中的Leader服务器
挂了,用于决定哪一个Zookeeper
服务作为主机
三个Zookeeper
应用配置一致.
server.1=192.168.120.132:2881:3881
server.2=192.168.120.132:2882:3882
server.3=192.168.120.132:2883:3883
1.5 复制两份同样的Zookeeper
cp zookeeper1 zookeeper2 -r
cp zookeeper1 zookeeper3 -r
复制后,要修改zoo.cfg
1.6 启动 Zookeeper 测试
要至少启动两个 Zookeeper
启动. 启动单一 Zookeeper
,无法正常提供服务.
# 启动
zookeeper1/bin/zkServer.sh start
# 查看状态
zookeeper1/bin/zkServer.sh status
1.7 操作zkClinet
zkCli.sh
进入zookeeper
客户端
根据提示命令进行操作:
- 查找(只能是绝对路径):
ls / ls /zookeeper
- 创建并赋值:
create /bhz hadoop
- 获取:
get /bhz
- 设值:
set /bhz baihezhuo
可以看到zookeeper
集群的数据一致性,创建节点有俩种类型:短暂(ephemeral
)和持久(persistent
)
1.8 zoo.cfg详解
tickTime
: 基本事件单元,以毫秒
为单位。这个时间是作为 Zookeeper
服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime
时间就会发送一个心跳。
dataDir
: 存储内存中数据库快照的位置,顾名思义就是 Zookeeper
保存数据的目录,默认情况下, Zookeeper
将写数据的日志文件也保存在这个目录里。
clientPort
: 这个端口就是客户端连接 Zookeeper
服务器的端口, Zookeeper
会监听这个端口,接受客户端的访问请求。
initLimit
: 这个配置项是用来配置 Zookeeper
接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过10
个心跳的时间(也就是tickTime
)长度后Zookeeper
服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20
秒。
syncLimit
: 这个配置项标识Leader
与Follower
之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime
的时间长度,总的时间长度就是5*2000=10
秒