当前位置:   article > 正文

一文简单了解并部署Zookeeper集群

一文简单了解并部署Zookeeper集群
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:蟹黄瓜子
  • 文章来源:GreatSQL社区投稿

1.Zookeeper概述

Zookeeper对于很多人开始可能都有所耳闻,他的使用场景也很多,可以以节点的形式存储持久化数据,也可以使用这一特性来作为微服务的服务注册中心,简单来说,Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。

Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架。是一个文件系统,负责存储和管理大家都关心的数据,然后接受观察者的注册;也是一种通知机制,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

2.Zookeeper的应用场景和一些注意事项

ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。

Zookeeper的应用场景有许多,比如统一的配置管理,在许多分布式环境中,通常一个服务集群的配置文件信息是一致的,如果需要修改配置信息内容,不可能逐个对每个服务做修改,而是希望修改一次配置信息就可以同步给所有服务节点,Zookeeper就可以实现这个业务,十分简单,可以将服务的配置信息写入ZooKeeper上的一个Znode中,让每个集群节点的服务器都去监听这个Znode,一旦数据被修改,ZooKeeper将通知各个服务器,达到同步的效果。还可以做统一的集群管理、服务器的动态上下线、以及软负载均衡的效果。

在实践Zookeeper前还需要注意的内容:

  • Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
  • 集群正常运行的前提条件是集群节点大于半数,因此集群节点数最好采用奇数个。
  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
  • 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
  • 数据更新原子性,一次数据更新要么成功,要么失败。
  • 实时性,在一定时间范围内,Client能读到最新数据。

3.简单部署Zookeeper集群

官网地址:https://zookeeper.apache.org/,本文采用**VMware**创建3台虚拟机构建集群,**XShell**工具连接虚拟机进行操作:

首先为机子安装jdk,采用yum源安装,注意设置yum,静等安装成功出现“Complete”即可:

[root@localhost ~]# yum install -y java-1.8.0-openjdk.x86_64
    • 进入/usr/local/目录,将提前准备好的“zookeeper-3.4.5.tar.gz”文件传入目录,并解压:
    [root@localhost ~]# cd /usr/local/
    [root@localhost local]# tar zxvf zookeeper-3.4.5.tar.gz 
    • 1
    • 修改文件名为“zookeeper”:
    [root@localhost local]# mv zookeeper-3.4.5 zookeeper
      • 修改环境变量:
      [root@localhost local]# vi /etc/profile
      # 进入insert模式后在上方添加一下内容后保存退出
      export ZOOKEEPER_HOME=/usr/local/zookeeper
      export PATH=$PATH:$ZOOKEEPER_HOME/bin
      • 1
      • 2
      • 3
      • 重新编译“/etc/profile”:
      [root@localhost zookeeper]# source /etc/profile
        • 进入conf目录下,将“zoo_sample.cfg”拷贝生成“zoo.cfg”文件作为zookeeper的配置文件:
        [root@localhost zookeeper]# cd conf/
        [root@localhost conf]# cp zoo_sample.cfg zoo.cfg 
        • 1
        • 修改“zoo.cfg”文件:

          • 配置文件中主要要配置数据存放路径和日志路径,zookeeper默认的数据存放路径为"dataDir=/tmp/zookeeper",为临时数据,会过期,本文将重新指定相关位置,存放在“自己”的路径下,当然也可以根据需要建立单独路径进行存放。
        # 将配置文件中的dataDir替换为此路径
        dataDir=/usr/local/zookeeper/data
        # 在配置文件中添加以下配置,ip地址根据规划
        # 其中server.1代表集群的第几胎集群,后续会配置myid文件,myid文件内容和对应的数字保存一致,例如1.131这台机器myid就是1
        # ip地址为集群的三台机器,也可以配置host使用主机名,两个端口号心跳端口和数据端口
        dataLogDir=/usr/local/zookeeper/log
        server.1=192.168.1.11:2888:3888
        server.2=192.168.1.12:2888:3888
        server.3=192.168.1.13:2888:3888
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 简单解释下集群配置:

          • server.A=B:C:D
          • A 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
          • B 是这个服务器的地址;
          • C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
          • D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
        • 回到”zookeeper“目录下,创建配置文件中提到的两个路径并赋予权限:

        [root@localhost conf]# cd ..
        [root@localhost zookeeper]# mkdir -m 755 data
        [root@localhost zookeeper]# mkdir -m 755 log
        • 1
        • 2
        • 来到“data/”路径下,创建myid文件,并给相应值1
        [root@localhost zookeeper]# cd data/
        [root@localhost data]# vi myid
        • 1
        • 此刻对于集群节点的第一台机器就配置完成了,另外两台机器需要在准备好环境并设置好环境变量的前提下进行
        • 通过第一台机器将配置好的zookeeper及集群配置下发到另外两台机器上,注意修改对应机器的myid:
        [root@localhost data]# scp -r /usr/local/zookeeper root@192.168.1.12:/usr/local/
        [root@localhost data]# scp -r /usr/local/zookeeper root@192.168.1.13:/usr/local/
        • 1
        • 修改myid值为2和3后,集群部署完毕。
        • 进入到01机器的zookeeper目录下,启动zookeeper:
        [root@localhost zookeeper]# bin/zkServer.sh start
        JMX enabled by default
        Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
        Starting zookeeper ... STARTED
        [root@localhost zookeeper]# bin/zkServer.sh status
        JMX enabled by default
        Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
        Error contacting service. It is probably not running.
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 此时集群没办法起来,因为目前只有一个节点开启
        • 当第二台启动以后,集群节点超过半数,第二台机器就会选举成为leader
        [root@localhost zookeeper]# bin/zkServer.sh start
        JMX enabled by default
        Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
        Starting zookeeper ... STARTED
        [root@localhost zookeeper]# bin/zkServer.sh status
        JMX enabled by default
        Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
        Mode: leader
        [root@localhost zookeeper]# 
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 第一台就变成follower了
        [root@localhost zookeeper]# bin/zkServer.sh status
        JMX enabled by default
        Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
        Mode: follower
        • 1
        • 2
        • 3
        • 开启第三台后,第二台机器已经是leader了,除非机器宕机会触发重新选举
        • 关于zookeeper的操作可以通过启动启动客户端:
        [root@localhost zookeeper]# bin/zkCli.sh
        
        WatchedEvent state:SyncConnected type:None path:null
        [zk: localhost:2181(CONNECTED) 0] 
        • 1
        • 2
        • 3
        • 至此测试完成,zookeeper集群部署完毕,更多zookeeper操作可以参照zookeeper官方文档。

        Enjoy GreatSQL :)

        关于 GreatSQL

        GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

        相关链接: GreatSQL社区 Gitee GitHub Bilibili

        GreatSQL社区:

        捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

        社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

        6440

        声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/724540
        推荐阅读
        相关标签
          

        闽ICP备14008679号