搭建zookeeper集群步骤和出现问题解决方案

文章目录

  • 1.搭建前准备
    • 1.1 ssh免密码登录配置方法
    • 1.2 安装JDK
    • 1.3 下载并配置zookeeper
  • 2.zookeeper集群搭建
    • 2.1 启动zookeeper服务
  • 3. 启动问题

1.搭建前准备

1.1 ssh免密码登录配置方法

准备至少三台主机服务器,如我的主机服务器分别为:

服务器名称 IP
服务器master 81.68.172.91
服务器slave1 121.43.177.90
服务器slave2 114.132.222.63
  1. 首先在服务器master服务器上生成秘钥,生成秘钥命令如下:
    ssh-keygen
 [root@master ~]$ ssh-keygen
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/usera/.ssh/id_rsa):
 Created directory '/home/usera/.ssh'.
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /home/usera/.ssh/id_rsa.
 Your public key has been saved in /home/usera/.ssh/id_rsa.pub.
 The key fingerprint is:
 39:f2:fc:70:ef:e9:bd:05:40:6e:64:b0:99:56:6e:01 usera@serverA
 The key's randomart image is:
 +--[ RSA 2048]----+
 | Eo* |
 | @ . |
 | = * |
 | o o . |
 | . S . |
 | + . . |
 | + . .|
 | + . o . |
 | .o= o. |
 +-----------------+

运行命令后,不用输入文字,直接一路回车即可在/home/登录用户名/.ssh下生成两个文件:

  • id_rsa 私钥
  • id_rsa.pub 公钥(待会将公钥传到另外两台服务器上,并追加到authorized_keys文件)
  1. 使用命令scp id_rsa.pub 用户名@121.43.177.90:/home将公钥分别传输到两台slave服务器上,scp命令可以在两台网络主机之间复制文件,点击回车执行命令,将会要求输入slave服务器的该用户登录密码。
  2. 分别登录slave1和slave2,并查看一下slave1和slave2下是否含有“authorized_keys”文件(一般在.ssh文件夹下),没有则创建“authorized_keys”文件,并修改权限为“600”:
[usera@server1 ~]$  touch authorized_keys
[usera@server1 ~]$  chmod 600 authorized_keys
  1. 分别在slave1和slave2服务器上将master服务器上传过来的 id_rsa.pub公钥追加到各自的“authorized_keys”文件中:
[usera@server1 ~]$    cat id_rsa.pub >> /root/.ssh/authorized_keys

这样在master主机通过scp命令复制文件到两台slave主机的时候就可以免密码了。

1.2 安装JDK

下载Linux环境下的jdk1.8

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
搭建zookeeper集群步骤和出现问题解决方案_第1张图片
下载JDK压缩包,然后上传到服务器上,然后通过解压缩命令:

[root@localhost /home/geek]# tar -zxvf jdk-8u181-linux-x64.tar.gz

然后再将其解压后的文件夹重命名为jdk1.8:

[root@localhost /home/geek]# mv jdk-8u181-linux-x64 jdk1.8

然后配置jdk环境变量:

[root@localhost /home/geek]# vim /etc/profile

按i进入编辑,在profile文件尾部添加如下内容

export JAVA_HOME=/home/geek/jdk1.8  #jdk安装目录

export JRE_HOME=${JAVA_HOME}/jre
 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
 
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
 
export PATH=$PATH:${JAVA_PATH}

Esc --> :wq

保存并退出编辑

通过命令source /etc/profile让profile文件立即生效

[root@localhost /home/geek]# source /etc/profile

安装好JDK以后,可以将jdk1.8的包用scp命令分别传到slave1和slave2的对应文件夹下,如下:

[root@localhost /home/geek]# scp -r jdk1.8 [email protected]:/home/geek

需要加上 -r 参数,递归的复制整个jdk1.8文件夹将其复制到slave服务器上,然后在slave服务器上配置好各自的jdk环境变量。

1.3 下载并配置zookeeper

到zookeeper官网的下载页面下载zookeeper的压缩包,此时注意,官网有两种zookeeper压缩包,带bin的是直接使用的非源码包(我们需要下载这个zookeeper),而另一个不带bin的压缩包是源码包,需要编译才能运行。
下载好后将其在master主机上解压缩:

