Zookeeper(二)ZooKeeper服务器的安装与启动

Zookeeper官方文档特别强调,由于FreeBSD系统的JVM对Java的NIO Selector支持的不是很好,所以不建议在该系统上部署生产环境的Zookeeper服务器。

zookeeper使用

1,下载Zookeeper安装包。

下载地址为:http://zookeeper.apache.org/releases.html。注意用户可以选择稳定版本进行下载,下载后会得到一个文件名类似于zookeeper-x.x.x.tar.gz的文件,解压到一个目录,例如/opt/zookeeper-3.4.3/目录下,同时我们约定,在下文中使用%ZK_HOME%代表该目录。

2.配置文件zoo.cfg。

初次使用Zookeeper,需要将%ZK_HOME%/conf目录下的zoo_sample.cfg文件重命名为zoo.cfg,并且按照如下代码进行简单配置即可:

tickTime=2000

dataDir=/var/lib/zookeeper/

clientPort=2181

initLimit=5

syncLimit=2

server.1=IP1:28883888

server.2=IP2:2888:3888

server.3=IP3:2888:3888

关于Zookeeper的参数配置,将在后面做详细讲解,这里只是简单地说下

  • 在集群模式下,集群中的每台机器都需要感知到整个集群是由那几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置:server.id=host:port:port    其中,id被称为Server ID,用来标识该机器在集群中的机器序号。同时,在每台Zookeeper机器上,我们都需要在数据目录(即dataDir参数指定的那个目录)下创建一个myid文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的Server ID数字。
  • 在ZooKeepe的设计中,集群中所有机器上zoo.cfg文件的内容都应该是一致的。因此最好使用SVN或是GIT把此文件管理起来,确保每台机器都能共享到一份相同的配置。
  • 上面提到了,myid文件中只有一个数字,即一个Server ID。例如,server.1的myid文件内容就是“1”。注意,请确保每个服务器的myid文件中的数字不同,并且和自己坐在机器的zoo.cfg中server.id=host:port:port的id值一致。另外,id的范围是1~255.

3.创建myid文件。

在dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,和zoo.cfg中当前机器的编号对应上。

4.安装相同的步骤,为其他机器配置zoo.cfg和myid文件。

5.启动ZooKeeper服务

至此,所有的选项都已经基本配置完毕,可以使用%ZK_HOME%bin目录下的zkServer.sh脚本进行服务器的启动,如下:

$sh zkServer.sh start

JMX enabled by default

Using config:/opt/zookeeper-3.4.3/bin/../conf/zoo.cfg

Starting zookeeper .... STARTED

6.验证服务器。

启动完成后,可以使用如下命令来检查服务器启动是否正常:

$telnet 127.0.0.1 2181

Trying 127.0.0.1....

Connected to localhost.localdomain(127.0.0.1).

Escape character is '^]'

stat

Zookeeper version:3.4.3-1240972,built on 12/28/2016 10:48 GMT

Clients:

/127.00.1:502557[0](queued=0,recved=1,sent=0)


latency min/avg/max:0/1/4489

Received:8444689

Sent:993100

Outstanding:0

Zxid:0x600084344

Mode:leader

Node count:37

上面就是通过Telnet方式,使用stat命令进行服务器启动的验证,如果出现和上面类似的输出信息,就说明服务器已经正常启动了。


运行服务

启动服务

常见启动Zookeeper服务的方式由两种:

java命令行:

具体方法是在Zookeeper3.4.3版本中的%ZK_HOME%目录下执行如下命令:

$java -cp zookeeper -3.4.3.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg

使用ZooKeeper自带的启动脚本来启动ZooKeeper:

在%ZK_HOME%bin目录下有几个有用的脚本。

zkCleanup:清理ZooKeeper历史数据,包括事务日志文件和快照数据文件

zkCli:ZooKeeper的一个简易客户端

zkEnv:设置ZooKeeper的环境变量

zkServer:ZooKeeper服务器的启动,停止和重启脚本


常见异常

在启动的时候,通常会碰到一些异常,下面将对这些常见的异常进行讲解。

端口被占用:

在启动ZooKeeper的时候,可能出现如下“端口被占用”的异常,导致服务器无法正常启动:

java.net.BindException:Address already in user这个异常时java程序员最熟悉的异常之一,导致这个异常的原因通常是因为2181端口被占用。通常的做法就是说检查当前机器上哪个进程正在占用这个端口,确认其端口占用的必要性,将该进程停止后,再一次启动ZooKeeper即可。也可以编辑%ZK_HOME%conf/zoo.cfg文件,更换ZooKeeper的clientPort配置,例如,可以将其设置为2080:

。。。

dataDir=/var/lib/zookeeper/

clientPort=2080

initLimit=5

......

磁盘没有剩余空间:

无论是在ZooKeeper启动还是正常运行过程中,都有可能出现如下“磁盘没有剩余空间”的异常,一旦遇到这个异常,ZooKeeper会立即执行Failover策略,从而退出进程:

java.io.IOException:No space left on device遇到这个问题,通常的做法就是清理磁盘。当然,为了避免以后再次遇到此类磁盘空间满的问题,需要加上对ZooKeeper机器的此案使用量监控和Zookeeper日的自动起立。关于ZooKeeper日志清理,我们在后面介绍。

无法找到myid文件:

ERROR[main:QuorumPeerMain@85]-Invalid config,exiting abnormally

............................

Coused by: java.lang.IllegalArgumentException:/tmp/zookeeper/myid file is missing

。。。。。。。。。。。。。。。。。。。

对于这个问题,只需在数据目录下创建好一个myid文件即可。

集群中其他机器leader选举端口未开:

在集群模式部署下服务器逐台启动的过程中,会碰到类似于下面这样的异常:

- Cannot open channel to 2 at election address /122.228.242.241.3888

这是由于在启动过程中,虽然当前机器启动了,但其他机器还没有启动完成,因此无法和其他机器在响应端口上进行连接。对于这个问题,只要快速启动集群中的其他机器即可。另外,上面的异常中表明了是3888这个端口无法创建连接,这是因为ZooKeeper默认使用3888端口进行Leader选举过程中的投票通信,关于ZooKeeper的Leader选举,后面会详细讲解。

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值