下载安装包:(hadoop/hadoop)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 该路径下寻对应版本
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
Zookeeper集群角色规划
主机 | IP | zookeeper 服务之间通信的端口 | zookeeper 与其他应用程序通信的端口 |
centoshadoop1 | 192.168.227.128 | 2888 | 2888+1000 |
centoshadoop2 | 192.168.227.129 | 2888 | 2888+1000 |
centoshadoop3 | 192.168.227.130 | 2888 | 2888+1000 |
mkdir -p /home/hadoop/zookeeper
mkdir -p /home/hadoop/zookeeper/data
mkdir -p /home/hadoop/zookeeper/data/logs
tar zxvf zookeeper-3.4.14.tar.gz -C /home/hadoop/zookeeper
cd /home/hadoop/zookeeper/zookeeper-3.4.14/conf
修改配置文件zoo.cfg
cp zoo_sample.cfg zoo.cfg
先把dataDir=/tmp/zookeeper注释,然后将下面四行代码添加到文件末尾
vi zoo.cfg
dataDirLog=/home/hadoop/zookeeper/data/logs/
dataDir=/home/hadoop/zookeeper/data
server.1=centoshadoop1:2888:3888
server.2=centoshadoop2:2888:3888
server.3=centoshadoop2:2888:3888
分发节点一centoshadoop1上配置完成的zookeeper文件到其他机器(各机器免密登录)
scp -r zookeeper/ hadoop@centoshadoop2:~
scp -r zookeeper/ hadoop@centoshadoop3:~
在centoshadoop1,centoshadoop2,centoshadoop3节点执行,下面写入配置
cd ../../data
touch myid
echo 1 >> myid
cat myid
=============================centoshadoop2==========================
cd ../../data
touch myid
echo 2 >> myid
cat myid
=============================centoshadoop3===========================
cd ../../data
touch myid
echo 3 >> myid
cat myid
各台主机上配置主机名与IP映射关系
vi /etc/hosts
192.168.227.128 centoshadoop1
192.168.227.129 centoshadoop2
192.168.227.130 centoshadoop3
三台机器上分别执行:
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanen
重启防火墙
firewall-cmd --reload
=========centoshadoop1,centoshadoop2,centoshadoop3制作开机启动脚本=========================
vi /usr/lib/systemd/system/zookeeper.service
#文件内容
[Unit]
Description=Zookeeper Server
After=network.target
[Service]
Type=forking
Environment=ZOO_LOG_DIR=/home/hadoop/zookeeper/data/logs/
Environment=JAVA_HOME=/home/hadoop/java/jdk1.8.0_192
ExecStart=/home/hadoop/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
ExecStop=/home/hadoop/zookeeper/zookeeper-3.4.14/bin/zkServer.sh stop
Restart=always
#User=zookeeper
#Group=zookeeper
[Install]
WantedBy=multi-user.target
先前安装时,没有配置这个使用systemctl start zookeeper 一直没有启动,最后发现该处有问题
Environment=JAVA_HOME=/home/hadoop/java/jdk1.8.0_192/
开机启动
systemctl enable zookeeper
重新加载信息
systemctl daemon-reload
启动zookeeper:systemctl start zookeeper.service
关掉zookeeper:systemctl stop zookeeper.service
查看进程状态及日志:systemctl status zookeeper.service
开机自启动:systemctl enable zookeeper.service
关闭自启动:systemctl disable zookeeper.service
firewall-cmd --zone=public --list-ports 查看已经打开的防火墙
chown -R hadoop:hadoop zookeeper-3.4.14
递归地修改zookeeper-3.4.14目录及子目录或者文件为hadoop用户及hadoop组
netstat -apn | grep 2181 查看每个端口是否处于使用状态
cd /home/hadoop/zookeeper/zookeeper-3.4.14/bin
在bin目录下查看客户端连接集群
./zkCli.sh -server 192.168.227.128:2181, 192.168.227.129:2181, 192.168.227.130:2181
查看集群中的某台集群是否为主或者从节点
[root@node-3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/zookeeper/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
注意:当不在该文件中/usr/lib/systemd/system/zookeeper.service添加下面hadoop用户及hadoop组的配置时,生成的日志为root账号及root组
/usr/lib/systemd/system/目录下的启动一般需要root权限,所以root开机启动后,生成的动态日志为
/home/hadoop/zookeeper/data/logs/zookeeper.out, 日志为root账号及root用户组,
所以zookeeper账号与zookeeper组不能执行直接这些systemctl start|stop| zookeeper命令,
此时,只能通过sudo获得root权限, 具体设置如下:
方案一:
给hadoop账户添加sudo权限:
在root下:
chmod u+w /etc/sudoers
vi /etc/sudoers
在 root ALL=(ALL) ALL下添加一行:
hadoop ALL=(ALL) ALL //添加sudo授权
这时hadoop账号操作zookeeper的命令如下:
sudo systemctl stop zookeeper 只需要输入hadoop的密码
sudo systemctl start zookeeper 不需要输入密码
sudo systemctl status zookeeper 不需要输入密码
注意:需要在如下配置文件中添加获得root权限的用户及组
vi /usr/lib/systemd/system/zookeeper.service
User=hadoop
Group=hadoop
方案二: 参考下面的博客
https://blog.youkuaiyun.com/wjy1990831/article/details/87256382