准备服务器
- 192.168.214.150 centos6-1
- 192.168.214.151 centos6-2
- 192.168.214.152 centos6-3
Java环境
查看java版本
[root@centos6-1 ~]# java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
[root@centos6-1 ~]#
使用Oracle JDK1.8,卸载OpenJDK
[root@centos6-1 ~]# yum remove java
使用lrzsz上传压缩包jdk-8u65-linux-x64.tar.gz到虚拟机(三种方式实现Linux的文件上传下载:https://blog.csdn.net/weixin_37490221/article/details/80844825)
[root@centos6-1 ~]# cd /export/servers/
[root@centos6-1 servers]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring jdk-8u65-linux-x64.tar.gz...
100% 177012 KB 14751 KB/sec 00:00:12 0 Errors
[root@centos6-1 servers]#
解压安装
[root@centos6-1 servers]# ls
jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# tar -zvxf jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65 jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# rm -rf jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]#
配置环境变量
[root@centos6-1 servers]# vi /etc/profile
在文件末尾添加以下内容:
JAVA_HOME=/export/servers/jdk1.8.0_65
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
重新加载环境变量
[root@centos6-1 servers]# source /etc/profile
[root@centos6-1 servers]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
[root@centos6-1 servers]#
检查服务器环境
1.统一时间
#centos6-1
[root@centos6-1 servers]# date
Wed Jun 27 20:03:19 CST 2018
#centos6-2
[root@centos6-2 ~]# date
Wed Jun 27 19:10:09 CST 2018
#centos6-3
[root@centos6-3 ~]# date
Fri Jun 29 00:11:32 CST 2018
发现时间不一致,统一使用北京时间(此处操作需要连接外网),在三台主机下分别执行
[root@centos6-1 servers]# ntpdate cn.pool.ntp.org
29 Jun 00:11:13 ntpdate[30493]: step time server 182.92.12.11 offset 101197.616054 sec
[root@centos6-1 servers]# date
Fri Jun 29 00:11:41 CST 2018
[root@centos6-1 servers]#
2.关闭防火墙
直接关闭防火墙并设置开机不启动
[root@centos6-1 servers]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@centos6-1 servers]# chkconfig iptables off
[root@centos6-1 servers]#
3.设置ip主机映射
[root@centos6-1 servers]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.214.150 centos6-1
192.168.214.151 centos6-2
192.168.214.152 centos6-3
[root@centos6-1 servers]#
已经配置,注意这里三台机器都得配置
Zookeeper下载安装
此处省略下载上传过程
扫描二维码关注公众号,回复: 2644126 查看本文章
1.解压安装
[root@centos6-1 ~]# cd /export/servers/
[root@centos6-1 servers]# ls
jdk1.8.0_65 zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# tar -zvxf zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65 zookeeper-3.4.5.tar.gz zookeeper-3.4.5
[root@centos6-1 servers]# rm -rf zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65 zookeeper-3.4.5
2.配置环境变量
获取Zookeeper所在目录路径
[root@centos6-1 servers]# cd zookeeper-3.4.5/
[root@centos6-1 zookeeper-3.4.5]# pwd
/export/servers/zookeeper-3.4.5
[root@centos6-1 zookeeper-3.4.5]#vi /etc/profile
将以下内容追加到profile文件末尾
export ZOOKEEPER_HOME=/export/servers/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
更新环境变量
[root@centos6-1 zookeeper-3.4.5]#source /ete/profile
3.修改Zookeeper配置文件
[root@centos6-1 zookeeper-3.4.5]# mkdir -p /export/data/zkdata
[root@centos6-1 zookeeper-3.4.5]# cd conf/
[root@centos6-1 conf]# cp zoo_sample.cfg zoo.cfg
[root@centos6-1 conf]# vi zoo.cfg
在zoo.cfg文件中添加一下内容
//这个在源文件中已经配置,修改即可
dataDir=/export/data/zkdata //指定ZooKeeper数据存储目录
//直接在文件中追加
server.1=centos6-1:2888:3888 //server.服务器编号=主机名:心跳端口:选举端口)
server.2=centos6-2:2888:3888
server.3=centos6-3:2888:3888
创建myid文件
[root@centos6-1 conf]# cd /export/data/zkdata
[root@centos6-1 zkdata]# echo 1 > myid
[root@centos6-1 zkdata]# cat myid
1
[root@centos6-1 zkdata]#
此处的myid文件的内容取决于当前服务器的编号,这是在上面zoo.cfg文件中配置的
同步至其他集群服务器
1.同步安装的JDK(先配置ssh免密登录)
[root@centos6-1 zkdata]# scp -r /export/servers/jdk1.8.0_65/ root@centos6-2:/export/servers/
[root@centos6-1 zkdata]# scp -r /export/servers/jdk1.8.0_65/ root@centos6-3:/export/servers/
2.同步安装的ZooKeeper
[root@centos6-1 zkdata]# scp -r /export/servers/zookeeper-3.4.5/ root@centos6-2:/export/servers/
[root@centos6-1 zkdata]# scp -r /export/servers/zookeeper-3.4.5/ root@centos6-3:/export/servers/
3.同步环境变量
[root@centos6-1 zkdata]# scp -r /etc/profile root@centos6-2:/etc/
[root@centos6-1 zkdata]# scp -r /etc/profile root@centos6-3:/etc/
4.创建centos6-2和centos6-3的myid文件(首先对应文件夹已经创建)
[root@centos6-2 zkdata]# echo 2 > myid
[root@centos6-3 zkdata]# echo 3 > myid
5.注意防火墙关闭,时间同步和主机ip映射
逐一启动ZooKeeper
//启动centos6-1
[root@centos6-1 zkdata]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@centos6-1 zkdata]#
//启动centos6-2
[root@centos6-2 ~]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@centos6-2 ~]#
//启动centos6-3
[root@centos6-3 ~]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@centos6-3 ~]#
查看ZooKeeper状态
//centos6-1是follower角色
[root@centos6-1 zkdata]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@centos6-1 zkdata]#
//centos6-2是leader角色
[root@centos6-2 ~]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@centos6-2 ~]#
//centos6-3是follower角色
[root@centos6-3 ~]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@centos6-3 ~]#
如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查
总结
目前为止一个完整的ZooKeeper分布式集群已经搭建成功了,当中的配置意义并没有进行详细解释,如果你搭建成功了,你可以再去了解每个配置的意义。下面提供基本解释:
参数 | 解释 |
---|---|
tickTime | 这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。 |
initLimit | 这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。 |
syncLimit | 这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。 |
dataDir | 顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里; |
clientPort | 这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求; |
server.A=B:C:D | A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。 |