使用centos7搭建zookeeper集群

下载安装vmware

去官网下载的话需要注册才能下载,随便在网上找了一个15的版本,发现安装失败。网上的解决办法也是千奇百怪没有尝试。然后下载了14的版本,安装成功。

安装centos7

首先去阿里的镜像官网找到centos7相应版本下载,地址:https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/

下载镜像成功后。使用vmware打开,安装centos7系统。过程很简单。

配置centos7的网络

网上的教程都是通过nat模式配置,多数都是centos7中是如何操作的,这里随便贴一篇:https://blog.csdn.net/akipa11/article/details/81414875。如果按照这个操作能成功的话是可以的。但是有时候我们的电脑网络可能没有配置好,会出现一些问题。所以从头捋一下。

按照上边的文章,使用nat模式连接。需要用到vmnet8网络。这个网络设置在我们的电脑、控制面板\网络和 Internet\网络连接中,右键属性。打开ipv4设置。然后选择手动ip地址。

ip地址:xxx.xxx.xxx.x。随便设置,如:192.168.45.100。
子网掩码:255.255.255.0

然后设置虚拟机的网络,设置nat模式下

子网ip:xxx.xxx.xxx.0。跟net8的前三段一样,如:192.168.45.0。
子网掩码:255.255.255.0
网关:xxx.xxx.xxx.2。跟net8的前三段一样,如:192.168.45.2。

其他centos网络设置参考上边文章即可。

通过ping 主机ip:192.168.45.100测试是否能ping通,或者ping www.baidu.com测试。

针对设置的ip不起作用,还会重新生成的解决方案,

首先通过命令,查看当前的ip

ip addr show

 使用centos7搭建zookeeper集群_第1张图片

 然后记录截图中的mac地址,

然后停止掉NetworkManager服务,因为它跟networkservice冲突。

systemctl stop NetworkManager
systemctl disable NetworkManager

然后修改网络配置文件,增加HWADDR=上边截图的mac地址

vi /etc/sysconfig/network-scripts/ifcfg-ens33

 最后重启reboot。ip就会变为你设置的ip。

安装wget

如果通过网络下载一些文件,需要用到wget,系统默认是没有这个命令的,需要通过yum来安装,命令:

yum -y install wget  

其中-y代表弹出的提示默认选y就是yes。

设置屏幕分辨率及字体大小

打开虚拟机之后,会发现界面不是很大,这块就需要修改虚拟机的分辨率,具体参考这篇文章:https://cloud.tencent.com/developer/article/1466317。文章中有个别命令带箭头 需要换成--。

安装SecureCRT FX

CRT是远程命令行工具,FX是支持图形化文件远程传递.直接去官网下载即可,现在下载需要注册登陆。下载之后可以试用30天,否则需要购买,可以去网络上搜索序列号破解版。不过网络上这方面的key比较少。

使用CRT操作起来还是非常方便的,可以开多个窗口,复制粘贴也很方便。用FX传文件更是没得说。

也可以通过windows共享文件夹,centos挂在该文件夹的方式实现共享,参考:http://www.mamicode.com/info-detail-2425151.html

安装JDK

许多应用都需要jdk的支持,所以优先安装jdk,首先去官网下载所需要的安装包,我这边下载的是linux x64.rpm包。

安装方法及环境变量配置参见:https://www.cnblogs.com/fanqisoft/p/10460583.html

安装zookeeper

在usr目录下新建两个文件夹,分别为apps和tools分别用来存放安装的应用和下载的文件。

然后进入到tools目录,使用wget方式下载zookeeper,zookeeper下载地址可以去官网找下载地址。

将tools目录下的gz包解压到app目录下

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz -c /usr/app

因为要把zookeeper/bin目录放入到环境变量,所以尽量不要带zookeeper版本号,否则以后升级需要修改配置文件。
那如何处理呢?通过建立引用的形式,命令如下:

ln -s apache-zookeeper-3.5.6-bin/ zookeeper

 这样的话,zookeeper文件夹就是一个引用,它实际指向zookeeper-3.5.6文件夹。所以ln指令的作用就是解决这种需求。如果很多目录文件夹都需要内部包含一个文件,可以通过ln指令来操作。这样就省去了复制多个文件。省去一些空间。

 接着修改环境变量

vi /etc/profile
G到最后一行
新增两行代码
export ZK_HOME=/usr/app/zookeeper
export PATH=$ZK_HOME/bin:$PATH

