Zookeeper集群的角色: Leader 和 follower (Observer)
zk集群最好配成奇数个节点
只要集群中有半数以上节点存活,集群就能提供服务
1/ 安装到3台虚拟机上,准备的三台服务器地址是:
C:\Windows\System32\drivers\etc\hosts中配置的内容如下:
192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 |
如果想同时能够操作三台服务器,可以进行如下配置:
2/ 安装好JDK
3/ 上传安装包。上传用工具。
4/ 解压
su - hadoop(切换到hadoop用户),如果直接是root用户则不需要这样切换
tar -zxvf zookeeper-3.4.5.tar.gz(解压)
5/ 重命名
mv zookeeper-3.4.5 zookeeper(重命名文件夹zookeeper-3.4.5为zookeeper)
可以删除里面一些源码工程相关的文件,剩下的是这些:
(注意:3台zookeeper都需要修改)
1/ su – root(切换用户到root)
2/ vi /etc/profile(修改文件)
3/ 添加内容:
export ZOOKEEPER_HOME=/home/hadoop/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
4/ 加载环境配置:
source /etc/profile
5/ 修改完成后切换回hadoop用户:
su - hadoop
1、用root用户操作
cd zookeeper/conf
cp zoo_sample.cfg zoo.cfg
2、vi zoo.cfg
3、添加内容:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/home/tuzq/software/zookeeper/zkdata dataLogDir=/home/tuzq/software/zookeeper/log # the port at which the clients will connect clientPort=2181 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.1= hadoop:2888:3888 server.2= hadoop2:2888:3888 server.3= hadoop3:2888:3888
参数说明: tickTime:zookeeper中使用的基本时间单位, 毫秒值. initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower。 initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s. syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms. dataDir: 数据存放目录. 可以是任意目录.但是我喜欢这么干 dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置 clientPort: 监听client连接的端口号. server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同. |
4、创建文件夹:
cd /home/tuzq/software/zookeeper/
mkdir zkdata
mkdir -m 755 log
5、在data文件夹下新建myid文件,myid的文件内容为:
cd zkdata
echo 1 > myid
scp -r /root/apps root@hadoop2:/root/
scp -r /root/apps root@hadoop3:/root/
1、修改myid文件
到hadoop2上:修改myid为:2
到hadoop3上:修改myid为:3
注:
1、事先将三台服务器的防火墙都关掉
2、全网统一hosts映射
先配好一台上的hosts
在hadoop机器中的hosts文件中做如下修改:
[root@hadoop zkdata]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 |
然后:
scp /etc/hosts hadoop2:/etc
scp /etc/hosts hadoop3:/etc
查看hadoop2中的hosts文件中的内容
[root@hadoop2 zkdata]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.106.80 hadoop 192.168.106.81 hadoop2 192.168.106.82 hadoop3 |
3、然后一台一台地启动
bin/zkServer.sh start
创建日志文件目录,如果没有这个日志文件将会报错
mkdir -p /home/tuzq/software/zookeeper/log
或者编写一个脚本来批量启动所有机器:
for host in " hadoop hadoop2 hadoop3"
do
ssh $host "source /etc/profile;/home/tuzq/software/zookeeper/bin/zkServer.shstart"
vim startupZK.sh
chmod +x startupZK.sh
#!/bin/bash for host in "hadoop hadoop2 hadoop3" do ssh $host "source /etc/profile;/home/tuzq/software/zookeeper/bin/zkServer.sh start" done |
1、jps(查看进程)
2、zkServer.sh status(查看集群状态,主从信息)
分别查看hadoop hadoop2 hadoop3这三台服务器上的zookeeper的状态