首页 > 其他分享 >Zookeeper集群部署

Zookeeper集群部署

时间:2023-10-08 09:34:47浏览次数:53  
标签:src zookeeper zk 部署 root Zookeeper 集群 usr local

1.#ZooKeeper 使用场景
ZooKeeper 是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务、状态同步、配置中心、集群管理等。

#命名服务:
命名服务是分布式系统中比较常见的一类场景。命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等——这些我们都可以统称它们为名字(Name),其中较为常见的就是一些分布式服务框架(如 RPC、RMI)中的服务地址列表,通过使用命名服务,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供者的信息等。

#状态同步:
每个节点除了存储数据内容和 node 节点状态信息之外,还存储了已经注册的APP 的状态信息,当有些节点或 APP 不可用,就将当前状态同步给其他服务。

#配置中心:
现在我们大多数应用都是采用的是分布式开发的应用,搭建到不同的服务器上,我们的配置文件,同一个应用程序的配置文件一样,还有就是多个程序存在相同的配置,当我们配置文件中有个配置属性需要改变,我们需要改变每个程序的配置属性,这样会很麻烦的去修改配置,那么可用使用 ZooKeeper 来实现配置中心,ZooKeeper 采用的是推拉相结合的方式: 客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发送Watcher 事件通知,客户端接收到这个消息通知后,需要主动到服务端获取最新的数据。

#集群管理:
所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者则是对集群进行操作与控制,在日常开发和运维过程中,我们经常会有类似于如下的需求:希望知道当前集群中究竟有多少机器在工作。对集群中每台机器的运行时状态进行数据收集。对集群中机器进行上下线操作。

#ZooKeeper 具有以下两大特性。
客户端如果对 ZooKeeper 的一个数据节点注册 Watcher 监听,那么当该数据节点的内容或是其子节点列表发生变更时,ZooKeeper 服务器就会向订阅的客户端发送变更通知。对在 ZooKeeper 上创建的临时节点,一旦客户端与服务器之间的会话失效,那么该临时节点也就被自动清除。

Watcher(事件监听器),是 Zookeeper 中的一个很重要的特性。Zookeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,

ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 Zookeeper实现分布式协调服务的重要特性。

2.#Zookeeper 集群部署
ZooKeeper 集群用于解决单点和单机性能及数据高可用等问题。
zookeeper 集群特性:整个集群中只要有超过集群数量一半的 zookeeper 工作只正常的,那么整个集群对外就是可用的,假如有 2 台服务器做了一个 zookeeper集群,只要有任何一台故障或宕机,那么这个 zookeeper 集群就不可用了,因为剩下的一台没有超过集群一半的数量,但是假如有三台 zookeeper 组成一个集群,那么损坏一台就还剩两台,大于 3 台的一半,所以损坏一台还是可以正常运行的,但是再损坏一台就只剩一台集群就不可用了。那么要是 4 台组成一个zookeeper 集群,损坏一台集群肯定是正常的,那么损坏两台就还剩两台,那么2 台不大于集群数量的一半,所以 3 台的 zookeeper 集群和 4 台的 zookeeper 集群损坏两台的结果都是集群不可用,以此类推 5 台和 6 台以及 7 台和 8 台都是同理,所以这也就是为什么集群一般都是奇数的原因。

2.1#配置zookeeper集群
官方文档:https://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html
服务器环境:
	zk-node1:10.0.0.150
	zk-node2:10.0.0.160
	zk-node3:10.0.0.170

2.2#zk-node1部署过程
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

