zookeeper集群搭建

Posted trumbull

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper集群搭建相关的知识,希望对你有一定的参考价值。

zookeeper集群搭建

centOS操作系统
检测集群时间是否同步
检测防火墙是否关闭
检测主机 ip映射有没有配置
检测服务器间是否配置免密登陆
检测服务器是否安装正确的jdk

---------------------------------------------------------------------------------------------------------------------------------------
检测集群时间是否同步

说明:由于大数据中,集群对时间要求很高,所以集群内主机要经常同步时间(包括时区的同步)。


常用的手动进行时间的同步
  date -s "2017-03-03 03:03:03"
或者网络同步:
  yum install ntpdate (安装ntpdate网络时间协议更新软件)
  ntpdate cn.pool.ntp.org (中国网络时间协议)


也可以进行如下的设置:(时间同步协议)

1、yum install ntp

2、vi /etc/ntp.conf

修改如下部分:
server 58.220.207.226 iburst
server 47.92.108.218 iburst
server 202.112.29.82 iburst
server 202.108.6.95 iburst

其中ip为全球可用的ntp时间服务器,免费提供授时服务。

3、配置之后,保存设置,重启服务

service ntpd stop 时间同步协议

service ntpd start


4、甚至可以设置crontab来定时与互联网服务器进行同步

---------------------------------------------------------------------------------------------------------------------------------------

检测防火墙是否关闭

关闭防火墙,意味着把所有通信端口开放

三台虚拟机同时发送命令:

service iptables stop 关闭防火墙服务(关机恢复)

chkconfig iptables off 永久关闭防火墙(关机有效)

chkconfig iptables --list 查看防火墙状态

---------------------------------------------------------------------------------------------------------------------------------------

检测主机 ip映射有没有配置

修改映射 vi /etc/hosts

查看映射 cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.158.151 node-1
192.168.158.152 node-2
192.168.158.153 node-3


测试:ping node-1等

---------------------------------------------------------------------------------------------------------------------------------------

检测服务器间是否配置免密登陆

每台服务器都要配置三次(包括本机 (本机登陆本机的底层原理:xshell登陆node-1,node-1的ssh进程登陆node-1))

ssh-keygen

ssh-copy-id node-1

免密登陆测试:ssh node-1

退出登陆:exit

---------------------------------------------------------------------------------------------------------------------------------------

安装前需要安装好jdk


卸载服务器自带的openjdk:

rpm -qa|grep java 查询
rpm -e --nodeps xxxxxxxxxxxxxxxxxxx 卸载

jdk安装路径:

mkdir -p /export/servers 软件安装
mkdir -p /export/software 安装包
mkdir -p /export/data 数据存放

jdk从一台机器配置,然后发送给其他机器

环境变量:vi /etc/profile (大G最后一行,小o开启新一行)

export JAVA_HOME=/export/servers/jdk1.8.0_65 (以实际安装路径为准)
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar (非必选)

环境变量开机加载一次,source /etc/profile 命令生效,java -version验证是否成功

发送给其他机器:
scp -r /export/servers/jdk1.8.0_65 [email protected]:/export/servers/
scp -r /etc/profile [email protected]:/etc/


同时发送 source /etc/profile 使环境变量生效
同时发送 java -version 验证是否生效

-----------------------------------------------------------------------------------------------------------------------------
##下载安装包、解压

tar -zxvf zookeeper-3.4.5.tar.gz
mv zookeeper-3.4.5 zookeeper

##修改环境变量(注意:3台zookeeper都需要修改)

vi /etc/profile
export ZOOKEEPER_HOME=/export/servers/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile

##修改Zookeeper配置文件

cd /export/servers/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改内容:
dataDir=/export/data/zkdata
添加内容:
server.1=node-1:2888:3888 ## (服务器名编号不重复即可,主机名,心跳端口、选举端口)
server.2=node-2:2888:3888
server.3=node-3:2888:3888

##myid
创建并进入文件夹:
/export/data/zkdata

在data文件夹下新建myid文件,myid的文件内容为:
echo 1 > myid

##分发安装包到其他机器
scp -r /export/servers/zookeeper [email protected]:/export/servers/
scp -r /export/servers/zookeeper [email protected]:/export/servers/

##修改其他机器的配置文件
修改myid文件
到node2上:
cd /export/data/zkdata
echo 2 > myid
到node3上:
cd /export/data/zkdata
echo 3 > myid

##启动(每台机器)
zkServer.sh start
或者编写一个脚本来批量启动所有机器:
for host in "node-1 node-2 node-3"
do
ssh $host "source/etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
done

##查看集群状态
jps(jdk提供的查看java进程命令)
zkServer.sh status(查看集群状态,主从信息)


如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查,排查之后还有问题,请使用万能法:重启linux

-----------------------------
配置文件中参数说明:

tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。

initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。

syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;

clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;

server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。


调bug参考(感谢)

https://blog.csdn.net/u014686180/article/details/51767863
https://www.cnblogs.com/eggplantpro/p/7120893.html


----------------------------------------------------------------

export JAVA_HOME=/root/apps/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar










































































以上是关于zookeeper集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

搭建Zookeeper集群服务启动失败

Zookeeper集群搭建

zookeeper--- 搭建zookeeper集群

zookeeper集群搭建

ZooKeeper系列1.ZooKeeper单机版伪集群和集群环境搭建

Kafka + Zookeeper集群搭建