14.Ubuntu16.04安装zookeeper
1.准备环境
准备三台已经安装jdk的服务器,可以参考先前文章
a.VMware安装Ubuntu 16.4.6 Server
b.Ubuntu 16.04 离线安装open jdk 8和 Maven
192.168.88.41
192.168.88.42
192.168.88.43
2.下载zookeeper到服务器
三台机器分别创建目录/zookeeper
mkdir zookeeper
下载zookerper文件
wget https://downloads.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
当然也可以自己去网站下载,然后上传到三个服务器
然后进入zookeeper目录分别解压到当前目录
tar zxvf apache-zookeeper-3.6.3-bin.tar.gz
创建数据目录和日志目录
mkdir /zookeeper/zkData
mkdir /zookeeper/log
mkdir /zookeeper/log/data_log
/zookeeper/zkData路径下创建myid文件,同时写入内容1 ,命令如下,分别对三个机器进行执行命令
echo 1 > /zookeeper/zkData/myid #192.168.88.41
echo 2 > /zookeeper/zkData/myid #192.168.88.42
echo 3 > /zookeeper/zkData/myid #192.168.88.43
进入目录的conf目录下复制zoo_sample.cfg文件,为zoo.cfg文件(执行命令: cp zoo_sample.cfg zoo.cfg)。zoo.sample.cfg文件是官方所给的zk配置文件的demo,zk启动默认加载的是zoo.cfg文件。
cd /zookeeper/apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
三台机器都配置成一样(原来的删掉)
#间隔都是使用tickTime的倍数来表示的,例如initLimit=10就是tickTime的十倍等于2W毫秒 tickTime=2000 # The number of ticks that can pass between, sending a request and getting an acknowledgement # 心跳最大延迟时间,如果leader在规定的时间内无法获取到follow的心跳检测响应,则认为节点已脱离 syncLimit=5 # the directory where the snapshot is stored. do not use /tmp for storage, /tmp here is just. example sakes. # 用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里 dataDir=/zookeeper/zkData # the port at which the clients will connect,ZK端口 clientPort=2181 # the maximum number of client connections. increase this if you need to handle more clients # 允许连接的客户端数目,0-不限制,通过 IP 来区分不同的客户端 maxClientCnxns=60 #将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。避免日志和快照之间的竞争 dataLogDir=/zookeeper/log/data_log # The number of snapshots to retain in dataDir #用于配置zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件,最小值时三,如果比3小,会自动调整为3 #autopurge.snapRetainCount=3 # Purge task interval in hours. Set to "0" to disable auto purge feature #配套snapRetainCount使用,用于配置zk进行历史文件自动清理的频率,如果参数配置为0或者小于零,就表示不开启定时清理功能,默认不开启 #autopurge.purgeInterval=1 ##集群配置 # The number of ticks that the initial, synchronization phase can take # follow服务器在启动的过程中会与leader服务器建立链接并完成对数据的同步,leader服务器允许follow在initLimit时间内完成,默认时10.集群量增大时 #同步时间变长,有必要适当的调大这个参数, 当超过设置倍数的 tickTime 时间,则连接失败 initLimit=10 #server.A=B:C:D:其中 A 数字,表示是第几号服务器. dataDir目录下必有一个myid文件,里面只存储A的值,ZK启动时读取此文件,与下面列表比较判断是哪个server # B 是服务器 ip ;C表示与 Leader 服务器交换信息的端口;D 表示的是进行选举时的通信端口。 server.1=192.168.88.41:2888:3888 server.2=192.168.88.42:2889:3889 server.3=192.168.88.43:2890:3890 # 配置成observer模式 #peerType=observer # 注意观察者角色的末尾,需要拼接上observer #server.4=10.2.143.38:2886:3886:observer
保存
在zk的bin目录下执行 ./zkServer.sh start 启动zk,默认走的是zoo.cfg配置文件,也可以在启动命令上指定启动配置文件./zkServer.sh start zoo.cfg
cd /zookeeper/apache-zookeeper-3.6.3-bin/bin/
./zkServer.sh start zoo.cfg
三台设备一起启动,稍后查看状态
验证是否启动成功
./zkServer.sh status
一个leader 两个 follower
OK 至此安装成功
注意:
服务器zk版本一定要和客户端引用版本一致
报错:Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
因为在安装时,选用了 apache-zookeeper-{version}.tar.gz 包而不是 apache-zookeeper-{version}-bin.tar.gz 包,后面使用 apache-zookeeper-{version}-bin.tar.gz (文件名包含bin)重新安装后,可以解决问题。
开机自启动
修改jdk路径
vi /zookeeper/apache-zookeeper-3.6.3-bin/bin/zkEnv.sh
添加JAVA_HOME
JAVA_HOME="/opt/jdk1.8.0_231/"
保存
创建启动服务zookeeper.service
cd /etc/systemd/system touch zookeeper.service vi zookeeper.service
[Unit] # Zookeeper服务的描述 Description=Zookeeper Service # 服务依赖—在什么服务之后启动,一般为在网络服务启动后启动 After=network.target [Service] # 服务类型—如果是shell脚本的方式,则Type=forking,否则不指定作何值(也就是去掉该配置项) Type=forking # 启动环境参数 # 此脚本指定了Zookeeper日志和Java的目录 # 启动命令 ExecStart=/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start # 停止命令 ExecStop=/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop # 重启命令 ExecReload=/zookeeper/apache-zookeeper-3.6.3-bin/bin/zkServer.sh restart [Install] WantedBy=multi-user.target
#刷新配置 systemctl daemon-reload #设置开机生效 systemctl enable zookeeper.service #启动服务 systemctl start zookeeper.service #停止服务 systemctl stop zookeeper.service #重启服务 systemctl restart zookeeper.service #服务状态 systemctl status zookeeper.service
附:
查看版本
echo stat|nc 127.0.0.1 2181
报错 stat is not executed because it is not in the whitelist.
这是因为当前的命令没有在zookeeper的执行白名单中。
我们需要在zoo.cfg最下面添加如下命令开启
遇到連接慢且報: UnknownHostException 異常大概率是因为zookeeper客户端连接zk服务器的时候没有解析到主机
临时解决办法就是现在客户端机器 vi /etc/hosts
增加ZK主机对应关系
192.168.88.41 192.168.88.41 192.168.88.42 192.168.88.42 192.168.88.43 192.168.88.43