Linux下安装Zookeeper
Posted 邓维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下安装Zookeeper相关的知识,希望对你有一定的参考价值。
Linux下安装Zookeeper
Zookeeper简介
- 中间件,提供协调服务
- 作用于分布式系统,发挥其优势,可以为大数据服务
- 支持java,提供了java和c语言的客户端API
zookeeper,中文意思就是动物园管理员,通过zookeeper(群)来管理协调各个集群的分布式组件。
官网:https://zookeeper.apache.org/
Zookeeper特性
一致性:数据一致性,数据按照顺序分批入库
原子性:事务要么成功要么失败,不会局部化
单一视图:客户端连接集群中的任一zk节点,数据都是一致的
可靠性:每次对zk的操作状态都会保存在服务端
实时性:客户端可以读取到zk服务端的最新数据
安装步骤:
1: 首先确保已经安装好了jdk,因为zookeeper是需要依赖java来进行编译的。
下载zookeeper:
进入官网,点击导航菜单Project-->Releases
,可以选择指定版本进行下载。
也可以使用命令直接下载:
# 直接使用命令下载
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
# 解压缩
tar -zxvf zookeeper-3.4.11.tar.gz
环境变量配置:
编辑环境变量配置文件:vi /etc/profile
按 i 进入编辑
在文件末尾位置添加如下内容
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11
export PATH=$PATH:$ZOOKEEPER_HOME/bin
Ctrl + c 然后通过vim的 ":wq"
命令进行保存退出
使配置生效:s
ource /etc/profile
zoo.cfg配置
首先需要进入conf文件夹下将复制zoo_simple.cfg改名为zoo.cfg:cp zoo_sample.cfg zoo.cfg
这样zookeeper就能读取到该配置文件,其主要配置项如下
修改配置:
vi zoo.cfg
# 修改配置项
dataDir=/usr/local/zookeeper-3.4.11/dataDir
# 添加配置项
dataLogDir=/usr/local/zookeeper-3.4.11/dataLogDir
# 保存退出后,创建目录
mkdir dataDir
mkdir dataLogDir
启动、停止zookeeper
启动命令: cd /usr/local/zookeeper-3.4.11/bin
./zkServer.sh start
./zkServer.sh stop
查看zookeeper状态
命令: cd /usr/local/zookeeper-3.4.11/bin
./zkServer.sh status
开放2181端口
因为zookeeper默认的是2181端口号,为了能对外正常访问zookeeper,需要开放2181端口号,或者关闭防火墙;
1对外开放2181端口
命令:
firewall-cmd --zone=public --add-port=2181/tcp --permanent
- –zone:作用域
- –add-port=2181/tcp:添加端口,格式为:端口/通讯协议
- –permanent:永久生效,没有此参数重启后失效
2 重启防火墙
命令: firewall-cmd --reload
3 查看已经开放的端口
命令: firewall-cmd --list-ports
4 停止防火墙
命令: systemctl stop firewalld.service
5 禁止防火墙开机启动,以防虚拟机重启的时候zookeeper被拦截
命令: systemctl disable firewalld.service
配置zookeeper开机启动:
vim /etc/init.d/zookeeper
2:把如下脚本复制进去(根据自己的zookeeper、jdk安装路径修改一下路径):
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
ZK_PATH=/opt/zookeeper/zookeeper-3.4.11/
export JAVA_HOME=/opt/java/jdk1.8.0_221/
case $1 in
start) sh $ZK_PATH/bin/zkServer.sh start;;
stop) sh $ZK_PATH/bin/zkServer.sh stop;;
status) sh $ZK_PATH/bin/zkServer.sh status;;
restart) sh $ZK_PATH/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
然后把脚本注册为Service
chkconfig --add zookeeper
增加权限
chmod +x /etc/init.d/zookeeper
然后启动zookeeper
service zookeeper start
连接到zookeeper客户端:
进入zookeeper的bin目录:
./zkCli.sh
查看有哪些zookeeper节点; ls /
查看注册到zookeeper的服务:
ls /services
配置zookeeper多机器集群:
Zookeeper内部是有投票选举机制来区分主/从的概念,所以机器数需要为奇数台
例如下列三台机器:
192.168.174.226
192.168.174.227
192.168.174.228
1:编辑zoo.cfg文件加入如下配置:
server.1=192.168.174.226:2888:3888
server.2=192.168.174.227:2888:3888
server.3=192.168.174.228:2888:3888
说明:
#server.A=B:C:D 其中
A 是一个数字,表示这个是第几号服务器(zookeeper实例的id编号)
B 是这个服务器的 ip 地址
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
D表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
2:写入一个Zookeeper的ID(即上面的server.1 | .2 | .3)号到myid(创建这个文件,并写入1)文件,这个文件不存在,使用下面的命令会自动创建并写入
echo 1 > /usr/local/zookeeper-3.4.11/tmp/myid
第一台机器就算配置完成了,后面两台机器和第一台前面的配置都一样,只是后面的标识ID需要写入不同的,安照上面的配置
第二台机器 echo 2 > /usr/local/zookeeper-3.4.11/tmp/myid
第三台机器 echo 3 > /usr/local/zookeeper-3.4.11/tmp/myid
3:然后重启zookeeper,你会发现因为Zookeeper内部的选举机制,你会发现一个Leader,两个Follower
springBoot项目中整合Zookeeper
pom依赖:
<!-- SpringBoot整合zookeeper客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <!--如果项目启动失败,可能存在jar包冲突,先排除自带的3.5.3--> <!--<exclusions>--> <!--<exclusion>--> <!--<groupId>org.apache.zookeeper</groupId>--> <!--<artifactId>zookeeper</artifactId>--> <!--</exclusion>--> <!--</exclusions>--> </dependency> <!-- 添加与服务器安装的一样版本的zookeeper --> <!--<dependency>--> <!--<groupId>org.apache.zookeeper</groupId>--> <!--<artifactId>zookeeper</artifactId>--> <!--<version>3.4.9</version>--> <!--</dependency>-->
yml:
#8004 表示注册到zookeeper服务器的支付服务端口号 server: port: 8004 #服务别名----注册zookeeper到注册中心名称 spring: application: name: cloud-provider-payment cloud: zookeeper: connect-string: 192.168.0.108:2181
启动类添加@EnableDiscoveryClient注解
以上是关于Linux下安装Zookeeper的主要内容,如果未能解决你的问题,请参考以下文章