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" 命令进行保存退出
使配置生效:source /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注解

 

原文地址:https://www.cnblogs.com/dw3306/p/12599986.html