准备至少三台主机服务器,如我的主机服务器分别为:
服务器名称 | IP |
---|---|
服务器master | 81.68.172.91 |
服务器slave1 | 121.43.177.90 |
服务器slave2 | 114.132.222.63 |
[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下生成两个文件:
[usera@server1 ~]$ touch authorized_keys
[usera@server1 ~]$ chmod 600 authorized_keys
[usera@server1 ~]$ cat id_rsa.pub >> /root/.ssh/authorized_keys
这样在master主机通过scp命令复制文件到两台slave主机的时候就可以免密码了。
下载Linux环境下的jdk1.8
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载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环境变量。
到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
进入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 修改集群配置文件
dataDir 指定的目录下,创建 myid 文件:
对应主机中该文件中写上server.x 即可,如master写1
[root@master /opt/zookeeper/data]# echo 1 > myid
[root@master /opt/zookeeper/data]# cat myid
1
通过scp命令将zookeeper复制到其他slave主机对应位置。
搞好以后,分别启动master、slave1和slave2主机的zookeeper:
============================================================
============================================================
启动命令:
zkServer.sh start
停止命令:
zkServer.sh stop
重启命令:
zkServer.sh restart
查看集群节点状态:
zkServer.sh status
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
启动前需要关闭防火墙(生产环境需要打开对应端口)
systemctl stop firewalld
如果部署在云服务上,需要到云平台的服务器防火墙那里设置开放2188、2888和3888端口,master、slave1、slave2三个服务器都要开放对应端口。
云服务上搭建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
如果启动时报错,可以通过查看zookeeper文件夹里面的logs日志,来找到zookeeper集群出错原因:
root@VM-8-13-ubuntu:/home/geek/zookeeper/logs# cat zookeeper-root-server-VM-8-13-ubuntu.out