zookeeper入门到精通03——zookeeper集群搭建

3.1 多虚拟机环境搭建

我们需要搭建zookeeper集群,而由于zookeeper的的服务器数量需要设置为单数(前文介绍了原因),一个zookeeper集群至少需要三个zookeeper服务,因此我们需要搭建三台虚拟主机。

(1)将之前的虚拟机重命名为zookeeper01。

(2)进行网络配置

vi /etc/sysconfig/network-scripts/ifcfg-eth0

再增加

VMWARE左上角点击编辑查看虚拟网络配置

image-20220403133256596

image-20220403133916402

对应在在后面追加文件ifcfg-eth0中追加

image-20220403152821338

对以上修改说明如下:

BOOTPROTO:网卡获得ip地址的方式,这里设置成为static静态获取指定的ip地址。该参数还可以设置成为dhcp和pootp,分别对应两种协议方式获取ip地址。

HARDDR:网卡的物理地址。删除它避免后续克隆虚拟机时出现多台虚拟机的网卡物理地址相同,从而导致网络故障。

ONBOOT:是否在系统启动时激活网卡。

UUID:唯一标识。与网卡地址一样,删除避免网络故障。

IPADDR:IP地址

192.168.106.0:表示NAT模式下的一个网络号。不可用。
192.168.106.1:表示IPv4地址。不可用。
192.168.106.2:表示网关。不可用。
192.168.106.255:表示NET模式下的广播地址。不可用。
所以IPADDR地址范围:192.168.106.3 到 192.168.106.254均可以配置。

NETMASK:子网掩码
GATEWAY:网关
DNS:域名解析地址,*为1,2,3,4…,有多个就配置多个,这里配置了两个。

(3)重启网络服务,使其生效

service network restart

(4)测试网络配置是否成功

ping www.baidu.com

image-20220403135322618

如上图,配置成功了。

(5)如下图进行克隆,创建虚拟机zookeeper02、zookeeper03。

image-20220329192455535

image-20220329192847332

克隆完成的虚拟机配置与之前的完全一致,我们需要更改网络配置中的IPADDR,使他们各不相同。

删除网卡地址的对应文件,使其重新生成网卡地址。

rm /etc/udev/rules.d/70-persistent-net.rules

重启虚拟机,进行ping www.baidu.com测试。

笔者在开启多台虚拟机时发现电脑自动蓝屏重启了。如您遇到类似问题可以参考博客:关于多开几台虚拟机就蓝屏重启的解决方案_时空之魔的博客-CSDN博客_虚拟机多开蓝屏解决。

3.2 zookeeper集群搭建

zookeeper集群至少需要三台zookeeper,我们的策略是:每一台主机安装一个zookeeper。试想:如果主机数量是10台,我们就需要安装10个zookeeper,这样效率显然不高。后面我们将解决这个问题,现在先来每一个主机安装一个zookeeper。

(1)xshell与虚拟机建立连接

在虚拟机启动的前提下,在xshell中选择文件->新建连接。

image-20220403163759140

这里会让您输入用户名与密码,如果您的登录名或密码与虚拟机用户名(不是主机名哦)不一致,将会报错ssh服务器拒绝…,如下图,改为一致即可。

image-20220403164525961

如果您连接不上,请自查之前主机的网络配置是否正确。尤其注意关注使用ifconfig命令查看ip等。

(2) 服务器命名

在xshell中操作主机zookeeper01.在zkData下新建并编辑文件myid。

cd /home/wangzhou/Downloads/zookeeper-3.5.7/zkData

输入1并保存退出。

(3)软件分发

我们可以使用软件分发脚本将zookeeper,jdk等直接分发到其它主机,在集群数量很多的情况下这可是特别高效的,不过在软件分发前我们需要做一些准备工作。

先将需要集群的主机取下别名。

 sudo vim /etc/hosts

image-20220403180528623

然后在home目录下新建文件夹bin

mkdir bin

编辑文件xsync,关于这个命令的更多介绍可以参考集群服务器的同步xsync命令使用_诗水人间的博客-CSDN博客_xsync未找到命令进行了解,总之它可以用来实现集群的软件分发工作。

vim xsync

具体内容如下。

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi


#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname


#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir


#4 获取当前用户名称
user=`whoami`


#5 循环
for((host=2;host<4;host++)); do
        echo ------------------- zookeeper$host --------------
        rsync -rvl $pdir/$fname $user@zookeeper0$host:$pdir
done

准备工作做好了,返回到zookeeper的上级目录,同步分发zookeeper。

/home/wangzhou/Downloads
su root
xsync ~/Downloads/zookeeper-3.5.7/

执行结果如下。

image-20220403184034508

可以在102上检查下。好神奇啊是不是。

image-20220403184332810

对另外两台主机也新建myid文件,分别写入2,3。

编辑服务器zookeeper01的配置文件 zoo.cfg。

