Docker+Kafka+Zookeeper+Redis部署

壹:Zookeeper-docker

       Zookeeper是一个分布式的、高性能的、开源的分布式系统的协调(Coordination)服务,它是一个为分布式应用提供一致性服务的软件。

(一)部署准备

1、下载镜像

[root@hadoop104 ~]# docker pull zookeeper:3.5.8

2、创建局域网

在集群部署在同一个局域网中。

[root@hadoop104 ~]# docker network create --subnet=192.168.10.0/24 zk_net

3、创建节点挂载目录

(1)集群规划,集群部署3台机器:

集群编号ZOO_MY_ID

名称

映射本地端口

ip

存储路径

1

zk1

2181

192.168.10.101

/usr/local zookeeper/zk1

2

zk2

2182

192.168.10.102

/usr/local zookeeper/zk2

3

zk3

2183

192.168.10.103

/usr/local zookeeper/zk3

(2)创建节点挂载目录

[root@hadoop104 ~]# cd /usr/local

# 创建 zookeeper节点配置存放目录

[root@hadoop104 local]# mkdir -p zookeeper/zk1/conf zookeeper/zk2/conf zookeeper/zk3/conf

# 创建 zookeeper节点数据存放目录

[root@hadoop104 local]# mkdir -p zookeeper/zk1/data zookeeper/zk2/data zookeeper/zk3/data

# 创建 zookeeper节点数据日志存放目录

[root@hadoop104 local]# mkdir -p zookeeper/zk1/datalog zookeeper/zk2/datalog zookeeper/zk3/datalog

# 创建 zookeeper节点日志存放目录

[root@hadoop104 local]# mkdir -p zookeeper/zk1/logs zookeeper/zk2/logs zookeeper/zk3/logs

4、创建配置文件

(1)在第1个节点挂载目录zookeeper/zk1/conf下分别创建配置文件zoo.cfg

[root@hadoop104 local]# vim  zookeeper/zk1/conf/zoo.cfg

内容如下:

# Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里

dataDir=/data

# 事务日志存储地点,如果没提供的话使用的则是 dataDir

dataLogDir=/datalog

# 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位

tickTime=2000

# 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)

initLimit=5

# 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)

syncLimit=2

# 默认值为3,不支持以系统属性方式配置。用于配置Zookeeper在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。此参数的最小值为3,如果配置的值小于3会自动调整到3

autopurge.snapRetainCount=3

# 默认值为0,单位为小时,不支持以系统属性方式配置。用于配置Zookeeper进行历史文件自动清理的频率。如果配置为0或负数,表示不需要开启定时清理功能

autopurge.purgeInterval=0

# 默认为60,不支持以系统属性方式配置。从Socket层面限制单个客户端与单台服务器之间的并发连接数,即以ip地址来进行连接数的限制。

# 如果设置为0,表示不做任何限制。仅仅是单台客户端与单个Zookeeper服务器连接数的限制,不能控制所有客户端的连接数总和

maxClientCnxns=60

# 3.5.0中的新功能:当设置为false时,可以在复制模式下启动单个服务器,单个参与者可以使用观察者运行,并且群集可以重新配置为一个节点,并且从一个节点。

# 对于向后兼容性,默认值为true。可以使用QuorumPeerConfig的setStandaloneEnabled方法或通过将“standaloneEnabled = false”或“standaloneEnabled = true”添加到服务器的配置文件来设置它。

standaloneEnabled=false

# 内嵌的管理控制台,停用这个服务

admin.enableServer=false

# 开启四字命令,将所有命令添加到白名单中

4lw.commands.whitelist=*

# 集群中服务的列表,ip设置为局域网zk_net的网段

server.1=192.168.10.101:2888:3888;2181

server.2=192.168.10.102:2888:3888;2181

server.3=192.168.10.103:2888:3888;2181

zoo.cfg配置文件中参数的说明 解释说明:

tickTime=2000

zookeeper里面最小的时间单位为2000ms

initLimit=10

Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了

syncLimit=5

在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题

dataDir

存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能

dataLogDir

事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能

clientPort

