前提 时间同步,无密互通

安装jdk

请到oralce jdk官网下载 删除老的jdk find /usr/local/ -maxdepth 1 -type d -name "jdk*" -exec rm -rf {} ; 将文件解压到指定目录下(这个看个人喜好) tar axf /tmp/jdk-8u151-linux-x64.tar.gz -C /usr/local/ 创建软链接 dirname=find /usr/local/ -maxdepth 1 -type d -name "jdk*" ln -s ${dirname} /usr/local/jdk cat >> /etc/profile <<EOF export JAVA_HOME=/usr/local/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH EOF source /etc/profile


单点安装zookeeper

zookeeper:分布式应用程序协调服务。 删除老的(我习惯把东西安装在 /usr/local下,把下载的文件放在/tmp下) find /usr/local -maxdepth 1 -type d -name "zookeeper*" -exec rm -rf ; find /tmp -maxdepth 1 -type f -name "zookeeper*" -exec rm ; 下载安装包 cd /tmp wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz 解压 filename=find /tmp -maxdepth 1 -type f -name "zookeeper*" tar axf ${filename} -C /usr/local 创建软链接 basedir=find /usr/local -maxdepth 1 -type d -name "zookeeper*" ln -s ${basedir} /usr/local/zookeeper 创建文件目录 mkdir -p /usr/local/zookeeper/{data,logs} 设置环境变量 cat >> /etc/profile << EOF export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin EOF

zoo.cfg主配置文件

zoo.cfg是zookeeper的主配置文件,位于${ZOOKEEPER_HOME}/conf/,安装包中没有这个文件,可以复制该目录下的zoo_sample.cfg生成 cp ${ZOOKEEPER_HOME}/conf/zoo_sample.cfg ${ZOOKEEPER_HOME}/conf/zoo.cfg

配置文件讲解

原文链接

tickTime=2000
tickTime:基本事件单元,单位为毫秒,发送心跳,获取信息,默认会话超时时间为该时间的两倍
initLimit=10
zookeeper集群中leader连接到follower最大次数,如果超过最大超时则连接超时,即超时时间为10*2000=20秒
syncLimit=5
syncLimit leader与follower之间发送信息是请求和应答的连接次数,超过为超时,时间为5*2=10秒
dataDir=/usr/local/zookeeper/data
dataDir 数据存放路径
dataLogDir=/usr/local/zookeeper/logs #日志存放路径
clientPort=2181 #l连接端口
其他配置(只用过部分)
globalOutstandingLimit
所在服务器所有没有响应请求的连接个数,默认为1000
preAllocSize
预先分配额定空间用于后续transactionlog 写入,默认64M,当剩余空间小于4K时会再分配64M。
snapCount
默认100,000,没怎么明白干啥的
traceFile
不太明白干啥的
maxClientCnxns
客户端同时连接服务器的最大连接数,默认为10,0表示没有限制。限制防止DoS攻击。
clientPortAddress
指定client的地址,没有设置允许所有IP连接,指定了只允许指定IP连接
minSessionTimeout
最小session timeout时间,默认为2个ticktime,以leader端为准
maxSessionTimeout
最大session timeout时间,默认为20个ticktime,以leader端为准

集群参数配置

electionAlg
领导选举算法,默认是3(fast leader election,基于tcp)使用默认即可
initLimit
设置
tickTime的个数,表示在leader选举结束后,followers与leader同步数据需要的时间,当需要同步数据较多时,应将此值设置大点,同步完成后再调小
syncLimit
tickTime的个数,表示follower和observer与leader交互时的最大等待时间,同步完毕之后,进行交互的超时时间。
leaderServes
如果该值不是no,则表示该服务器作为leader时是需要接受客户端连接的。为了获得更高吞吐量,当服务器数三台以上时一般建议设置为no。
cnxTimeout
默认值是5000,单位ms 表示leaderelection时打开连接的超时时间,只用在算法3中。

单节点zoo.cfg配置文件

cat > /usr/local/zookeeper/conf/zoo.cfg << EOF tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 EOF

echo '1' >/usr/local/zookeeper/data/myid

添加用户 useradd hadoop -s /sbin/nologin chown -R hadoop.hadoop /usr/local/zookeeper/

常用命令

启动 zkServer.sh start 停止 zkServer.sh stop 重启 zkServer.sh restart 查看状态 zkServer.sh status 连接 zkCli.sh -server IP:PORT

客户端常用命令

help 帮助信息 quit 退出 ls / 查看当前zookeeper中的内容 ls2 / 查看当前节点数据,能够看到更新次数等 create /zk "test" 创建一个新的znode节点zk,关联字符串为test delete /zk 删除znode节点zk

zookeeper集群配置(3节点)

节点一、

前提:各节点之间无秘互通,时间同步,安装java环境

删除老的 find /usr/local -maxdepth 1 -type d -name "zookeeper*" -exec rm -rf ; find /tmp -maxdepth 1 -type f -name "zookeeper*" -exec rm ; 下载安装包 cd /tmp wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz 解压 filename=find /tmp -maxdepth 1 -type f -name "zookeeper*" tar axf ${filename} -C /usr/local 创建软链接 basedir=find /usr/local -maxdepth 1 -type d -name "zookeeper*" ln -s ${basedir} /usr/local/zookeeper 创建文件目录 mkdir -p /usr/local/zookeeper/{data,logs} 设置环境变量 cat >> /etc/profile << EOF export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin EOF

cat > /usr/local/zookeeper/conf/zoo.cfg << EOF tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 server.1=host1:2887:3887 server.2=host2:2887:3887 server.3=host3:2887:3887 EOF 注意修改上面的host改为相应的ip或者在hosts文件中做域名解析 echo '1' >/usr/local/zookeeper/data/myid 添加用户 useradd hadoop -s /sbin/nologin chown -R hadoop.hadoop /usr/local/zookeeper/ 将文件复制到其他节点 scp -r /usr/local/zookeeper host2:/usr/local scp -r /usr/local/zookeeper host3:/usr/local

节点二

设置环境变量 cat >> /etc/profile << EOF export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin EOF source /etc/profile 添加用户 useradd hadoop -s /sbin/nologin chown -R hadoop.hadoop /usr/local/zookeeper/ 节点ID echo '2' >/usr/local/zookeeper/data/myid

节点三

设置环境变量 cat >> /etc/profile << EOF export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin EOF source /etc/profile 添加用户 useradd hadoop -s /sbin/nologin chown -R hadoop.hadoop /usr/local/zookeeper/ 节点ID echo '3' >/usr/local/zookeeper/data/myid

启动集群 在每个节点上运行 zkServer.sh start 查看状态 zkServer.sh status

异常处理

首先检查防火墙,看有没有拦截
再看myid文件有没有冲突