条件
有三台虚拟机,虚拟机上都有配置jdk1.8,虚拟机之间可以互相通过ssh访问
三台虚拟机的hosts 最后都有下面内容:
192.168.43.44 slave1 # 前面为虚拟机的ip地址,后面为虚拟机名,
192.168.43.45 slave2
192.168.43.46 slave3
三台虚拟机都配置有下面内容的环境变量 /etc/profile ,配置后通过source /etc/profile 生效
#JDK-1.8
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
#zookeeper-3.4.1
export ZK_HOME=/usr/local/zookeeper
export PATH=$ZK_HOME/bin:$PATH
关于三台虚拟机之间通过ssh互相传输数据的操作:
yum -y install openssh-server # 安装ssh
cd ~/.ssh # 没有则创建这个.ssh文件夹
ssh-keygen -t rsa # 生成密钥,输入后一直回车即可
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys # 添加授权
ssh localhost # 免密码登录
上面操作在每台虚拟机中都要执行,然后再执行下面命令:
# 下面操作在第一台虚拟中操作
cd ~/.ssh
vim authorized_keys # 复制其他两台虚拟机下面的 authorized_keys 中的内容粘贴到这个authorized_keys下
# 将该authorized_keys 通过scp 传到其他两台虚拟机的 .ssh 下
scp -r ~/.ssh/authorized_keys root@slave2:~/.ssh/
上面操作完后,三台虚拟机之间应该就可以互相传输数据了,也可以通过ssh 虚拟机名 登录其他虚拟机,通过exit退出
zookeeper3.4.1配置
下载zookeeper ,然后解压,重命名
wget https://apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
tar -zxvf zookeeper-3.4.1.3.tar.gz
mv zookeeper-3.4.1.3 zookeeper
进入到 zookeeper/conf
cp zoo_sample.cfg zoo.cfg
修改 zoo.cfg的内容如下,
其中dataDir是存放数据的路径,dataLogDir 是存放日志的路径,需要自己创建
下面的 server.X=A:B:C
X 代表服务器的编号,来判断你是第几台服务器
A-代表虚拟机的ip,填写你自己的虚拟机IP
B和C 代表端口,这个端口用来系统之间通信,
关于这两个端口的官方文档解释如下
根据谷歌翻译的意思大概如下
表单server.X的条目列出构成ZooKeeper服务的服务器。当服务器启动时,它通过在数据目录中查找文件myid来知道它是哪个服务器 。该文件包含服务器编号,ASCII格式。
最后,请注意每个服务器名称后面的两个端口号:“2888”和“3888”。对等体使用前端口连接到其他对等体。这样的连接是必要的,使得对等体可以进行通信,例如,以商定更新的顺序。更具体地说,一个ZooKeeper服务器使用这个端口来连接追随者到领导者。当新的领导者出现时,追随者使用此端口打开与领导者的TCP连接。因为默认领导选举也使用TCP,所以我们目前需要另外一个端口进行领导选举。这是服务器条目中的第二个端口。
218x:客户端(应用程序)连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端
288x:该服务器与集群中的 Leader 服务器交换信息的端口
388x:选举通信端口,如果集群中的 Leader 服务器挂了,需要选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口
B和C对应的端口都需要开启,没有开启的话通过下面命令开启,开启端口后,将防火墙关闭,不然会影响zookeeper 节点之间的通信
# centos7 开放端口,首先得打开防火墙:systemctl start firewalld.service
firewall-cmd --zone=public --add-port=2888/tcp --permanent
--zone #作用域
--add-port=2888/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效
设置需要重启防火墙生效
firewall-cmd --query-port=2888/tcp # 查看80端口是否打开,返回yes表示开启
根据dataDir进行X的配置
找到Zookeeper目录,新建data文件夹,并且在data文件夹下面创建一个文件,叫myid,并且在文件里写入server.X对应的X
我的第一台虚拟机 slave1的ip是 192.168.43.44,在zoo.cfg中对应X是 1 ,所以我在slave1的zookeeper目录下的data目录里创建的myid 内容是 1
这里我在第一台虚拟机中配置好zookeeper后,通过scp 将整个zookeeper目录复制到其他两台虚拟机上去
scp -r /usr/local/zookeeper root@slave2:/usr/local/
然后调用命令 zkServer.sh start 来启用zookeeper,三台虚拟机都需要开启,同时三台虚拟机的防火墙是关闭状态
出现 STARTED 则表示开启成功,
然后再通过 zkServer.sh status 来查看状态,leader,负责写服务和数据同步,而follower,提供读服务,
follower表示追随者,leader表示领导者,
当超过一半的zookeeper节点开启时,输入jps命令会出现QuorumPeerMain