命令步骤
为了结合之前的知识,这里操作一下总体的集群,以虚拟机192.168.164.20为例子
安装docker:
yum -y install docker
#关闭防火墙
systemctl stop firewalld.service
在Docker中安装MySQL容器,端口映射到宿主机:
拉取mysql镜像并进行操作:
docker pull mysql:5.7
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
接下来我们使用sqlyog工具连接mysql,用户名root,密码123456,地址192.168.164.20,端口是3306
在Docker中安装ElasticSerach容器,端口映射到宿主机:
拉取ElasticSerach镜像并进行操作:
docker pull elasticsearch:7.10.1
docker run -di --name=es -e "discovery.type=single-node" -p 9200:9200 elasticsearch:7.10.1
#如果启动失败,或者启动后,自动关闭,你可以看日志,来根据日志,去百度解决问题
docker logs -f es(容器id或者容器名称) #-f:跟踪日志输出,来一个文件就显示,而不是一次性的
#一般是分配的虚拟内存小了(小于上面的内存),设置这样就可以
#在文件vi /etc/sysctl.conf里面加上如下:
vm.max_map_count=262144 #提高上限,一般默认是65530,即63*1024,如果
#退出后执行如下:
sysctl -p
#映射数,通常设置262144,如果需要的话,可以设置更大的数,比如2621440这样(加一个0)
#一般不是指定空间,因为他算起来是256KB,如果他的单位是B的话,那么这太小了,如果是内存,可能是KB单位吧
#并且将虚拟机的内存调高一点,因为他们都需要虚拟机的内存,调成2gb即可
#接下来给es分配内存,但如何分配呢:
find / -name jvm.options
#会返回一个路径,就是对应的es的镜像的配置文件,即:
vi 该路径即可
#修改如下:
-Xms512m
-Xmx512m
#当然,你可以设置更少的内存,但也别太少,否则可能也操作不了
然后在浏览器上访问192.168.164.20:9200,如果有返回数据,代表操作成功(注意多次的访问,因为可能还没有启动完全)
在Docker中安装Kibanna容器,配置ES的URL地址,端口映射到宿主机:
拉取kibana镜像并进行操作:
docker pull kibana:7.10.1
docker run --name kibana -p 5601:5601 -d kibana:7.10.1
docker inspect es #查找到地址
#然后进入kibana里面,找到配置文件,将对应的地址,修改成如下:
#比如:
docker exec -it kibana /bin/bash
cd config/
vi kibana.yml
#将elasticsearch.hosts属性里面的值修改成http://172.17.0.3:9200
#这个172.17.0.3是上面查找的地址
#然后重启kibana
docker restart kibana
访问http://192.168.164.20:5601/,如果出现了界面,则操作成功
创建集群网络,192.168.0.0/24 命名为:kafka
#创建
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 kafka
#查看
docker network ls
#新建网段之后,比如后面创建容器的命令docker-compose,可能会出现:
WARNING: IPv4 forwarding is disabled. Networking will not work.
#解决方式:
#第一步:在宿主机上执行:
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
#第二步:重启network和docker服务:
systemctl restart network && systemctl restart docker
#之后再次的操作即可,如果还没有解决,那么就去百度吧
在Docker中搭建Zookeeper集群,搭建Kafka集群,安装Kafka-Manager,端口映射到宿主机
创建三个文件:
docker-compose-zookeeper.yml:
version: '2' #指定 compose 文件的版本
services: #通过镜像安装容器的配置
zoo1: #一般要与容器名称一样,当然也可以不同,即这里基本可以随便写
#只要没有与这个位置名称相同即可,即唯一即可,这样就可以认为是一个整体的操作配置
#如果有相同的名称,那么谁的配置文件在后面,那么就以谁为主,即覆盖了前面的了,自己测试就知道了
#比如若这里的名称是zoo2,那么就没有zoo1这个容器,因为后面的zoo2覆盖了,即只会出现创建zoo3和zoo2这两个容器
image: zookeeper:3.4 #使用的镜像
restart: always #当Docker重启时,该容器重启
hostname: zoo1 #类似于之前在基于Linux虚拟机Kafka集群中hosts文件的对应值,可以说是主机别名
#当然并不是一定要与容器名称一致,基本可以随便写
container_name: zoo1 #容器的名称
ports:
- 2184:2181 #端口映射
environment: #集群环境
ZOO_MY_ID: 1 #当前Zookeeper实例的id
#集群节点
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
networks: #使用的网络配置
kafka:
ipv4_address: 192.168.0.11
zoo2:
image: zookeeper:3.4
restart: always
hostname: zoo2
container_name: zoo2
ports:
- 2185:2181
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
networks:
kafka:
ipv4_address: 192.168.0.12
zoo3:
image: zookeeper:3.4
restart: always
hostname: zoo3
container_name: zoo3
ports:
- 2186:2181
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
networks:
kafka:
ipv4_address: 192.168.0.13
networks:
kafka:
external:
name: kafka
docker-compose-kafka.yml:
version: '2'
services:
kafka1:
image: wurstmeister/kafka #image
restart: always
hostname: kafka1
container_name: kafka1
privileged: true
ports:
- 9092:9092
environment: #集群环境配置
KAFKA_ADVERTISED_HOST_NAME: kafka1
KAFKA_LISTENERS: PLAINTEXT://kafka1:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
KAFKA_ADVERTISED_PORT: 9092
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
external_links: # 配置Zookeeper集群的地址,上面的zoo1,zoo2,zoo3就是下面的信息,下面去找对应容器名称
#所以这里是上面集群的操作zookeeper的前提
- zoo1
- zoo2
- zoo3
networks:
kafka:
ipv4_address: 192.168.0.14
kafka2:
image: wurstmeister/kafka
restart: always
hostname: kafka2
container_name: kafka2
privileged: true
ports:
- 9093:9093
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka2
KAFKA_LISTENERS: PLAINTEXT://kafka2:9093
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093
KAFKA_ADVERTISED_PORT: 9093
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
external_links:
- zoo1
- zoo2
- zoo3
networks:
kafka:
ipv4_address: 192.168.0.15
kafka3:
image: wurstmeister/kafka
restart: always
hostname: kafka3
container_name: kafka3
privileged: true
ports:
- 9094:9094
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka3
KAFKA_LISTENERS: PLAINTEXT://kafka3:9094
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
KAFKA_ADVERTISED_PORT: 9094
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
external_links:
- zoo1
- zoo2
- zoo3
networks:
kafka:
ipv4_address: 192.168.0.16
networks:
kafka:
external:
name: kafka
docker-compose-manager.yml:
version: '2'
services:
kafka-manager:
image: sheepkiller/kafka-manager:latest
restart: always
container_name: kafka-manager
hostname: kafka-manager
ports:
- 9000:9000
environment: #可以管理zookeeper集群和kafka集群
#单独写一个也行,因为是集群,如果删除,那么访问时(可以访问),对应的界面可能会出现错误提示
#当然,如果有不存在的,即无论是否有正确的,只要有不存在的,那么也是有错误提示,他们基本是同一个错误提示
ZK_HOSTS: zoo1:2181,zoo2:2181,zoo3:2181
#这里如果都是9092或者单独,其实也可以,因为只要有一个正确的kafka即可(可能都不需要指定,即这里可以删除)
#因zookeeper里面包含了kafka集群的信息,自然也包含了地址等等,即可以不用写kafka的配置,即可以删除
KAFKA_BROKERS: kafka1:9092,kafka2:9093,kafka3:9094
APPLICATION_SECRET: letmein
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
kafka:
ipv4_address: 192.168.0.17
networks:
kafka:
external:
name: kafka
下载如下:
curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
#然后执行如下:
docker-compose -f /home/docker-compose-zookeeper.yml up -d
docker-compose -f /home/docker-compose-kafka.yml up -d
docker-compose -f /home/docker-compose-manager.yml up -d
那么集群操作完毕
如图:
登录到Kafka容器,创建主题:product,3个三区,3个副本
命令:
docker exec -it kafka1 /bin/bash
cd opt/kafka/bin/
#执行创建test主题
kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 3 --partitions 3 --topic product
#查看kafka当中存在的主题
kafka-topics.sh --list --zookeeper zoo1:2181,zoo2:2181,zoo3:2181
录到Kafka容器,创建主题:product,3个三区,3个副本
命令:
docker exec -it kafka1 /bin/bash
cd opt/kafka/bin/
#执行创建test主题
kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 3 --partitions 3 --topic product
#查看kafka当中存在的主题
kafka-topics.sh --list --zookeeper zoo1:2181,zoo2:2181,zoo3:2181