[root@centos8 ~]#wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@centos8 ~]#scp zookeeper-3.4.6.tar.gz 10.0.0.160:/usr/local/src
[root@centos8 ~]#scp zookeeper-3.4.6.tar.gz 10.0.0.170:/usr/local/src
#修改主机名
[root@centos8 ~]#hostnamectl set-hostname zk-node1
[root@centos8 ~]#bash
#安装jdk
[root@zk-node1 ~]# yum install -y java-1.8.0-openjdk
[root@zk-node1 ~]#cd /usr/local/src/
[root@zk-node1 src]#ls
zookeeper-3.4.6.tar.gz
[root@zk-node1 src]#tar xf zookeeper-3.4.6.tar.gz
[root@zk-node1 src]#ln -sv /usr/local/src/zookeeper-3.4.6 /usr/local/zookeeper
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.6'
[root@zk-node1 src]#cd /usr/local/zookeeper/conf
[root@zk-node1 conf]#cp zoo_sample.cfg zoo.cfg
[root@zk-node1 conf]#mkdir /usr/local/zookeeper/data
root@zk-node1 conf]#grep "^[a-Z]" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=128
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=10.0.0.150:2888:3888
server.2=10.0.0.160:2888:3888
server.3=10.0.0.170:2888:3888
[root@zk-node1 conf]#echo 1 >/usr/local/zookeeper/data/myid
[root@zk-node1 ~]#scp /usr/local/src/zookeeper-3.4.6/conf/zoo.cfg  10.0.0.160:/usr/local/src/zookeeper-3.4.6/conf/zoo.cfg
[root@zk-node1 ~]#scp /usr/local/src/zookeeper-3.4.6/conf/zoo.cfg  10.0.0.170:/usr/local/src/zookeeper-3.4.6/conf/zoo.cfg


2.3#zk-node2部署过程
[root@centos8 ~]#hostnamectl set-hostname zk-node2
[root@zk-node2 ~]# yum install -y java-1.8.0-openjdk
[root@zk-node2 conf]#cd /usr/local/src/
[root@zk-node2 src]#ls
zookeeper-3.4.6.tar.gz
[root@zk-node2 src]#tar xf zookeeper-3.4.6.tar.gz
[root@zk-node2 src]#ls
zookeeper-3.4.6  zookeeper-3.4.6.tar.gz
[root@zk-node2 src]#ln -sv /usr/local/src/zookeeper-3.4.6 /usr/local/zookeeper
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.6'
[root@zk-node2]#cat /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=128
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=10.0.0.150:2888:3888
server.2=10.0.0.160:2888:3888
server.3=10.0.0.170:2888:3888
[root@zk-node2 conf]#mkdir /usr/local/zookeeper/data
[root@zk-node2 conf]#echo 2 >/usr/local/zookeeper/data/myid

2.4#zk-node3部署过程
[root@centos8 ~]#hostnamectl set-hostname zk-node3
[root@zk-node3 ~]# yum install -y java-1.8.0-openjdk
[root@zk-node3 ~]#cd /usr/local/src/
[root@zk-node3 src]#ls
zookeeper-3.4.6.tar.gz
[root@zk-node3 src]#tar xf zookeeper-3.4.6.tar.gz
[root@zk-node3 src]#ls
zookeeper-3.4.6  zookeeper-3.4.6.tar.gz
[root@zk-node3 src]#ln -sv /usr/local/src/zookeeper-3.4.6 /usr/local/zookeeper
'/usr/local/zookeeper' -> '/usr/local/src/zookeeper-3.4.6'
[root@zk-node3]#cat /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxClientCnxns=128
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=10.0.0.150:2888:3888
server.2=10.0.0.160:2888:3888
server.3=10.0.0.170:2888:3888
[root@zk-node3 conf]#mkdir /usr/local/zookeeper/data
[root@zk-node3 conf]#echo 3 >/usr/local/zookeeper/data/myid

2.5#启动zk
[root@zk-node1 ~]#/usr/local/zookeeper/bin/zkServer.sh  start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-node2 conf]#/usr/local/zookeeper/bin/zkServer.sh  start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zk-node3 conf]#/usr/local/zookeeper/bin/zkServer.sh  start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

