zookeeper配置
1、安装解压zookeeper到指定目录下
2、配置/etc/profile环境,配置完wq保存
[root@master zookeeper3.7.0]# source /etc/profile 刷新配置
3、修改配置文件(/zookeeper/conf)
需要复制 zoo_sample.cfg模板,命名为zoo.cfg
vi zoo.cfg,添加如下内容:
(master、slave1、slave2为节点名称)
配置data和logs路径
4、配置myid
在每个节点的data目录下输入如下命令
[root@master data]# echo '1' > myid
[root@slave1 data]# echo '2' > myid
[root@slave2 data]# echo '3' > myid
如果没有data目录,可以手动创建一个
或者直接启动zookeeper
[root@master zookeeper3.7.0]# zkServer.sh start(会报错,但会创建data和logs目录)
5、测试zookeeper集群
5①启动zookeeper,slave1、slave2节点也需要单独启动
②查看zookeeper节点状态
到此,zook集群配置成功
以下是配置时可能出现的问题:
1、查看zookeeper时
报错1:Error contacting service. It is probably not running.
原因:可能是其他节点的zookeeper没有全部启动,连接不上
报错2:Client port found: 2181. Client address: localhost. Client SSL: false.
原因:查看myid的数字是否写错;修改为正确的即可
2、查看日志
原因:①查看/etc/hosts文件的主机映射、端口号和data/zoo.cfg的配置是否相同
②检查防火墙是否关闭
systemctl status firewalld #查看防火墙状态
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #关闭防火墙自启
3、拒绝连接
出现如下错误,查看三台节点的zookeeper是否都启动了
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的资源协调,将修改的配置服务发送给zookeeper,zookeeper再将配置信息发送给其他节点,节点可以直接应用修改的数据;
何为负载均衡?
负载均衡是指在计算机网络中,将工作负载(即请求或数据)平均分配到多个计算资源上,以确保这些资源能够更高效地利用,从而提高系统的整体性能、可靠性和可扩展性。
1、提高性能:通过均衡每个服务器的负载,确保所有服务器都可以充分利用,避免出现某些服务器负载过重、而其他服务器处于空闲状态的情况;
2、提高可靠性:当某一台服务器发生故障时,负载均衡可以将流量自动转移到其他正常工作的服务器上,从而提高系统的可用性和容错能力;
3、提高可扩展性:当系统需要升级扩展,可以简单地增加新的服务器,并通过负载均衡器将流量分配到新的服务器上,而无需对客户端进行任何改动
分布式锁:防止一个数据被多次计算,在集群中,每台服务器都进行同一个事情,它们之间就需要相互协调,编程起来特别复杂,而分布式锁就是在某个时刻只让一个服务器工作,当这个服务器工作完,释放锁,其他的服务器才运行。
zookeeper会选举leader:
zookeeper集群由一组服务器节点组成,在这些节点中,只有一个leader,其他都是follower,当客户端连接zookeeper集群并执行请求时,这些请求首先会发到leader节点。leader会将这些请求写入磁盘中作备份,最后将数据变更会同步(广播)到其他follower节点上。
思考:每台节点都需要单独启动zookeeper,如果有很多的节点,都需要一个一个单独去启动吗?
答:不需要,zookeeper集群可以通过脚本或者自动化工具要批量启动这些节点,如:Ansible、Chef、Puppet等,这样可以更加方便地对zookeeper集群进行管理和维护。