注意:Zookeeper的运行需要java环境,得安装JDK。ZooKeeper服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致;
前奏:
JDK安装
tar -zxvf jdk-7u45-linux-x64.tar.gz -C apps/ 解压到根目录的apps文件夹
vi /etc/profile 修改环境变量
在文件最后添加
export JAVA_HOME=/apps/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile 重新加载环境变量
java 运行
与时间服务器上的时间同步的方法:
1. 安装ntpdate工具
# yum -y install ntp ntpdate
2. 设置系统时间与网络时间同步
# ntpdate cn.pool.ntp.org
3. 将系统时间写入硬件时间
# hwclock --systohc
以下开始搭建:
下载地址:http://pan.baidu.com/s/1qWyoFhU
(2)随便选择其中一个系统,解压ZooKeeper安装包,并将解压后的文件夹名称改为zookeeper:
# tar -zvxf zookeeper-3.4.5.tar.gz -C /usr/local
# mv zookeeper-3.4.5 zookeeper (改名是为了直观、方便)
(3)修改环境变量:vi /etc/profile
最后增加一行:export ZOOKEEPER_HOME=/usr/local/zookeeper
最后增加修改PATH:export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
使配置生效:# source /etc/profile
(4)进入zookeeper的conf目录下,修改文件名:#mv zoo_sample.cfg zoo.cfg
(5)编辑zoo.cfg:#vi zoo.cfg
修改dataDir=/usr/local/zookeeper/data
新增server.0=zeromini1:2888:3888
server.1=zeromini2:2888:3888
server.2=zeromini3:2888:3888
(Tip:zeromini 2,3是自己三台的主机名,也可以非主机名但要与hosts匹配)
之后需要写入hosts文件比如:
# vi /etc/hosts
最后添加
192.168.2.233 zeromini1
192.168.2.159 zeromini2
192.168.2.120 zeromini3
使服务器可以找到对应的ip地址
(6)创建data文件夹,并在data文件夹下创建myid文件:
新建data文件夹:# mkdir /usr/local/zookeeper/data
新建myid文件:# vi myid,并设置第一台server为0,即只写入一个0 保存。
(7)复制zookeeper目录至其余两台服务器中:
# scp -r /usr/local/zookeeper zeromini2:/usr/local/
# scp -r /usr/local/zookeeper zeromini3:/usr/local/
(8)复制环境变量配置文件至其余两台服务器中:
# scp /etc/profile zeromini2:/etc
# scp /etc/profile zeromini23:/etc
(说明,在复制文件夹是应加 -r 命令,profile是配置文件而非文件夹所以不用加-r)
在这两台服务器中分别执行source /etc/profile 使环境变量生效
(9)在其余两台服务器中修改myid文件:写入1和2;
(10)启动ZooKeeper,分别在三个节点中执行命令:# zkServer.sh start
可看到以下信息:
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
表示服务启动
(11)检验ZooKeeper集群节点角色状态,分别在三个节点中执行命令:# zkServer.sh status
可看到投票选master、follower结果。显示如下信息:
(这台服务器则为领导者leader
这台服务器显示follower则为跟随者)
此时集群环境搭建完成。可先进行一致性测试。这里就不再进行测试了。
1、jps(查看进程)
2、zkServer.sh status(查看集群状态,主从信息)
关闭服务:zkServer.sh stop或
kill -9 1543 (1536为jps查看进程中QuorumPeerMain前面的数字)
每台服务器在启动的时候都要输入密码,下面介绍通过写shell脚本让其他服务器全部启动,并建立免密登入,摆脱多次输入密码的麻烦。
用zeromini ssh命令远程开启zeromini3的命令:
[root@zeromini ~]# ssh zeromini3 "source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start"
因此可以写成一个shell脚本,自动开启所有zkServer.sh,如下:
[root@zeromini1 ~]# vi startzk.sh 这里脚本就放在用户目录下了,也可以放在其他地方,配置下环境变量
#!/sh
echo "start zkserver...."
for i in 1 2 3
do
ssh zeromini$i "source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start"
done
结束,保存startzk.sh脚本。。
[root@zeromini1 ~]# chmod +x startzk.sh
搭建ssh免密登入:
[root@zeromini1 ~]# ssh-keygen
输入如图三个命令,只需输入一次密码,配置完成。下面执行startzk.sh脚本,启动zeromini2,zeromini3服务器:
[root@zeromini1 ~]# startzk.sh
zeromini1,zeromini2,zeromini3的zkServer.sh已执行启动
(ps:上图可能不是同一次启动zookeeper的截图)
这样就可以一次性启动所有的服务器上的zookeeper了,而且不用再输入密码,爽歪歪!