Zookeeper 简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
一,Zookeeper 安装环境搭建
环境配置
需要搭建三个节点:1个主节点,2个从节点。在配置前需要配置好虚拟机网络静态IP,同步时间,关闭防火墙和使用Linux SSH(安全Sheel)。按照下面设立的Linux环境提供的步骤,本次采用的系统为centos-7-x86_64、单核、2GB内存。其三个节点分别取名为master、slave1和slave2。
(1)配置虚拟机网络模式
1.虚拟机网络模式设置为NET模式。选中master节点,右击,在弹出的快捷菜单中选“设置”命令。在“虚拟机设置-硬件-网络适配器”中进行设置。
2.使用命令reboot
重启系统。
(2)配置虚拟机静态IP
1.配置虚拟机网络同样的网段,选择“编辑”——“虚拟网络编辑器”命令进行配置。
2.进入编辑器之后,设置DHCP的子网IP为192.168.130.128~254。
3.NAT设置网关为192.168.130.2
4.配置centos 7系统的静态ip。
(1) 修改主机名
命令1:hostnamectl set hostname master
命令2:vi /etc/sysconfig/network
修改内容如下:
#created by anaconda
NETWORKING=yes
HOSTNAME=master
(2) 修改IP地址
- 修改网卡配置
命令:vi /etc/sysconfig/network-scripts/ ifcfg-ens33
修改内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=583eeb6a-d778-4a01-8f70-f8077741b9e8
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.130.130
NETMASK=255.255.255.0
PREFIX=24
GATEWAY=192.168.130.2
DNS1=192.168.130.2
- 重启网络服务
命令:systemctl restart network
(3) 修改IP地址和主机名的映射关系
命令:vi /etc/hosts
192.168.130.130 master
192.168.130.131 slave1
192.168.130.132 slave2
- 关闭防火墙
命令:
systemctl stop firewalld.service
systemctl disable firewalld.service
(3)SSH设置和密钥生成
SSH设置需要在集群上执行不同的操作,如启动、停止和分布式守护Shell操作。进行身份验证不同的Hadoop用户,需要一种用于Hadoop的用户提供的公钥/私钥对,并使不同的用户共享。以下的命令用于生成使用SSH密钥值对。复制公钥id_rsa.pub为authorized_keys,并提供所有者,读写权限到authorized_keys文件。
命令:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/ .ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
验证SSH:ssh localhost
二,Zookeeper安装
(1)下载安装Zookeeper
下载zookeeper-3.4.10.tar.gz,上传到目录/opt/software下。通过以下命令解压到目录/opt/module中。
命令:tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
(2)配置zookeeper环境变量
在/etc/profile文件最后追加相关内容。
vi /etc/profile
追加内容如下:
#ZOOKEEPER
export ZOOKEEPER_HOME= /opt/module/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin
(3)在/opt/module/zookeeper-3.4.10/目录下创建data/zkData
命令:mkdir -p data/zkData
(4)重命名/opt/module/zookeeper-3.4.10/conf目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
(5)配置zoo.cfg文件
dataDir=/opt/module/zookeeper-3.4.10/data/zkData
###增加如下配置
#######################cluster#######################
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
三,配置Zookeeper集群
1. 在/opt/module/zookeeper-3.4.10/data/zkData目录下创建一个myid的文件
touch myid
编辑myid文件,在文件中添加与server对应的编号:
master的myid文件内容:1
2. 分发zookeeper所有文件
(1)将master虚拟机上的Zookeeper分发到slave1和slave2虚拟机上。
虚拟机slave1:
scp -r $ZOOKEEPER_HOME root@slave1:$ZOOKEEPER_HOME
虚拟机slave2:
scp -r $ZOOKEEPER_HOME root@slave2:$ZOOKEEPER_HOME
(2)将master虚拟机上环境分发到slave1和slave2虚拟机上。
虚拟机slave1:
scp /etc/profile root@slave1:/etc/profile
虚拟机slave2:
scp /etc/profile root@slave2:/etc/profile
(3)在slave1和slave2虚拟机上分别执行下列命令让环境变量生效。
source /etc/profile
3. 修改myid文件中内容为2、3
slave1的myid文件内容:2
slave2的myid文件内容:3
4. 分别启动Zookeeper
slave0:zkServer.sh start
slave1:zkServer.sh start
slave2:zkServer.sh start