搜索推荐二——zookeeper单机及集群搭建

zookeeper单机及集群搭建

zookeeper部署有单机、伪集群、集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。

ZooKeeper 是一个开源的分布式协调服务,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。
准备
  1. Linux环境,安装jdk环境
  2. 下载zookeeper.tar.gz安装包,本文以3.4.6为例
    官网下载地址 zookeeper官网
单机安装
  1. 安装
    使用tar解压要安装的目录即可,以3.4.6版本为例
    这里以解压到/usr/local,实际安装根据自己的想安装的目录修改(注意如果修改,那后边的命令和配置文件中的路径都要相应修改)
    tar -zxf zookeeper-3.4.6.tar.gz -C /usr/local

  2. 配置
    在主目录下创建data和logs两个目录用于存储数据和日志以及配置zoo.cfg文件:
    [注意:zoo.cfg配置等号两边不能有空格]

cd /usr/local/zookeeper-3.4.6
mkdir data
mkdir logs
 
在conf目录下新建zoo.cfg文件,写入以下内容保存:**[注意:zoo.cfg配置等号两边不能有空格]**
tickTime=2000  
dataDir=/usr/local/zookeeper-3.4.6/data
dataLogDir=/usr/local/zookeeper-3.4.6/logs
clientPort=2181

3 启动和停止
进入bin目录,启动、停止、重启分和查看当前节点状态(包括集群中是何角色)别执行:
./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status

伪集群模式

伪集群模式就是在同一主机启动多个zookeeper并组成集群,下边以在localhost主机上创3个zookeeper组集群为例。
将通过第一大点安装的zookeeper,复制成zookeeper_1/zookeeper_2/zookeeper_3三份

  • 1.zookeeper_1配置
    zookeeper_1配置文件conf/zoo.cfg修改如下:
tickTime=2000
dataDir=/usr/local/zookeeper_1/data
dataLogDir=/usr/local/zookeeper_1/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=${ip}:2888:3888
server.2=${ip}:4888:5888
server.3=${ip}:6888:7888

zookeeper_1的data/myid配置如下:

echo '1' > data/myid
  • 2 zookeeper_2配置
    zookeeper_2配置文件conf/zoo.cfg修改如下:
tickTime=2000
dataDir=/usr/local/zookeeper_2/data
dataLogDir=/usr/local/zookeeper_2/logs
clientPort=3181 ###注意此处各个实例应该不同 
initLimit=5
syncLimit=2
server.1=${ip}:2888:3888
server.2=${ip}:4888:5888
server.3=${ip}:6888:7888

zookeeper2的data/myid配置如下:

echo '2' > data/myid
  • 3 zookeeper_3配置
    zookeeper_3配置文件conf/zoo.cfg修改如下:
tickTime=2000
dataDir=/usr/local/zookeeper_3/data
dataLogDir=/usr/local/zookeeper_3/logs
clientPort=4181 ###各节点的配置不同
initLimit=5
syncLimit=2
server.1=${ip}:2888:3888
server.2=${ip}:4888:5888
server.3=${ip}:6888:7888

zookeeper_3的data/myid配置如下:

echo '3' > data/myid

伪集群模式安装完成,最后分别使用zookeeper单机启动把三个zookeeper都启动即可,启动顺序随意没要求。也可用脚本形式

#!/bin/bash

local_param=$1
if [ -z "$local_param" ]; then
	local_param="status"
	echo "请输出zookeeper集群执行命令参数[start|stop|status|restart]"
fi

local_file="/usr/local/"
echo "${local_param} 节点1 $local_file /zookeeper_1"
sh /usr/local/zookeeper_1/bin/zkServer.sh ${local_param}

echo "${local_param} 节点2 $local_file /zookeeper_2"
sh /usr/local/zookeeper_2/bin/zkServer.sh ${local_param}

echo "${local_param} 节点3 $local_file /zookeeper_3"
ssh 172.16.119.155 "source ~/.bash_profile;  /home/solrcloud/zookeeper_3/bin/zkServer.sh ${local_param}"
sh /usr/local/zookeeper_3/bin/zkServer.sh ${local_param}
集群模式

集群模式就是在不同主机上安装zookeeper实例然后组成集群的模式,只需要将伪集群模式中的zoo.cfg中的${ip}换成对应机器的ip地址即可

zk_1 conf/zoo.cfg文件修改

tickTime=2000
dataDir=/usr/local/zookeeper-3.4.6/data
dataLogDir=/usr/local/zookeeper-3.4.6/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip.${A}:2888:3888
server.2=ip.${A}:2888:3888
server.3=ip.${A}:2888:3888

ip.${A}对应的是zookeeper的几个实例的ip地址

在一台机器上操作其他机器上的zookeeper,需要实现机器之间免密登录,即把本机的id_rsa.pub的key加入目标机器的authorized_keys即可。操作其他机器的命令需要先执行目标机器的环境变量。例如:

ssh ${IP} "source ~/.bash_profile;  /home/zookeeper/bin/zkServer.sh ${local_param}"
异常处理
  • 应用连接zookeepr报错:Session 0x0 for server ip.A/ip.A:2181,unexpected error,closing socket connection and attempting reconnect;

先看端口能否telnet通,如果通则使用./zkServer.sh status查看zk是否确实已启动,没启查看bin/zookeeper.out中的报错。
bin/zookeeper.out中报错:“zookeeper address already in use”;显然端口被占用,要么是其他进程占用了配置的端口,要么是上边配置的clientPort和server中的端口有重复。
bin/zookeeper.out中报错:Cannot open channel to 2 at election address /ip.A:3888;这应该只是组成集群的该节点未启动,等到该zk实例启动起来zk即会正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值