客户端连接server的端口,即对外服务端口 ,默认是2181

server.1

配置集群节点

192.168.10.100:2888:3888

主机名, 心跳端口、数据端口 的格式

(2)分别创建第2,3个节点的配置文件

[root@hadoop104 local]# cp zookeeper/zk1/conf/zoo.cfg zookeeper/zk2/conf

[root@hadoop104 local]# cp zookeeper/zk1/conf/zoo.cfg zookeeper/zk3/conf

(二)部署节点

(1)安装并启动第1个节点

[root@hadoop104 ~]# docker run -d --restart always --name zk1 --network zk_net --ip 192.168.10.101 -p 2181:2181  -e ZOO_MY_ID=1 -v /usr/local/zookeeper/zk1/data:/data  -v /usr/local/zookeeper/zk1/datalog:/datalog   -v /usr/local/zookeeper/zk1/logs:/logs  -v /usr/local/zookeeper/zk1/conf/zoo.cfg:/conf/zoo.cfg  zookeeper:3.5.8

(2)安装并启动第2个节点

[root@hadoop104 ~]# docker run -d --restart always --name zk2 --network zk_net --ip 192.168.10.102 -p 2182:2181  -e ZOO_MY_ID=2 -v /usr/local/zookeeper/zk2/data:/data  -v /usr/local/zookeeper/zk2/datalog:/datalog   -v /usr/local/zookeeper/zk2/logs:/logs  -v /usr/local/zookeeper/zk2/conf/zoo.cfg:/conf/zoo.cfg  zookeeper:3.5.8

(3)安装并启动第3个节点

[root@hadoop104 ~]# docker run -d --restart always --name zk3 --network zk_net --ip 192.168.10.103 -p 2183:2181  -e ZOO_MY_ID=3 -v /usr/local/zookeeper/zk3/data:/data  -v /usr/local/zookeeper/zk3/datalog:/datalog   -v /usr/local/zookeeper/zk3/logs:/logs  -v /usr/local/zookeeper/zk3/conf/zoo.cfg:/conf/zoo.cfg  zookeeper:3.5.8

(4)查看节点状态

集群中3个节点,只有一个是leader,其它节点都为flower。

# 第1个节点状态

[root@hadoop104 ~]# docker exec -it zk1 /bin/bash

root@245b7b533b30:/apache-zookeeper-3.5.8-bin# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: follower

# 第2个节点状态

[root@hadoop104 ~]# docker exec -it zk2 /bin/bash

root@36d3223cc495:/apache-zookeeper-3.5.8-bin#  zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: leader

 # 第3个节点状态 

[root@hadoop104 ~]# docker exec -it zk3 /bin/bash

root@450e6cf10d4f:/apache-zookeeper-3.5.8-bin# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /conf/zoo.cfg

Client port found: 2181. Client address: localhost.

Mode: follower

3个节点状态正常,集群搭建完成。

(三)部署结果