2.6#查看zk集群状态
[root@zk-node1 ~]#/usr/local/zookeeper/bin/zkServer.sh  status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

[root@zk-node2 ~]#/usr/local/zookeeper/bin/zkServer.sh  status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

[root@zk-node3 ~]#/usr/local/zookeeper/bin/zkServer.sh  status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

标签:src,zookeeper,zk,部署,root,Zookeeper,集群,usr,local
From: https://www.cnblogs.com/tanll/p/17748076.html

相关文章

  • k8s部署jenkins+gitlab实现代码发布
     1.#k8s部署jenkins#k8s中运行jenkins服务,gitlab还是跑在物理机上,因为经常需要clone修改代码。#基于java命令,运⾏javawar包或jar包,本次以jenkins.war包部署⽅式为例,jenkins的数据保存⾄外部存储(NFS或者PVC)。1.1#镜像⽬录⽂件:#pwd/opt/k8s-data/docke......
  • 部署项目到Linux踩的坑
    一、tomcat版本不一致在windows上开发时用的tomcat9,实现javax.servlet.Filter的实现类无需重写init()和destroy(),但我在Linux上安装的tomcat是8.5,javax.servlet.Filter的实现类需要重写init()和destory()。导致我能访问到linux上tomcat主页,但是不能访问部署的项目,在日志文件中......
  • filebeat docker 部署
    官网:https://www.elastic.co/guide/en/beats/filebeat/8.10/index.htmlhttps://www.elastic.co/guide/en/beats/filebeat/8.10/running-on-docker.html 1.拉取镜像sudodockerpullelastic/filebeat:8.10.2 2.准备配置文件sudomkdir-p/opt/docker/filebeatsu......
  • docker部署nacos集群
    环境准备系统ip 插件centos710.190.107.191docker、nginxcentos710.190.107.192docker、nacoscentos710.190.107.193docker、nacoscentos710.190.107.194docker、nacos  1、提前准备MySQL 创建nacos库并执行sql文件dockerrun-id-p......
  • RedisStack部署/持久化/安全/与C#项目集成
    前言Redis可好用了,速度快,支持的数据类型又多,最主要的是现在可以用来向量搜索了。本文记录一下官方提供的redis-stack部署和配置过程。关于redis-stackredis-stackinstallsaRedisserverwithadditionaldatabasecapabilitiesandtheRedisInsight.redis提供了俩......
  • 简述redis集群的实现原理
     为了解决单机性能的瓶颈,提高Redis性能,可以使用分布式集群的解决方案1.所有Redis节点使用(PING机制)互联2.集群中某个节点的是否失效,是由整个集群中超过半数的节点监测都失效,才能算真正的失效3.客户端不需要proxy即可直接连接redis,应用程序中需要配置有全部的r......
  • 基于redis5的redis cluster部署
     1.创建rediscluster集群的环境准备1.1.#每个redis节点采用相同的相同的redis版本、相同的密码、硬件配置;所有redis服务器必须没有任何数据;准备六台主机,地址如下:10.0.0.15010.0.0.16010.0.0.17010.0.0.18010.0.0.19010.0.0.2002.启用redis......
  • Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.htm
    [root@ansible~]#vim/etc/ansible/hosts[webservers]10.0.0.150ansible_connection=local10.0.0.160#创建角色相关目录[root@ansiblehtml]#mkdir-pv/data/ansible/roles/httpd/{tasks,handlers,files}mkdir:createddirectory'/data/ans......
  • ansible-playbook实现MySQL的二进制部署
     #安装mysql5.6[root@ansible~]#ls-l/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz-rw-r--r--1rootroot403177622Dec 413:05/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz[root@ansible~]#cat/data/ansible......
  • 【大数据】HIVE部署(文档版本)
    Mysql安装配置远程登录#更新密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2022#安装Mysqlyum库rpm-Uvhhttp://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm#yum安装Mysqlyum-yinstallmysql-community-server#启动Mysql设置......