zookeeper集群搭建
一、环境准备
CentOS8、JDK11、zookeeper-3.7.1
关闭防火墙
zookeeper官网地址:https://zookeeper.apache.org/
[root@localhost ~]# systemctl stop firewalld //停止firewalld防火墙
[root@localhost ~]# systemctl disable firewalld //disable防火墙,让它开机不自启
[root@localhost ~]# systemctl status firewalld //查看firewalld是否已经关闭(active(running))显示防火墙处于激活状态(inactive(dead))防火墙进程处于未激活状态
二、下载zookeeper
1.访问zookeeper官方网站 zookeeper官网
2.找到快速开始中的 Dewonload选择Apache ZooKeeper 3.7.1(asc, sha512)进行下载
注意要下载3.7.1-bin.tar.gz下载,3.7.1.tar.gz需要编译才能启动
三、解压zookeeper压缩包
将下载的安装包上传至/data目录
cd /data
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz
四、创建数据文件存储路径(集群节点全部配置)
4.1.创建路径
cd/data/zookeeper #进入zookeeper解压根路径
mkdir data #创建存放数据的目录
4.2.创建myid文件
cd /data/zookeeper/data
touch myid
echo 1 > myid
1、myid文件内的数字必须与zoo.cfg中集群配置server.[value]=192.168.109.143:2888:3888的value一致
2、集群中其他几台机器配置myid按照各自的IP对应的server.[value]=192.168.109.143:2888:3888的value配置保持一致
3、此处的值与集群节点之间选主有关系值越大越有可能成为leader
五、配置zoo.cfg文件(集群节点全部配置)
zoo.cfg中集群key中server.[value]=192.168.109.143:2888:3888的value必须与步骤四4.2中创建的myid文件的内容(数字)一致
cd /data/zookeeper/conf
cp ./zoo_sample.cfg ./zoo.cfg #复制样例配置文件 命名为zoo.cfg
vim ./zoo.cfg
# leader和follower之间心跳检测时间
tickTime=2000
# 初始化连接次数是10次,和第一个配置连在一起意思就是10*2000 20秒之内还没连接成功,说明follower是有故障的
initLimit=10
# leader下发给follower同步数据次数,5次重试机会,超过5次则表示认为follower存在故障
# leader下发给follower同步数据时间结合tickTime=2000*5=10000毫秒
syncLimit=5
# 数据持久化目录,此处的路径就是步骤4.1中创建的
dataDir=/data/apache-zookeeper-3.7.1-bin/data
# 客户端连接zookeeper服务使用的端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
# 端口号3888:若leader挂了之后,此时没有leader,各个follower通过这个端口进行通信进行投票选出新的leader。
# 端口号2888:leader启动2888端口供follower连接,主要用于follower与leader之间进行通信使用。
#autopurge.purgeInterval=1
server.1=192.168.109.140:2888:3888
server.2=192.168.109.141:2888:3888
server.3=192.168.109.142:2888:3888
server.4=192.168.109.143:2888:3888
六、配置环境变量(集群节点全部配置)
vim /etc/profile
JAVA_HOME=/data/jdk-11.0.16.1 #配置jdk解压跟目录
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib
ZOOKEEPER_HOME=/data/apache-zookeeper-3.7.1-bin/
export JAVA_HOME PATH CLASSPATH
export PATH=$PATH:$ZOOKEEPER_HOME/bin #配置zookeeper执行文件路径
source /etc/profile #刷新配置
七、启动zookeeper(集群节点全部启动)
cd /data/zookeeper/bin
./zkServer.sh start ../conf/zoo.cfg #启动
#集群节点全部启动后查看状态(观察主从节点)
./zkServer.sh status ../conf/zoo.cfg
如果启动不成功使用如下命令前台阻塞形式启动按照异常情况解决
./bin/zkServer.sh start-foreground
八、客户端测试zookeeper
进入客户端1
cd /data/zookeeper/bin
./zkCli.sh #进入客户端
create /test1 testvalue1 #创建节点 且插入数据
get /test1 #查看节点数据结果是否为testvalue1
进入客户端2、3…连接集群中其他节点查看信息是否一致
cd /data/zookeeper/bin
./zkCli.sh #进入客户端
get /test1 #查看结果是否为testvalue1
九、测试zookeeper集群选主
.。。。。。。。
./zkServer.sh start ../conf/zoo.cfg #启动
./zkServer.sh status ../conf/zoo.cfg
结论:
1、3个节点的集群,从服务器挂掉,集群正常
2、节点之间选主与myid的值有关
3、3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数
4、当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader
5、当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者