zookeeper配置

1、安装解压zookeeper到指定目录下

2、配置/etc/profile环境,配置完wq保存

jionlp安装失败_jionlp安装失败

[root@master zookeeper3.7.0]# source /etc/profile  刷新配置

3、修改配置文件(/zookeeper/conf)

需要复制 zoo_sample.cfg模板,命名为zoo.cfg

jionlp安装失败_debian_02

jionlp安装失败_debian_03

vi zoo.cfg,添加如下内容:

(master、slave1、slave2为节点名称)

jionlp安装失败_apache_04

配置data和logs路径

jionlp安装失败_jionlp安装失败_05

4、配置myid

在每个节点的data目录下输入如下命令

[root@master data]# echo '1' > myid
[root@slave1 data]# echo '2' > myid
[root@slave2 data]# echo '3' > myid

如果没有data目录,可以手动创建一个

jionlp安装失败_linux_06

或者直接启动zookeeper

[root@master zookeeper3.7.0]# zkServer.sh start(会报错,但会创建data和logs目录)

5、测试zookeeper集群

5①启动zookeeper,slave1slave2节点也需要单独启动

jionlp安装失败_jionlp安装失败_07

jionlp安装失败_apache_08

jionlp安装失败_debian_09

②查看zookeeper节点状态

jionlp安装失败_linux_10

jionlp安装失败_zookeeper_11

jionlp安装失败_zookeeper_12

到此,zook集群配置成功

以下是配置时可能出现的问题:

1、查看zookeeper时

报错1:Error contacting service. It is probably not running.

jionlp安装失败_zookeeper_13

原因:可能是其他节点的zookeeper没有全部启动,连接不上

报错2:Client port found: 2181. Client address: localhost. Client SSL: false.

原因:查看myid的数字是否写错;修改为正确的即可

2、查看日志

jionlp安装失败_debian_14

原因:①查看/etc/hosts文件的主机映射、端口号和data/zoo.cfg的配置是否相同

②检查防火墙是否关闭

systemctl status firewalld    #查看防火墙状态
systemctl stop firewalld   #关闭防火墙
systemctl disable firewalld  #关闭防火墙自启

3、拒绝连接

出现如下错误,查看三台节点的zookeeper是否都启动了

jionlp安装失败_linux_15

zookeeper配置解释

tickTime:发送心跳的间隔时间,单位:毫秒

dataDir:zookeeper保存数据的目录。

clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper  会监听这个端口,接受客户端的访问请求。

initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连  接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的  Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5 个心跳的  时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表  明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒

server.A=B:C:D:其 中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip  地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一  集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这  个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是  一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

会话(session):服务器与客户端之间的一个TCP连接

zookeeper理论

zookeeper主要用于分布式协调服务,管理着各节点的资源,可以解决数据发布/订阅、负载均衡、命名服务、配置管理等。当集群的配置信息发生改变时,每台节点都去修改不方便,通过zookeeper的资源协调,将修改的配置服务发送给zookeeperzookeeper再将配置信息发送给其他节点,节点可以直接应用修改的数据;

何为负载均衡?

负载均衡是指在计算机网络中,将工作负载(即请求或数据)平均分配到多个计算资源上,以确保这些资源能够更高效地利用,从而提高系统的整体性能、可靠性和可扩展性。

1、提高性能:通过均衡每个服务器的负载,确保所有服务器都可以充分利用,避免出现某些服务器负载过重、而其他服务器处于空闲状态的情况;

2、提高可靠性:当某一台服务器发生故障时,负载均衡可以将流量自动转移到其他正常工作的服务器上,从而提高系统的可用性和容错能力;

3、提高可扩展性:当系统需要升级扩展,可以简单地增加新的服务器,并通过负载均衡器将流量分配到新的服务器上,而无需对客户端进行任何改动

分布式锁:防止一个数据被多次计算,在集群中,每台服务器都进行同一个事情,它们之间就需要相互协调,编程起来特别复杂,而分布式锁就是在某个时刻只让一个服务器工作,当这个服务器工作完,释放锁,其他的服务器才运行。

zookeeper会选举leader:

zookeeper集群由一组服务器节点组成,在这些节点中,只有一个leader,其他都是follower,当客户端连接zookeeper集群并执行请求时,这些请求首先会发到leader节点。leader会将这些请求写入磁盘中作备份,最后将数据变更会同步(广播)到其他follower节点上。

思考:每台节点都需要单独启动zookeeper,如果有很多的节点,都需要一个一个单独去启动吗?

答:不需要,zookeeper集群可以通过脚本或者自动化工具要批量启动这些节点,如:Ansible、Chef、Puppet等,这样可以更加方便地对zookeeper集群进行管理和维护。