服务注册中心之Zookeeper使用
一、什么是Zookeeper?
Zookeeper是一个分布式协调工具,可以实现注册中心功能,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等,它可以替代Eureka组件实现注册中心功能。
二、ZooKeeper安装
zookeeper有单机、集群部署方式。
1、单机模式下的zookeeper安装,此处以安装到Centos系统为例,需要先安装JDK。
首先需要去https://zookeeper.apache.org/releases.html下载稳定版tar.gz包,下载后解压到想要的安装路径,进入conf目录复制zoo_sample.cfg样例改名为zoo.cfg作为基础配置文件,进行个性化配置,cd到zookeeper安装路径,运行启动命令./bin/zkServer.sh start即可启动zookerper。zookeeper配置文件说明如下
# The number of milliseconds of each tick# tickTime:CS通信心跳数 # Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。 tickTime=2000 # The number of ticks that the initial # synchronization phase can take # initLimit:LF初始通信时限 # 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。 initLimit=5 # The number of ticks that can pass between # sending a request and getting an acknowledgement # syncLimit:LF同步通信时限 # 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。 syncLimit=2 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. # dataDir:数据文件目录 # Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。 dataDir=/data/soft/zookeeper-3.4.12/data # dataLogDir:日志文件目录 # Zookeeper保存日志文件的目录。 dataLogDir=/data/soft/zookeeper-3.4.12/logs # the port at which the clients will connect # clientPort:客户端连接端口 # 客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。 clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir 保留数量3 autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature 清理时间间隔1小时 autopurge.purgeInterval=1 # 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口),这个配置项的书写格式比较特殊,规则如下: # server.N=YYY:A:B # 其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时
# 服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。 # 一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只是A端口和B端口不一样。
2、集群zookeeper安装,安装方式与单机模式一样,只不过分布在多个主机上,安装完成后需要对这些zookeeper节点进行配置,具体如下,server.n为不同zookeeper的访问地址,这些地址组形成zookeeper集群
tickTime=2000 initLimit=5 syncLimit=2 dataDir=/tmp/zookeeper/data dataLogDir=/tmp/zookeeper/logs
clientPort=12181
# 服务器名称与地址:集群信息
server.1=127.0.0.1:12888:13888
server.2=127.0.0.1:14888:15888
server.3=127.0.0.1:16888:17888
配置myid文件:这个文件存放的路径由zoo.cfg配置文件中的dataDir来指定,在这三台服务器上的/tmp/zookeeper/data目录下创建myid文件,里面填入相应的id号,这是zookeeper节点的编号。
三、将服务提供者注册到Zookeeper服务器
使用方式与Eureka组件类似,要将一个服务模块作为提供者注册到Zookeeper注册中心,需要修改Pom引入spring-cloud-starter-zookeeper-discoveryr包、编写application.yml配置文件,如下所示
1、引入jar包
< ! -- SpringBoot整合zookeeper客户端--> <dependency> <groupId>org-springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency>
2、修改application.yml配置文件
#8008表示注册到zookeeper服务器的服务提供者端口号 server: port: 8008 spring: application: name: cloud-provider-name #服务别名 cloud: zookeeper: connect-string: ip:port #zookeeper服务器注册中心地址
3、主启动类增加@EnableDiscoveryClient注解,该注解用于向consul或者zookeeper注册中心注册该服务。
4、Controller类写业务接口,该控制器通常需要使用@RestController注解。
四、服务提供者集群
与Eureka注册中心负载均衡集群一样,服务提供者如需要集群,也需要在配置文件ApplicationContextConfig配置文件的getRestTemplet()下增加@LoadBalanced注解,来赋予RestTemplate负载均衡能力(参考服务注册中心之Eureka使用)。
原文地址:https://www.cnblogs.com/zqhIndex/p/15393864.html
- 续谈ActiveMQ之java如何操作ActiveMQ(springBoot项目)
- 深入理解JVM原理之编译openjdk7
- 初识ActiveMQ
- Kafka集群安装
- 知其所以然之永不遗忘的算法
- ZOOKEEPER集群搭建及测试
- 【Python环境】Scikit-Learn:开源的机器学习Python模块
- 【Python环境】可爱的 Python: 自然语言工具包入门
- 电脑静音工作,又听不到12306的来票音乐,纠结啊 !但春节前工作多任务重,不能安心工作,就动手做个“无声购票弹窗”工具吧!
- .net访问PostgreSQL数据库发生“找不到函数名”的问题追踪
- “领域驱动开发”实例之旅(1)--不一样的开发模式 一、分析业务需求。 二、设计领域对象模型 三、测试领域对象模型 四、设计业务处理类 五、设计Entity和Vi
- Java基础——左移和右移
- 【Python环境】利用 Python、SciKit 和文本分类来实现行为分析
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CSS3 引入方式 注释 颜色属性 学习笔记
- 使用 Makefile 构建指令集
- 安卓 App 逆向课程之四 frida 注入 Okhttp 抓包中篇
- NumPy进阶修炼80题|41-60
- 时序数据库 InfluxDB(一)
- Netty一文深入
- 时序数据库 InfluxDB(三)
- 时序数据库 InfluxDB(四)
- 卧槽,我学会了用Python预测股票价格
- 自定义 ESLint 规则,让代码持续美丽
- 时序数据库 InfluxDB(五)
- 太牛逼了!用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!
- Web 技术:CSS最小和最大(宽度/高度)知识点及优缺点
- javascript入门到进阶 - js系列七:生命周期
- 时序数据库 InfluxDB(六)