Java:93-练习搭建集群

命令步骤

为了结合之前的知识,这里操作一下总体的集群,以虚拟机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
至此命令操作完毕
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值