贰:Kafka-docker

        Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQucue),主要应用于大数据实时处理领城。它是一个开源的分布式事件流平台( Event Streaming Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。

(一)安装准备

1、集群规划

部署3台broker:

zookeeper集群

(已部署)

zk1宿主机ip:端口

zk2宿主机ip:端口

zk3宿主机ip:端口

192.168.10.101:2181

192.168.10.102:2181

192.168.10.103:2183

192.168.100.128:2181

192.168.100.128:2182

192.168.100.128:2183

kafka集群

kf1宿主机ip:端口

kf2宿主机ip:端口

宿主机ip:端口

192.168.10.201:9092

192.168.10.202:9092

192.168.10.203:9092

192.168.100.128:9022

192.168.100.128:9093

192.168.100.128:9094

2、下载镜像

[root@hadoop104 ~]# docker pull wurstmeister/kafka

(二)安装

1、安装第1个broker

[root@hadoop104 local]# docker run -it -d --restart always --name kf1 --network zk_net --ip 192.168.10.201 -p 9092:9092 -p 19999:9999 -e KAFKA_BROKER_ID=1 --env KAFKA_ZOOKEEPER_CONNECT=192.168.100.128:2181,192.168.100.128:2182,192.168.100.128:2183 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.100.128:9092 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

参数说明:

--env KAFKA_ZOOKEEPER_CONNECT=192.168.100.128:2181,192.168.100.128:2182,192.168.100.128:2183: 设置环境变量,指定ZooKeeper的连接字符串。使用宿主机ip:端口,提供给外网使用。

--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:// 192.168.100.128:9092: 设置环境变量,指定Kafka的advertised listeners(消息监听)。使用宿主机ip:端口,提供给外网使用。

--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092: 设置环境变量,指定Kafka的listeners。

2、安装第2个broker

[root@hadoop104 local]# docker run -it -d --restart always --name kf2 --network zk_net --ip 192.168.10.202 -p 9093:9092 -p 29999:9999 -e KAFKA_BROKER_ID=2 --env KAFKA_ZOOKEEPER_CONNECT=192.168.100.128:2181,192.168.100.128:2182,192.168.100.128:2183 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.100.128:9093 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

3、安装第3个broker

[root@hadoop104 local]# docker run -it -d --restart always --name kf3 --network zk_net --ip 192.168.10.203 -p 9094:9092 -p 39999:9999 -e KAFKA_BROKER_ID=3 --env KAFKA_ZOOKEEPER_CONNECT=192.168.100.128:2181,192.168.100.128:2182,192.168.100.128:2183 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.100.128:9094 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka

4、测试

(1)进入第1个broker

[root@hadoop104 local]# docker exec -it kf1 /bin/bash

# 创建主题first

root@14b37abf58ad:/# kafka-topics.sh --bootstrap-server 192.168.100.128:9092 --create --partitions 1 --replication-factor 3 -topic first

Created topic first.

(2)进入第2个broker

[root@hadoop104 local]# docker exec -it kf2 /bin/bash

# 创建主题second

root@3adde69a4342:/# kafka-topics.sh --bootstrap-server 192.168.100.128:9092 --create --partitions 1 --replication-factor 3 -topic second

Created topic second.

(3)进入第3个broker

[root@hadoop104 local]# docker exec -it kf3 /bin/bash

# 创建主题three

root@0c2c89bbfdd0:/# kafka-topics.sh --bootstrap-server 192.168.100.128:9092 --create --partitions 1 --replication-factor 3 -topic three

Created topic three.

# 查看所有主题

root@0c2c89bbfdd0:/# kafka-topics.sh --bootstrap-server 192.168.100.128:9092 --list

first

second

three

kafka集群部署成功。

(三)安装结果


叁:Redis-docker

       Redis是NoSQL中的一种存储工具,他是一个key-value存储系统。默认有16个数据库从0到15来进行表示。

       Redis 被广泛应用在缓存方向,与传统数据库不同的是 Redis 的数据是存在内存中的,因此读写速度非常快。

       Redis为分布式缓存,在多客户端的情况下,共用一份缓存数据,缓存具有一致性。

       Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。

1、下载镜像

[root@104 ~]# docker pull redis

2、安装

(1)创建主目录

[root@104 ~]# mkdir -p /usr/local/redis

[root@104 ~]# cd /usr/local/redis

[root@104 redis]# mkdir -p data conf

(2)创建配置文件

将配置文件redis.conf保存到 /usr/local/redis/conf目录,内容如下:

# 所有主机都可以连接

bind 0.0.0.0

# 关闭保护模式

protected-mode no

# 端口号

port 6379

# 密码

requirepass 123456

always-show-logo yes

(3)安装数据库

[root@104 redis]# docker run --name redis_6379 -p 6379:6379 -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data/:/data -d redis redis-server /etc/redis/redis.conf

(4)登录测试

① 创建终端

[root@104 redis]# docker exec -it redis_6379 /bin/bash

root@afeb53a49bdf:/data#

② 登录并测试

root@afeb53a49bdf:/data# redis-cli -a 123456

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

127.0.0.1:6379> set test master

OK

127.0.0.1:6379> get test

"master"


肆:行动就是答案,所以不问为什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值