0、安装前环境准备
① 本篇是基于Linux操作系统中的安装,本文中所有的操作基于CentOS8进行安装演示。这一次的搭建演示,会在4台独立的服务器上分别搭建4台Zookeeper服务,故先准备4台干净的Linux操作系统;
② Zookeeper是基于Java语言开发的,请确保Linux系统中已经安装好JDK8并配置好环境变量。准备[wget],用于下载Zookeeper软件。如果没有安装,可以使用[yum install wget -y]进行安装;
③ 接下来的演示文本中,红色字体为操作步骤,黑色字体为解释说明。
1、进入到本地Zookeeper目录,从官网下载Zookeeper压缩包到本地
cd /usr/local/
mkdir source
cd source/
注:因为本人习惯将下载的源码压缩包存在在本地 /usr/local/source/ 文件夹中,这边以此作为示范,具体的存放路径根据个人习惯各自存放即可。
2、将下载好的压缩包解压到软件安装目录下
mkdir /opt/feenix/
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /opt/feenix/
3、进入解压后的文件夹中,阅读 README.md 中的内容
cd /opt/feenix/apache-zookeeper-3.7.0-bin/
vim README.md
注:基本Linux系统的软件使用源码安装基本都是一个套路:源码安装上来看的第一个文件就是README。所以,README.md 文件是一个非常非常重要的文件。当你第一次面对一个从来没用安装过的软件时,去读它提供的类 README 文件,在这个文件中会详细描述当前软件的安装步骤,排错过程及各参数的详细意义,一定要仔细研读后再进行软件的安装!
4、准备Zookeeper启动服务配置文件
进入 conf/ 目录下,将提供的 zoo_sample.cfg 配置文件复制一份成为Zookeeper默认使用的配置文件 zoo.cfg,并进行修改
cd conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
在配置文件中需要手动的指定Zookeeper集群中的4台节点
server.1=192.168.168.129:2888:3888
server.2=192.168.168.130:2888:3888
server.3=192.168.168.131:2888:3888
server.4=192.168.168.132:2888:3888
之前在Redis集群中Sentinel可以通过发布订阅自己去发现主机有哪些从机跟随,而不需要手动指定;但是在Zookeeper集群中,需要显示的指定出集群中所有的节点。
在Zookeeper服务首次启动的时候,或者是集群中leader宕机以后,总而言之就是集群中没有leader的时候,这些Zookeeper节点之间通过3888端口相互连接通信去投票选出新的leader。当新的leader选举出来以后,其余节点和leader之间通过2888端口进行连接通信。
server.1/2/3/4这些数字存在的意义就是能够在最短的时间内谦让出新的leader。根据zoo keeper的官网指出,选一个新的leader只需要不到200毫秒的时间,那么为什么能够在这么短的时间内选出leader,那判断投票给谁也是要有时间的呀。所以为了在最短的时间内选出新的leader,采用的方案就很简单粗暴,理论上看谁的数字大就投票给谁(当然这么说其实不够严谨,因为在投票的过程中还有一个非常重要的因素是事务id,这里为了解释这些数字的意义,姑且先这么理解)。所以基于这个方案,待会儿演示启动集群的时候,理论上应该server.4是leader,对吧?其实这也要结合启动的顺序和过半通过的算法:也就是说如果先启动3再启动4,那么3就是leader;如果先启动4再启动3,那么4才是leader。
其余参数含义如下:
tickTime=2000 每2s进行一次心跳检查。
initLimit=10 当有一个follow跟随master的时候,master最长可以忍耐 (tickTime * initLimit)这么久的数据初始化时间。
syncLimit=5 当leader向follow进行数据同步的时候,如果(tickTime * initLimit)这么长时间没有向leader进行回馈, leader会认为这个follower有问题
dataDir=/var/lib/zookeeper Zookeeper数据持久化目录,日志、快照以及myid文件都会存在这个目录中。
clientPort=2181 Zookeeper默认端口号。
maxClientCnxns=60 最大客户端连接数,Zookeeper默认最多60个客户端连接。
5、建立Zookeeper数据存放目录及myid文件
根据配置文件中的路径建立Zookeeper数据存放目录:
mkdir /var/lib/zookeeper
进入到数据存放目录创建myid文件:
cd /var/lib/zookeeper/
vim myid
刚刚在配置文件中指定server.1=node1,所以所以这个myid文件中只需要写一个数字1即可。
6、将Zookeeper相关文件分发到其余3台服务器上
cd /opt/
scp -r ./feenix/ root@192.168.168.130:`pwd`
这样就将整个文件夹里所有的文件全部拷贝到这台服务器上,配置文件不用改,但是需要将刚刚创建的myid文件,在这台服务器上创建一下,并且数字要改为2。
mkdir /var/lib/zookeeper
cd /var/lib/zookeeper/
echo 2 > /var/lib/zookeeper/myid
相同的操作在第3台和第4代服务器上重复一遍即可。
7、配置Zookeeper环境变量
vim /etc/profile
export ZOOKEEPER_HOME=/opt/feenix/apache-zookeeper-3.7.0-bin
export PATH=$PATH:${JAVA_PATH}:${ZOOKEEPER_HOME}/bin
source /etc/profile
这样在任何地方都可以使用Zookeeper相关的命令。
对其余3台服务器也进行相同的环境变量配置,或者可以使用 scp 将刚刚配置好的配置文件分发给其余3台服务器。
scp /etc/profile root@192.168.168.130:/etc
scp /etc/profile root@192.168.168.131:/etc
scp /etc/profile root@192.168.168.132:/etc
分发完以后不要忘记在其余3台服务器执行 source /etc/profile 重加载环境变量配置文件。
8、启动Zookeeper服务
通过命令 zkServer.sh help 看看Zookeeper有哪些启动方式
Zookeeper默认是后台启动,通过参数 start-foreground 可以在前台阻塞启动
执行 zkServer.sh start-foreground 命令先启动server.1、server.2和server.3
3台实例都启动完之后,执行命令 zkServer.sh status 查看leader和follower状态
server.1:
server.2:
server.3:
只要有三台机器建立连接以后,已经可以执行过半投票了,所以此时即便没有启动第4台Zookeeper实例,前3台之间照样能够选出来一个leader和两个follower。
此时再去启动第4台机器,因为前3台已经有主了,所以第4台加进来是一个follower而不是leader。
server.4
那么如果此时server.3这个leader宕机了,谁是新的leader呢?按照我们上面所说的理论,leader应该是server.4,看下是不是:
server.1:
server.2:
server.4:
确实是server.4接替了server.3,成为了新的leader,从server.4前台打印出来的日志也可以看到这一点:
在失去了和server.3的连接以后,server.4立马成为新的leader,这个切换的过程非常的快,也确实达到了官方所宣称的用户无感知的。好了,Zookeeper的安装到此为止,后面几篇我会更加详细地讲解Zookeeper的应用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111943.html