Zookeeper集群搭建
1、Zookeeper 集群模式一共有三种类型的角色:
Leader: 处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个Leader
Follower:只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。
Observer:只能处理读请求。不能参与选举
2、Zookeeper集群模式部署
1)基础配置
1、准备三台虚拟机,root密码 root ;IP地址:
192.168.xxx.xxx worker1
192.168.xxx.xxx worker2
192.168.xxx.xxx worker3
并在对应的机器的/etc/hosts文件中设置对应的ip和机器名映射\
2、每台机器上创建用户mq并设置密码
useradd zk
passwd zk 密码输入:Anji@1024
3、系统配置
1)免密登录,切换zk用户,在worker1、worker2、worker3上分别生成密钥:
su zk
ssh-keygen
2)同步公钥到其他服务器
ssh-copy-id worker1
ssh-copy-id worker2
ssh-copy-id worker3
3) 通过命令验证免密登录配置是否成功
ssh worker1
ssh worker2
ssh worker2
4、在三台机器上分别配置JAVA环境
1)上传jdk8的tar包并解压到/app/jdk1.8目录
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171/ /app/jdk1.8
2)配置环境变量。使用 vi ~/.bash_profile编辑文件,添加一下配置,并使用source ~/.bash_profile使环境变量生效,输入java -version查看是否配置成功
export JAVA_HOME=/app/jdk1.8/
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH
2)搭建四节点zookeeper集群,其中一个Leader节点、两个Follower节点、一个Observer节点。具体搭建步骤如下:
1、在三台机器上分别上传zookeeper到/app目录,并解压zookeeper
su zk
cd /app
tar ‐zxvf apache-zookeeper-3.6.2‐bin.tar.gz
cd /app/apache-zookeeper-3.6.2-bin
2、在三台加上分别重命名zoo_sample.cfg文件修改配置文件原配置文件里有的,修改成下面的值,没有的则加上(对应的其他机器上的)
worker1:cp conf/zoo_sample.cfg conf/zoo-1.cfg
worker2:cp conf/zoo_sample.cfg conf/zoo-2.cfg
worker3:cp conf/zoo_sample.cfg conf/zoo-3.cfg
worker3:cp conf/zoo_sample.cfg conf/zoo-4.cfg
3、分别在三台机器上创建dataDir
cd /usr/local/data
worker1:mkdir zookeeper-1
worker2:mkdir zookeeper-2
worker3:mkdir zookeeper-3
worker3:mkdir zookeeper-4
4、分别在三台机器上创建对应的myid文件,写入当前实例的server id,即1,2,3,4
worker1:cd /usr/local/data/zookeeper-1
vi myid
worker2:cd /usr/local/data/zookeeper-1
vi myid
worker3:cd /usr/local/data/zookeeper-1
vi myid
cd /usr/local/data/zookeeper-1
vi myid
5、修改配置文件原配置文件里有的,修改成下面的值,没有的则加上(对应的其他机器上的类似)
worker1:cd /app/apache-zookeeper-3.6.2-bin/conf
vi zoo-1.cfg
修改配置如下
dataDir=/usr/local/data/zookeeper-1(各台机器上各个节点各不相同)
clientPort=2181(各台机器上各个节点各不相同)
//对应的server需要配置在每一个配置文件中
server.1=192.168.xxx.xxx:2001:3001:participant// participant 可以不用写,默认就是participant
server.2=192.168.xxx.xxx:2002:3002:participant
server.3=192.168.xxx.xxx:2003:3003:participant
server.4=192.168.xxx.xxx:2004:3004:observer
worker2:cd /app/apache-zookeeper-3.6.2-bin/conf
vi zoo-2.cfg
修改配置如下
dataDir=/usr/local/data/zookeeper-2(各台机器上各个节点各不相同)
clientPort=2182(各台机器上各个节点各不相同)
//对应的server需要配置在每一个配置文件中
server.1=192.168.xxx.xxx:2001:3001:participant// participant 可以不用写,默认就是participant
server.2=192.168.xxx.xxx:2002:3002:participant
server.3=192.168.xxx.xxx:2003:3003:participant
server.4=192.168.xxx.xxx:2004:3004:observer
worker3:cd /app/apache-zookeeper-3.6.2-bin/conf
vi zoo-3.cfg
修改配置如下
dataDir=/usr/local/data/zookeeper-3(各台机器上各个节点各不相同)
clientPort=2183(各台机器上各个节点各不相同)
//对应的server需要配置在每一个配置文件中
server.1=192.168.xxx.xxx:2001:3001:participant// participant 可以不用写,默认就是participant
server.2=192.168.xxx.xxx:2002:3002:participant
server.3=192.168.xxx.xxx:2003:3003:participant
server.4=192.168.xxx.xxx:2004:3004:observer
worker3:cd /app/apache-zookeeper-3.6.2-bin/conf
vi zoo-4.cfg
修改配置如下
dataDir=/usr/local/data/zookeeper-4(各台机器上各个节点各不相同)
clientPort=2184(各台机器上各个节点各不相同)
//对应的server需要配置在每一个配置文件中
server.1=192.168.xxx.xxx:2001:3001:participant// participant 可以不用写,默认就是participant
server.2=192.168.xxx.xxx:2002:3002:participant
server.3=192.168.xxx.xxx:2003:3003:participant
server.4=192.168.xxx.xxx:2004:3004:observer
配置说明
tickTime:用于配置Zookeeper中最小时间单位的长度,很多运行时的时间间隔都是
使用tickTime的倍数来表示的。
initLimit:该参数用于配置Leader服务器等待Follower启动,并完成数据同步的时
间。Follower服务器再启动过程中,会与Leader建立连接并完成数据的同步,从而确定自
己对外提供服务的起始状态。Leader服务器允许Follower再initLimit 时间内完成这个工
作。
syncLimit:Leader 与Follower心跳检测的最大延时时间
dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将
写数据的日志文件也保存在这个目录里。
clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监
听这个端口,接受客户端的访问请求。
server.A=B:C:D:E 其中 A 是一个数字,表示这个是第几号服务器;B 是这个服
务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D
表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新
的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配
置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给
它们分配不同的端口号。如果需要通过添加不参与集群选举以及事务请求的过半机制的
Observer节点,可以在E的位置,添加observer标识。
6、启动四个zookeeper实例
worker1:bin/zkServer.sh start conf/zoo1.cfg
worker2:bin/zkServer.sh start conf/zoo2.cfg
worker3:bin/zkServer.sh start conf/zoo3.cfg
worker3:bin/zkServer.sh start conf/zoo4.cfg
7、检测集群状态
1)zkServer.sh status conf/zoo1.cfg
2)bin/zkCli.sh ‐server ip1:port1,ip2:port2,ip3:port3