#######################cluster##########################
server.1=zookeeper01:2888:3888 
server.2=zookeeper02:2888:3888
server.3=zookeeper03:2888:3888

上面的配置格式如下

server.A=B:C:D

其中A就是我们配置的myid,相当于一个身份标示;B就是主机的地址,我们更改了hosts文件,因此就使用别名代替了,您也可以直接使用ip地址;c时Leader与Follower通信的端口号;D是当Leader服务器挂了,用于选举的通信端口号。

分发到其它服务器。

[wangzhou@bogon conf]$ su root
[root@bogon conf]# xsync ./zoo.cfg 

启动zookeeper01。报错如下。

Error: JAVA_HOME is not set and java could not be found in PATH.

参考博客ZooKeeper安装后无法启动JAVA_HOME is not set and java could not be found in PATH._Eleven-十一的博客-CSDN博客解决该报错问题。

我们目前有三台服务器,但是只启动了一台,根据集群规则,zookeeper集群还没有达到半数服务器运行,集群无法正常运行。

我们如法炮制,将jdk,环境变量文件等分发到其它服务器,然后再启动一台服务器即可。

查看zkServer.sh status,zookeeper没有真正跑起来。

[wangzhou@bogon zookeeper-3.5.7]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/wangzhou/Downloads/zookeeper-3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.

查看日志。

[wangzhou@bogon zookeeper-3.5.7]$ cd logs
[wangzhou@bogon logs]$ vim zookeeper-root-server-bogon.out

日志信息如下。

2022-04-03 12:25:46,551 [myid:] - INFO  [main:QuorumPeerConfig@135] - Reading configuration from: /home/wangzhou/Downloads/zookeeper-3.5.7/bin/../conf/zoo.cfg
2022-04-03 12:25:46,574 [myid:] - INFO  [main:QuorumPeerConfig@387] - clientPortAddress is 0.0.0.0:2181
2022-04-03 12:25:46,574 [myid:] - INFO  [main:QuorumPeerConfig@391] - secureClientPort is not set
2022-04-03 12:25:46,599 [myid:] - ERROR [main:QuorumPeerMain@89] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: zookeeper01:3888
        at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.<init>(QuorumPeer.java:261)
        at org.apache.zookeeper.server.quorum.flexible.QuorumMaj.<init>(QuorumMaj.java:89)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:597)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseDynamicConfig(QuorumPeerConfig.java:630)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:603)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:422)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:113)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Invalid config, exiting abnormally                                                                                        

看上去是配置的问题。原来我们的cfg配置要求特别严格,一个空格啥的都可能导致zookeeper异常。参考博客zookeeper启动报错:Address unresolved-Ddmit未解决,但是从中想到可能是因为zookeeper01设置了hosts规则,其它主机没有设置。将hosts文件同步到其它主机即可。同时,还要记得关闭各个主机的防火墙。

在CentOS 5和CentOS 6系统中,关于如何开启防火墙、关闭防火墙、查看防火墙运行状态,请参考以下信息,注意需要在root用户操作哦:

  • 开启防火墙

    service iptables start
    
  • 关闭防火墙

    service iptables stop
    
  • 查看防火墙运行状态

    service iptables status
    

终于成功了

image-20220403221544013

image-20220403221433155

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Zookeeper是一个分布式的一致性协调服务,常用于分布式系统中的协调管理。在搭建Zookeeper集群之前,需要先安装好Java环境,具体步骤如下: 1. 下载Zookeeper安装包,并解压到指定目录。 2. 在Zookeeper的conf目录下,新建一个名为zoo.cfg的文件,配置Zookeeper集群的相关参数,例如: ``` tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/lib/zookeeper clientPort=2181 server.1=192.168.1.101:2888:3888 server.2=192.168.1.102:2888:3888 server.3=192.168.1.103:2888:3888 ``` 其中,tickTime表示Zookeeper中的基准时间单位,initLimit和syncLimit表示Zookeeper集群中的Follower节点与Leader节点之间的通信超时时间,dataDir表示Zookeeper中数据存储的目录,clientPort表示Zookeeper的客户端连接端口,server.x表示Zookeeper集群中的各节点信息。 3. 在每个节点的dataDir目录下,新建一个名为myid的文件,并将当前节点的编号写入该文件中,例如: ``` 1 ``` 4. 启动Zookeeper集群,可以通过命令行执行以下命令: ``` bin/zkServer.sh start ``` 5. 检查Zookeeper集群的状态,可以通过命令行执行以下命令: ``` bin/zkServer.sh status ``` 如果集群状态正常,显示类似于“Mode: leader”的信息,表示当前节点为Leader节点。 6. 使用Zookeeper集群,可以通过Java API或命令行客户端进行操作,例如创建节点、删除节点、获取节点列表等。 以上就是Zookeeper集群搭建的简单步骤,需要注意的是,Zookeeper集群的节点数应该为奇数,推荐使用3、5、7等节点数。同时,Zookeeper集群的配置需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半旧518

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值