[root@localhost /home/geek]#   tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz

然后将其重命名为zookeeper文件名:

[root@localhost /home/geek]#   mv apache-zookeeper-3.5.8-bin zookeeper

然后进入conf文件夹,复制zoo_sample.cfg为zoo.cfg:

[root@localhost /home/geek/zookeeper/conf]#   cp zoo_sample.cfg zoo.cfg

修改zoo.cfg配置文件中以下内容:
dataDir=/opt/zookeeper/data
配置环境变量:
转到root用户,首先进入到 /etc/profile 目录,添加相应的配置信息:

#set zookeeper environment

export ZK_HOME=/opt/soft/zookeeper/apache-zookeeper-3.5.8-bin/
export PATH=$PATH:$ZK_HOME/bin

然后通过如下命令使得环境变量生效:

source /etc/profile

2.zookeeper集群搭建

  1. 进入zookeeper的conf文件夹,编辑zoo.cfg配置文件,如下:
    增加以下信息:比如配置master
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888
    master、slave1和slave2分别代表三个服务器IP,需要通过修改hosts文件加入master、slave1和slave2与三个服务器的IP映射,然后通过scp将hosts文件分别复制并覆盖slave1和slave2对应hosts文件。
    zookeeper 的三个端口作用

    1、2181 : 对 client 端提供服务
    2、2888 : 集群内机器通信使用
    3、3888 : 选举 leader 使用
    按 server.id = ip:port:port 修改集群配置文件

  2. dataDir 指定的目录下,创建 myid 文件
    对应主机中该文件中写上server.x 即可,如master写1

 [root@master /opt/zookeeper/data]#   echo 1 > myid
 [root@master /opt/zookeeper/data]#   cat  myid
 1
  1. 通过scp命令将zookeeper复制到其他slave主机对应位置。

  2. 搞好以后,分别启动master、slave1和slave2主机的zookeeper:
    ============================================================

2.1 启动zookeeper服务

============================================================
启动命令:

zkServer.sh start

停止命令:

zkServer.sh stop

重启命令:

zkServer.sh restart

查看集群节点状态:

zkServer.sh status
  • 启动成功以后在各个服务器用查看状态命令查询如果分别出现flower/leader两种mode模式,即表示成功:
root@VM-8-13-ubuntu:/home/geek/zookeeper/logs# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/geek/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@linuxprobe:/home/geek/zookeeper/logs# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/geek/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
root@iZbp10sz66ubwpdg3fy8zwZ:/home/geek# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/geek/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
  • leader—领导者 只有一个
  • flower—跟随者 多个

3. 启动问题

  1. 启动前需要关闭防火墙(生产环境需要打开对应端口)
    systemctl stop firewalld
    如果部署在云服务上,需要到云平台的服务器防火墙那里设置开放2188、2888和3888端口,master、slave1、slave2三个服务器都要开放对应端口。

  2. 云服务上搭建zookeeper集群,Zookeeper启动失败,报错 Cannot open channel to 3 at election address
    解决思路:
    在每个znode上。我修改了配置文件$ ZOOKEEPER_HOME / conf / zoo.cfg,将机器IP设置为“0.0.0.0”,同时保持其他2个znode的IP地址。见下文

    master服务器部署zookeeper1,配置文件server如下:

    server.1=0.0.0.0:2888:3888
    server.2=120.78.123.192:2888:3888
    server.3=192.168.11.108:2888:3888

    slave1部署zookeeper2,配置文件server如下:

    server.1=47.106.132.191:2888:3888
    server.2=0.0.0.0:2888:3888
    server.3=192.168.11.108:2888:3888

    slave2部署zookeeper3.配置文件的server如下:

    server.1=47.106.132.191:2888:3888
    server.2=120.78.123.192:2888:3888
    server.3=0.0.0.0:2888:3888

  3. 如果启动时报错,可以通过查看zookeeper文件夹里面的logs日志,来找到zookeeper集群出错原因:

 root@VM-8-13-ubuntu:/home/geek/zookeeper/logs# cat zookeeper-root-server-VM-8-13-ubuntu.out

你可能感兴趣的:(ssh,服务器,运维)