本次实验将使用centos7.2系统部署部署ZooKeeper集群因为Kafka依赖于ZooKeeper,所以我们一并进行部署。
实验所示的资源软件已上传至百度网盘,需要自取。
链接:https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd=2333
提取码:2333
复制这段内容后打开百度网盘手机App,操作更方便哦。
ip网段规划如下:
IP | 主机名 | 节点 |
172.16.51.23 | zookeeper1 | 集群节点 |
172.16.51.32 | zookeeper2 | 集群节点 |
172.16.51.41 | zookeeper3 | 集群节点 |
既然是集群自然有多台主机了,本次实验则使用3台主机。我们可以通过克隆的方式快速搭建它们。至于网卡模式不做要求,nat和主机都可以。仅取决与你是否想让它们能通外网。
首先打开我们已经安装好的centos7.2系统,我们先做克隆前的环境准备。先配置一下ip地址,本地镜像源和主机映射文件还要关闭防火墙。
然后关闭防火墙。
移走本地的网络源,通过ssh上传本地资源软件包然后做个本地源仓库挂载。默认都上传在root目录下。
编写一下主机映射文件。
[root@localhost ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.51.23 zookeeper1
172.16.51.32 zookeeper2
172.16.51.41 zookeeper3
安装一下java环境。可以用命令查看一下能不能找到java版本来验证java是否安装成功。不过一般yum命令安装完了都是成功的。。。。我都不会再去打这个命令。
[root@localhost ~]# yum install -y java java-devel
[root@localhost ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
ssh本地上传zookeeper软件包准备解压使用。
[root@localhost ~]# tar -zxvf zookeeper-3.4.14.tar.gz
进入zookeeper-3.4.14/conf目录下,修改zoo_sample.cfg文件为zoo.cfg,并编辑该文件到文件末尾添加3个服务节点参数即可。其他不用动一般都是默认的端口之类的都能对上运行。
[root@localhost ~]# cd zookeeper-3.4.14/conf/
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg
[root@localhost conf]# vi zoo.cfg
接着在3台机器dataDir目录(此处为/tmp/zookeeper)下,分别创建一个myid文件,文件内容分别只有一行,其内容为1,2,3。即文件中只有一个数字,这个数字即为上面zoo.cfg配置文件中指定的值。ZooKeeper是根据该文件来决定ZooKeeper集群各个机器的身份分配。先在1节点这边创建一下,然后克隆完后记得修改2和3节点的myid。
接着我们关闭这个虚拟机保存一个快照开始克隆。
选择完整克隆,防止zookeeper1节点如果出问题崩了牵连到其他2个节点。
zookeeper3也以相同的方式克隆,最后如下图所示。
接下来不要乱,开启这些虚拟机修改它们对应的ip地址和主机名以及myid数字标识。
zookeeper2节点地址
zookeeper3节点地址
配置完后记得重启网络服务包括zookeeper1节点。
然后修改它们各自的主机名,即使这边已经根据主机映射文件智能更新获取到了主机名,我们也要手动修改一下保险一点。
[root@zookeeper1 ~]# hostnamectl set-hostname zookeeper1
[root@zookeeper1 ~]# bash
[root@zookeeper2 ~]# hostnamectl set-hostname zookeeper2
[root@zookeeper2 ~]# bash
[root@zookeeper3 ~]# hostnamectl set-hostname zookeeper3
[root@zookeeper3 ~]# bash
在2节点和3节点上修改一下myid。3节点自己改成3,这里不截图贴了。
最后在3个节点的zookeeper启动目录下启动服务。
[root@zookeeper3 ~]# cd zookeeper-3.4.14/bin/
[root@zookeeper3 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
如果出现一个服务查看状态时报错不用紧张,先把所有节点的服务都启动好,然后再回来查看就行了。
可以看到,3个节点,zookeeper2为leader,其他的都是follower。
到这里为止zookeeper集群配置完毕,接着我们直接开始配置Kafka集群。
当时做的时候忘记把Kafka服务包也提前上传了,所以这边就需要手动上传给这三台机子了。
也可以选择上传给其中一台然后使用scp命令拷贝给另外两台。
因为是上传到root目录下所以需要cd回到root目录下去解压。
三个节点都需要解压哦。
修改Kafka配置文件,因为3个节点有需要相同注释修改的部分,所以我们可以先修改好这部分然后scp传给另外两个节点进行覆盖。
在zookeeper1节点,进入kafka_2.11-1.1.1/config目录下,编辑server.properties文件。
在配置文件中找到以下两行并注释掉。
[root@zookeeper1 config]# scp server.properties root@172.16.51.32:/root/kafka_2.11-1.1.1/config/server.properties
The authenticity of host '172.16.51.32 (172.16.51.32)' can't be established.
ECDSA key fingerprint is a2:06:6f:65:a3:1f:9c:53:91:6d:0a:81:d0:6f:da:6a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.51.32' (ECDSA) to the list of known hosts.
root@172.16.51.32's password:
server.properties 100% 6854 6.7KB/s 00:00
[root@zookeeper1 config]# scp server.properties root@172.16.51.41:/root/kafka_2.11-1.1.1/config/server.properties
The authenticity of host '172.16.51.41 (172.16.51.41)' can't be established.
ECDSA key fingerprint is a2:06:6f:65:a3:1f:9c:53:91:6d:0a:81:d0:6f:da:6a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.51.41' (ECDSA) to the list of known hosts.
root@172.16.51.41's password:
server.properties 100% 6854 6.7KB/s 00:00
[root@zookeeper1 config]#
接着再逐个节点修改不一样的部分。
1节点:
直接在文件末尾添加条目。137这些是行数序号不要抄。
137 broker.id=1
138 zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181
139 listeners = PLAINTEXT://172.16.51.23:9092
2节点同理:
broker.id=2
zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181
listeners = PLAINTEXT://172.16.51.32:9092
3节点:
[root@zookeeper3 ~]# vi kafka_2.11-1.1.1/config/server.properties
broker.id=3
zookeeper.connect=172.16.51.23:2181,172.16.51.32:2181,172.16.51.41:2181
listeners = PLAINTEXT://172.16.51.41:9092
最后同样进入到启动目录启动服务。
1节点:
[root@zookeeper1 config]# cd
[root@zookeeper1 ~]# cd kafka_2.11-1.1.1/bin/
[root@zookeeper1 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper1 bin]# jps
10336 Kafka
2753 QuorumPeerMain
10405 Jps
[root@zookeeper1 bin]#
2:
[root@zookeeper2 ~]# cd
[root@zookeeper2 ~]# cd kafka_2.11-1.1.1/bin/
[root@zookeeper2 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper2 bin]# jps
2708 Kafka
2327 QuorumPeerMain
2775 Jps
[root@zookeeper2 bin]#
3:
[root@zookeeper3 ~]# cd
[root@zookeeper3 ~]# cd kafka_2.11-1.1.1/bin/
[root@zookeeper3 bin]# ./kafka-server-start.sh -daemon ../config/server.properties
[root@zookeeper3 bin]# jps
2327 QuorumPeerMain
2700 Kafka
2767 Jps
[root@zookeeper3 bin]#
接着我们测试一下服务。
在zookeeper1节点,进入kafka_2.11-1.1.1/bin目录下,创建topic命令
如果成功的话,会输出“Created topic "test".”。
[root@zookeeper1 bin]# ./kafka-topics.sh --create --zookeeper 172.16.51.23:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
[root@zookeeper1 bin]#
查看topic,虽然topic是在172.16.51.23上创建的,但是在其他机器上也能看到。我们可以到2和3节点的启动目录中使用命令查看。
[root@zookeeper2 bin]# ./kafka-topics.sh --list --zookeeper 172.16.51.32:2181
test
[root@zookeeper2 bin]#
[root@zookeeper3 bin]# ./kafka-topics.sh --list --zookeeper 172.16.51.41:2181
test
[root@zookeeper3 bin]#
测试成功!
那么centos7.2系统部署ZooKeeper集群和Kafka集群(集群应用系统商城前置环境)全部完成!