接着进入zookeeper目录下conf ,复制一份zoo_sample.cfg文件。打开进行修改。

先修改datadir。

首先创建usr/data/zookeeper文件夹。因为是树级文件夹创建,需要mkdir -p指令。 创建成功后,修改dataDir目录为:/usr/data/zookeeper

操作zookeeper

通过命令启动服务,在conf目录下输入命令:

zkServer.sh start

通过 

zkServer.sh status

查看状态。 

搭建集群

克隆3台虚拟机。打开后先通过命令修改主机名:

vi /etc/hostname

然后修改IP地址

vi /etc/sysconfig/network-scripts/ifcfg-ens33

 有些系统可能自动分配ip就不用配置ip这块了,通过ip addr show可以看到ip。然后reboot重启

这样配置好4台服务器。

然后进入zookeeper/conf,zoo.cfg文件。增加server的配置。

server.1=192.168.43.129:2888:3888
server.2=192.168.43.130:2888:3888
server.3=192.168.43.131:2888:3888
server.4=192.168.43.132:2888:3888:observer

 前边的server.1中1代表当前server的myid。需要在usr/data/zookeeper目录下配置

echo 1 > myid

cat myid //查看myid

 同理4台机器都这样配置,记得在第4台observer的zookeeper的conf.zoo.cfg文件中,增加

peerType=observer

最后,别忘记关闭防火墙

systemctl stop firewalld.service //暂时关闭
systemctl disable firewalld.service //永久关闭

流程必须先暂时关闭,再永久关闭,因为防火墙现在是开着的,需要先关闭。

可以通过systemctl status firewalld.service查看防火墙状态是否关闭。

 最后启动zookeeper/

zkServer.sh start //启动服务
zkServer.sh status //查看服务状态
zkServer.sh stop //停止服务

先执行启动服务,把4台都启动,然后查看每台的状态。

你会看到1台是leader,2台follower,1台observer。

测试服务

启动客户端

zkCli.sh -server 192.168.43.129:2181

 上边的ip地址随意是哪台zookeeper的ip都可以。

启动后 输入-help查看操作命令

具体操作指令参考文章:https://blog.csdn.net/dandandeshangni/article/details/80558383

使用java操作zk

使用idea新建一个空的maven工程,

在pom文件中导入zk依赖:

   
        
            org.apache.zookeeper
            zookeeper
            3.5.6
        
        
            junit
            junit
            4.13-beta-3
        
    

 接着就是写java代码了,首先我们要学会zk的指令,在上一步多练习一下,熟悉指令后,写java代码就很容易了。

首先就是创建客户端连接:

zk=new ZooKeeper(“192.168.43.129:2181”, 20000, null)

然后通过该连接就可以调各种api了。

//创建节点,可以创建四种节点,通过createMode来区分节点类型,如持久节点,持久顺序节点,临时节点,临时顺序节点等。
zk.create(final String path, byte data[], List acl,
            CreateMode createMode)
//获取某节点下的子节点
zk.getChildren()
//获取某节点的数据
zk.getData()
//删除某节点
zk.delete()
。。。。
。。。。

其实只要对指令熟悉,这些javaapi是好写的,这里就不一一列举了。
想省事的话可以去网上搜一个工具类,好好封装一下。

zk工具类框架

curator简介与客户端之间的异同点

常用的zookeeper java客户端:

  • zookeeper原生Java API
  • zkclient
  • Apache curator

ZooKeeper原生Java API的不足之处:

  • 在连接zk超时的时候,不支持自动重连,需要手动操作
  • Watch注册一次就会失效,需要反复注册
  • 不支持递归创建节点

Apache curator:

  • Apache 的开源项目
  • 解决Watch注册一次就会失效的问题
  • 提供的 API 更加简单易用
  • 提供更多解决方案并且实现简单,例如:分布式锁
  • 提供常用的ZooKeeper工具类
  • 编程风格更舒服,

参考文章:https://blog.51cto.com/zero01/2109137,该文章对curator做了详细的介绍以及代码演示。

zk实现分布式锁

理论部分就不重复写了,参考文章:https://blog.csdn.net/kongmin_123/article/details/82081953

代码实现部分:基于curator实现:https://blog.csdn.net/u010028869/article/details/84034261

zk发布订阅

参考文章:上边curator文章里的实现https://blog.51cto.com/zero01/2109137。

你可能感兴趣的:(服务器,zookeeper,集群,分布式锁)