1. 服务器之间设置免密登录(目的:方便消息传输与管理)
将四台主机名分别修改为node0,node1,node2,node3(执行主机名修改命令hostnamectl set-hostname xxx,然后重启reboot),并搭建免密登录:
(1)首先在四台服务器上都要执行(由于四台服务器在该过程执行相同的操作,为了提高效率,可以在xshell的对话框,选择全部会话如图1所示,然后依次发送以下命令,四台服务器即可同时执行):
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cd /root/.ssh/ #使四台服务器处于同一目录

(2)在node0上将node0的公钥拷贝到authorized_keys中,并将该文件拷贝给node1:
cat id_dsa.pub >> authorized_keys #公钥拷贝
# 若没有执行cd /root/.ssh/ ,则可以使用:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
scp authorized_keys node1:/root/.ssh/ #远程拷贝到node1
(3)在node1中将node1的公钥追加到authorized_keys中,并将该文件拷贝给node2:
cat id_dsa.pub >> authorized_keys #公钥追加
scp authorized_keys node2:/root/.ssh/ #远程拷贝到node2
(4)在node2中将node2的公钥追加到authorized_keys中,并将该文件拷贝给node3:
cat id_dsa.pub >> authorized_keys #公钥追加
scp authorized_keys node3:/root/.ssh/ #远程拷贝到node3
(5)在node3中将node3的公钥追加到authorized_keys中,并将该文件拷贝给node0、node1、node3:
cat id_dsa.pub >> authorized_keys #公钥追加
scp authorized_keys node0:/root/.ssh/ #远程拷贝到node0
scp authorized_keys node1:/root/.ssh/ #远程拷贝到node1
scp authorized_keys node2:/root/.ssh/ #远程拷贝到node2
(6)验证免密登录:在各节点使用ssh命令,验证它们之间是否可以免密码登录,以node3上免密登录node2节点为例,可以看到在node3上执行ssh node2后,不用输入密码可以直接访问node2主机,如图2所示。

2.安装配置JDK
具体操作见集群环境安装配置jdk_qq_44821400的博客-优快云博客
3.zookeeper集群搭建
(1)通过WinSCP将zookeeper-3.4.9.tar.gz上传到node1的app目录下

(2)解压到/app/soft目录下
tar -zxf zookeeper-3.4.9.tar.gz -C /app/soft #解压
cd /app/soft/zookeeper-3.4.9 #进入解压文件目录
rm -rf docs/ #删除docs文件
cd conf/ #进入配置文件
ls #查看当前路径下的文件
cp zoo_sample.cfg zoo.cfg #将文件zoo_sample.cfg复制一份
vim zoo.cfg #编辑文件
(3)打开zoo.cfg文件,配置环境变量,修改后的文件为
# 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=/app/soft/zookeeper-3.4.9/data
#日志文件位置
dataLogDir=/var/rizhi/zookeeper/datalog
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# 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
#根据主机名设置,1,2,3为选举编号
server.1=node1:2881:3881
server.2=node2:2881:3881
server.3=node3:2881:3881
(4)创建/app/soft/zookeeper-3.4.9/data 目录,并在该目录下放一个文件:myid,在myid中写下当前zookeeper的编号,cat myid即可看到主机编号
cd ../ #返回zookeeper-3.4.9目录
mkdir /data #在该目录创建data文件夹
mkdir -p /var/rizhi/zookeeper/datalog #日志文件位置
echo 1 > /app/soft/zookeeper-3.4.9/data/myid #在myid文件中写入当前主机的选择编号1
(5)将配置好的zookeeper远程复制到node2和node3,同时相应修改myid的主机编号为2和3
scp -r zookeeper-3.4.9/ node2:/app/soft
scp -r zookeeper-3.4.9/ node3:/app/soft
(6)进入/app/soft/zookeeper-3.4.9目录,vim /etc/profile打开配置文件并加入如下修改配置文件,并source /etc/profile使配置文件生效
export ZOOKEEPER_HOME=/app/soft/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin #方法一,直接配置
#方法二:直接在java后追加export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
(7)启动
zkServer.sh start
zkServer.sh status
注:若zookeeper能够正常启动,但查看状态出现错误,可以进入/app/soft/zookeeper-3.4.9/bin/目录下,打开zookeeper.out文件查看报错信息,显示myid文件有问题,如图4所示。仔细核对信息并没有错,查看/app/soft/zookeeper-3.4.9/路径下的文件夹信息,发现有两个data文件夹如图5所示,而配置文件中由于路径后加了注释,系统默将注释部分也当成完整路径的一部分导致出错。
解决办法:将zoo.cfg路径后的注释删除


若执行上述操作依旧没有成功启动,可参考解决【已解决-最全分析】zookeeper启动后,zkServer.sh status报错:Error contacting service. It is probably not running_[quorumpeer[myid=1]/0:0:0:0:0:0:0:0:2181:quorumcnx_神是念着倒的博客-优快云博客
若三台服务器同时启动,启动成功会选举出leader与follower,如下图所示:
(8)通过zkCli.sh连接zookeeper,通过quit退出,若出现如下错误,可重新进行免密操作并重启