搭建zookeeper伪集群

今天成功的启动了zookeeper伪集群,之前想搭建伪集群没有搭建成功,在此记录一下.
网上的有些博客属于是闭着眼睛抄,对不对自己都不试一下的.其实伪集群搭建很简单.

搭建Java运行环境

我是直接通过yum命令安装的Java8,比较尴尬的是虽然装完了,java -version也有正确的输出了,但是我不知道他给我装哪去了.
于是查了一下,which java (which 是查可执行文件的,whereis 是查文件的)
得到结果/usr/bin/java
看了一下,很明显这个是个软连接.使用ls -il 命令可以查看软连接指向哪里.
同时我们知道在linux系统中 | 相当于一个管道的作用,左边操作进行完了之后再进行右边的操作,
所以直接使用

ls -il | grep "java"

就可以看到指向了

/etc/alternatives/java

然后我们跟进去看,发现还是一个软连接,OK,再操作一次,得到结果.

java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/bin/java

那么我们就知道,java的安装路径是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre
改一下配置文件.(虽然这里不改的话 java-version是可以正常输出的,但是启动elasticsearch会报错,说找不到JAVA_HOME)

vi ~/.bash_profile

在下面添加两行

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre
export PATH=$PATH:$JAVA_HOME/bin

然后刷新一下配置文件

source ~/.bash_profile

Java环境搭建到此完成.

搭建zookeeper运行环境

首先,你要搭建伪集群,那么肯定需要复制三份zookeeper.网上有的博客居然说直接把zoo.cfg复制几份就好了,有没有操作过啊,这是习惯了在贴吧里灌水,导致现在没事就喜欢瞎搬别人的博客吗.看都不看,纯属制造垃圾.

  • 拷贝三份zookeeper
    这个没啥好说的,

cp -r zookeeper-3.5.5/ zookeeper-3.5.5-node2
mv zookeeper-3.5.5 zookeeper-3.5.5-node1

然后分别把端口号改一下,要不然会冲突的.我的端口号分别是2181 2182 2183
然后分别设置一下dataDir dataLogDir
然后这个复制到zoo.cfg里面

server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

server.A=B:C:D
A:其中 A 是一个数字,表示这个是服务器的编号;B:是这个服务器的 ip 地址;C:Leader选举的端口;D:Zookeeper服务器之间的通信端口。

这个是错的.还好我多看了两篇博客,另外一篇跟这一篇说的不一样,所以我到zookeeper的官网上去看了一下.
原文如下:

The entries of the form server.X list the servers that make up the ZooKeeper service. When the server starts up, it knows which server it is by looking for the file myid in the data directory. That file has the contains the server number, in ASCII.Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.

我们可以看到,server.1 server.2 server.3 里面的1 2 3 是对应着dataDir里面的myid文件中的数字的,通过这样的对应关系zookeeper才知道自己是谁.
所以myid也不能乱写,要对应上,这一点我看很多博客上也没有提及.

很明显,前面的这个端口是用来与其他节点通信的,用于同步数据之类的操作,更具体的说,zookeeper节点使用这个端口去建立followers与leader的连接.当一个新的leader产生之后,followers就会用这个端口与leader建立一个TCP连接.
由于默认的leader选举也要使用TCP连接,我们就需要另外一个端口来进行leader的选举,而这就是第二个端口的作用.

不要忘了分别在配置的dataDir里面建立一个myid的文件 写上不同的数字,我写的1 2 3
然后分别到三个zookeeper的bin目录下启动

./zkServer.sh start
./zkServer.sh status

29c738851ea9d3ea2362f6cefa2409d3.png29c738851ea9d3ea2362f6cefa2409d3.png
可以看到正常启动了,一个leader,两个follower

posted @ 2019-07-01 17:20  天糊十三幺  阅读(687)  评论(0编辑  收藏  举报