Elasticsearch+Kibana 的docker容器化部署与若干问题处理

这篇具有很好参考价值的文章主要介绍了Elasticsearch+Kibana 的docker容器化部署与若干问题处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概览

因为Elasticsearch的官方文档上写的不是很清楚会留下一些坑,所以本篇主要记录对docker搭建ElasticSearch+Kibana+ik分词器的过程和途中遇到的若干问题,既留给自己后面反复使用避免各种神坑,也可以为正在部署环境的读者提供一些参考。

环境信息

  • 以下是本次部署的环境信息,可以作为参考
  • 操作系统:Linux CentOS-7-x86_64
  • Docker:Docker  Desktop 19.03.12 
  • ElasticSearch:8.11.1
  • Kibana:8.11.1
  • IK分词器:elasticsearch-analysis-ik-8.11.1 

elasticsearch官网下载地址: Download Elasticsearch | Elastic

kibana官网下载地址:Download Kibana Free | Get Started Now | Elastic 

IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik 

注:Linux安装elasticsearch、kibana不知下什么版本的(如:x86_64/aarch64)可使用以下命令查看Linux CPU服务架构对应下载

uname -m

一、Elasticsearch的部署《官网文档》

1、单节点集群

1.1、先创建一个docker网络

容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的服务器是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理。

docker network create elastic

1.2、拉取 Elasticsearch Docker 镜像

可用docker search <镜像名称> 搜索镜像后拉取docker pull <镜像名称>,也可直接使用以下命令拉取官网的镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1

查看docker中存在的镜像文件: docker imags

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

1.3、设置内核

Elasticsearch Linux环境下要设置内核,否则ES启动将会报错。设置为至少vm.max_map_count262144若要查看设置的当前值,请运行:vm.max_map_count。

grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

要在实时系统上应用该设置,请运行:

sysctl -w vm.max_map_count=262144

1.4、根据内存大小配置堆 

官网建议“使用 Docker Desktop,请确保分配至少 4GB 的内存”。

  • 要在生产环境中手动设置堆大小,请绑定挂载 JVM 选项文件。 包括所需的堆大小设置。/usr/share/elasticsearch/config/jvm.options.d
  • 对于测试,您还可以使用环境变量手动设置堆大小。例如,若要使用 512MB,请使用以下命令。ES_JAVA_OPTS   ES_JAVA_OPTS="-Xms512m -Xmx512m"

提示:该变量将覆盖所有其他 JVM 选项。 不建议在生产中使用。ES_JAVA_OPTS

 1.5、挂载配置和启动 Elasticsearch 容器(推荐使用绑定挂载)

1.5.1、不挂载
docker run --name es01 --net elastic -p 9200:9200 -p 9300:9300 -it -e ES_JAVA_OPTS="-Xms64m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:8.11.1

进入容器  ,对elasticsearch.yml进行相关配置。若进入容器后提示无相关命令可添加- u 0命令授权后 apt-get updata 安装vim.

docker exec -it es01 /bin/bash
docker exec -it -u 0 es01 /bin/bash
apt-get update 
apt-get install vim

vim config/elasticsearch.yml

# 配置集群名称(默认是被注释的,并且默认有一个集群名) 

cluster.name: "docker-cluster"
# 配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
node.name: node-1
# 绑定地址为特定IP地址(设置其它节点和该节点交互的ip地址,如果不设置它会自动判断)默认为0.0.0.0,绑定这台机器的任何一个ip
network.host: 0.0.0.0

#安全模式,默认开启true,测试环境下可以关闭false

xpack.security.enabled: false

# 配置是否允许跨域
http.cors.enabled: true
# 允许哪些域跨域
http.cors.allow-origin: "*"

1.5.2、绑定挂载

出于以下原因,应使用绑定的卷:/usr/share/elasticsearch/data

  1. 如果容器被终止,Elasticsearch 节点的数据不会丢失
  2. Elasticsearch 对 I/O 敏感,Docker 存储驱动程序不适合快速 I/O
  3. 它允许使用高级 Docker 卷插件
  • 配置文件必须可由用户读取,默认情况下,Elasticsearch 以用户身份在容器内运行 uid:gid .elasticsearch1000:0。
  • 如果要绑定挂载本地目录或文件,则用户必须可以读取该目录或文件。 此外,此用户必须具有对配置、数据和日志目录的写入权限(Elasticsearch 需要对目录的写入权限,以便可以生成密钥库)。 一个好的策略是授予对本地目录的 gid 的组访问权限.。
  • 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。

 准备一个本地目录,以便通过绑定挂载来存储数据:

mkdir /usr/local/docker_es
chmod g+rwx /usr/local/docker_es
chgrp 0 /usr/local/docker_es

创建Elasticsearch本地的date、config、plugins、logs目录。

# mkdir 创建指定目录层级
mkdir -p /usr/local/docker_es/config
mkdir -p /usr/local/docker_es/data 
mkdir -p /usr/local/docker_es/logs
mkdir -p /usr/local/docker_es/plugins 

因为创建容器的时候,会将宿主机的目录与容器内的目录进行映射,Docker 镜像的 默认情况下,内置文件包含此设置elasticsearch.yml network.host: 0.0.0.0。如果本地的config目录中缺少elasticsearch.yml和其中的配置项则容器将报错无法启动。使用以下命令

# 写入内容到指定xx.yml配置文件
echo "http.host: 0.0.0.0" >> /usr/local/docker_es/config/elasticsearch.yml

若需要较全的配置,则需创建临时的es容器,从中拷贝出来。

#创建临时容器-elasticsearch
docker run --name elasticsearch --net elastic  -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 docker.elastic.co/elasticsearch/elasticsearch:8.11.1
#拷贝至挂载目录
docker cp -a elasticsearch:/usr/share/elasticsearch/config  /usr/local/docker_es/config
docker cp -a elasticsearch:/usr/share/elasticsearch/data  /usr/local/docker_es/data
docker cp -a elasticsearch:/usr/share/elasticsearch/plugins  /usr/local/docker_es/plugins
#删除临时容器-elasticsearch
docker stop elasticsearch
docker rm elasticsearch

配置elasticsearch.yml,注:这里安全模式是开启的,kibana连接时需生成的注册令牌

# 启动地址,如果不配置,只能本地访问
  network.host: 0.0.0.0
# 节点名称
  node.name: node-name
# 节点列表
  discovery.seed_hosts: ["192.168.209.132"]
# 初始化时master节点的选举列表
  cluster.initial_master_nodes: [ "node-name" ]
# 集群名称
  cluster.name: cluster-name
# 对外提供服务的端口
  http.port: 9200
# 内部服务端口
  transport.port: 9300    
# 跨域支持
  http.cors.enabled: true
# 跨域访问允许的域名地址(正则)
  http.cors.allow-origin: /.*/
#安全模式
  xpack.security.enabled: true

 创建正式es容器

docker run -p 9200:9200 -p 9300:9300 \
--privileged=true --name es01 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /usr/local/docker_es/plugins:/usr/share/elasticsearch/plugins \
-v /usr/local/docker_es/data:/usr/share/elasticsearch/data \
-v /usr/local/docker_es/logs:/usr/share/elasticsearch/logs \
-v /usr/local/docker_es/config:/usr/share/elasticsearch/config \
-d docker.elastic.co/elasticsearch/elasticsearch:8.11.1

说明:

  1.  privileged=true 允许访问挂载目录
  2. "discovery.type=single-node" 单机版
  3. ES_JAVA_OPTS="-Xms512m -Xmx512m"  设置 “JAVA虚拟器占用的内存大小,-Xms64m:初始64M;-Xmx512m:最大占用512M”,如果不设置就启动,默认会占用整个服务器内存,如果是本地搭建的虚拟机,容易卡死,建议根据实际情况设置大小。 
1.5.3、数据卷挂载
docker run -d \
    --name es \
    --privileged \
    --network elastic \
    -p 9200:9200 \
    -p 9300:9300 \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
   docker.elastic.co/elasticsearch/elasticsearch:8.11.1

 命令解释:

-e "discovery.type=single-node":非集群模式
-v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
-v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
-v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
--network elastic :加入elastict的网络中 (kibana也会加入,在同一个docker网络中,访问时可以直接配置为容器名称)
-p 9200:9200:端口映射配置 (9200端口用户访问 9300端口将来各个节点之间互联的端口,目前用不上)

-v 本地卷:容器目录
若本地卷没有,应该会帮你创建,通过docker volume inspect 卷名查看卷信息,其中就有本地目录 

# 查看所有数据卷
docker volume ls
# 查看数据卷详细信息卷
docker volume inspect es-data

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

安全模式xpack.security.enabled:true

 对于启用安全模式xpack.security.enabled:true的需使用一下命令打印 Kibana 的用户密码和注册令牌,为false不启用则无需打印。()

docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibanad

cp Kibana 的用户密码和注册令牌Kibana登录时会用到

Password for the [elastic] user successfully reset.
New value: 3_J35UWr2sIUkyxxxxxx

1.6、测试是否部署成功

1.6.1、无安全模式下测试:

 浏览器访问 http://ip:9200(ip为服务器地址),能访问成功,就是正常kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

 1.6.2、安全模式下测试:

由于es开方的https服务,所以首先把证书从容器中导出来,后面的curl请求都要指定这个证书 

docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
  • 当前目录下新增名为http_ca.crt的文件,就是安全证书了,对 Elasticsearch 进行 REST API 调用,以确保 Elasticsearch 容器正在运行。
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

  • 浏览器访问 https://ip:9200(ip为服务器地址)后会弹出登录页面了,如下图,填写账号elastic,密码是刚才cp的。kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

二、Kibana的部署

拉取 Kibana Docker 镜像

直接官网拉取镜像

docker pull docker.elastic.co/kibana/kibana:8.11.2

或使用命令搜索镜像拉取 

#搜索kibana镜像
docker search kibana
#根据搜索到的镜像名称进行拉取
docker pull kibana

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

创建kibana配置文件kibana.yml并写入相关配置。

echo -e "server.host: "0.0.0.0"\nserver.shutdownTimeout: "5s" \nelasticsearch.hosts: "http://elasticsearch:9200" \ni18n.locale: zh-CN ">> /usr/local/docker_kibana/config/kibana.yml

 说明:命令格式:echo [参数] [字符串] 

-e:允许输出字符串中的转义字符, “\n”为换行符

            # http访问端口
            server.port: 5601
            # ip地址,0.0.0.0表示可远程访问
             server.host: "0.0.0.0"

            #修改en为zh-CN 控制面板为中文
             i18n.locale: "zh-CN"

运行docker命令进行部署

docker run -d \
--name kib01 \
--net elastic \
-v /usr/local/docker_kibana/config:/usr/share/kibana/config \
-p 5601:5601  \
 kibana:8.11.1

 注:这里挂载了kibana的config目录,需对本地目录进行授权

chmod -R 777 /usr/local/docker_kibana

 通过以下命令查看kibana是否成功运行

#动态查看日志文件后100行
docker logs -f --tail 100 kib01

 kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

 在浏览器输入地址访问:http://服务器ip:5601,即可看到结果。若elasticsearch未开启安全模式则手动配置,配置时需指定es的服务IP且使用的协议为HTTP协议,若使用HTTPS协议则会提示:无法连接到集群。 

 kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

 使用以下命令获取验证码

docker exec -it kib01 bin/kibana-verification-code

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

三、安装IK分词器

1、elasticsearch使用挂载的

使用绑定挂载的在elasticsearch挂载本地目录plugins下创建analysis-ik目录。

使用数据卷挂载的通过命令docker volume inspect 卷名查看卷信息,其中就有本地目录 

cd /usr/local/docker_es/plugins
mkdir analysis-ik

将ik分词器压缩文件直接上传置analysis-ik下(这里我是放在/usr/local)

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

2、elasticsearch未使用挂载的

可先将IK分词器压缩包上传自定义目录下后进行解压。

使用以下命令将解压后的ikf分词器文件analysis-ik拷贝至elasticsearch容器的/usr/share/elasticsearch/plugins目录下

#docker cp <本地文件路径> <容器名称>:<目标容器路径>
docker cp analysis-ik/ es02:/usr/share/elasticsearch/plugins
#验证文件是否拷贝成功
docker exec -it es02 ls /usr/share/elasticsearch/plugins

kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

解压IK分词器压缩包 

由于这里是zip包不是gz包,所以我们需要使用unzip命令进行解压,如果本机环境没有安装unzip,请执行

yum install -y unzip zip
#unzip的语法:unzip [选项] 压缩包名 源文件或源目录列表    -d<目录> 指定文件解压缩后所要存储的目录
unzip elasticsearch-analysis-ik-8.11.1.zip -d  /usr/local/docker_es/plugins/analysis-ik
#在plugins/analysis-ik目录下的可直接使用unzip解压
unzip elasticsearch-analysis-ik-8.11.1.zip

记得一定要重启Elasticsearch!!!  

四、可能遇到的问题:

1、elasticsearch的报错

1.1、进入容器报错:Error response from daemon: Container XXXX is not runnin。

根据docker的报错,可能是以下原因:

  1. docker容器未启动;
    #1、查看docker所有容器获取容器名称或id
    docker ps -a
    #2、根据容器名称或id启动容器
    docker start es01
  2. 网络问题,网络配置修改了,但未重启网络;
    #重启网络,使用命令:
    source /etc/profile
  3. 配置文件问题,文件修改过程中出错、挂载目录或者文件时无配置文件或文中缺少必要配置
    #1、写入内容到指定xx.yml配置文件
    echo "http.host: 0.0.0.0" >> /usr/local/elasticsearch/config/elasticsearch.yml 
    #2、重启容器
    docker restart es01
    #3、查看docker容器中启动的进程
    docker ps
    
    
1.2、进入容器后,vi elasticsearch.yml 提示 bash: vi: command not found。使用apt-get update报错E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据原因是权限不足,添加在进入容器命令里添加 -u 0 apt-get update  再使用命令 apt-get install vim
docker exec -u 0 -it id /bin/bash

 2、kibana的报错

2.1、在浏览器kiban界面进行配置输入验证码后提示:Couldn't write to config file。查看kibana日志报:[ERROR][plugins.interactiveSetup.routes] Kibana process does not have enough permissions to write to config file kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

 原因是挂载的kibana config目录未授权,对其进行授权即可。

chmod -R 777 <挂载的文件路径>

2.2、Kibana启动后界面显示:Kibana server is not ready yet 

使用docker命令查看日志信息

#动态查看kibana容器的日志后100行
docker logs -f --tail 100 kibana

日志报错信息如下:

 {"type":"log","@timestamp":"2022-04-13T09:01:06+00:00","tags":["error","elasticsearch-service"],"pid":8,"message":"Unable to retrieve version information from Elasticsearch nodes. getaddrinfo ENOTFOUND elasticsearch"}

kibana 连接不到Elasticsearch 节点,原因

由于未配置kibana和elasticsearch在同一网络环境下,而kibana.yml中elasticsearch.hosts=["http://localhost:9200"],或者elasticsearch.hosts=["http://elasticsearch:9200"],未将其私有IP导致,需要使用私有IP,如elasticsearch.hosts=["http://192.168.204.10:9200"]。

2.3、kibana日志报:[ERROR][plugins.interactiveSetup.elasticsearch] Unable to connect to host "https://192.168.204.10:9200": write EPROTO C017EC6B6C7F0000:error:0A00010B:SSL routines:ssl3_get_record:wrong version   number:../deps/openssl/openssl/ssl/record/ssl3_record.c:354:kibana docker容器修改了es地址就退出,elasticsearch,docker,大数据

原因是elasticsearch未开启安全模式,则不能使用https协议访问,需使用http协议访问 。

2.4、日志报:Error: index_not_found_exception
Root causes: index_not_found_exception: no such index [.kibana] 

 可参照以下解决:文章来源地址https://www.toymoban.com/news/detail-769554.html

  • Error: [index_not_found_exception] no such index [.kibana_task_manager]_爱代码的小呆-华为云开发者联盟
  • https://www.cnblogs.com/davidgu/p/6785039.html

到了这里,关于Elasticsearch+Kibana 的docker容器化部署与若干问题处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用 Docker Compose 部署 Elasticsearch + Kibana

    本篇文章主要介绍了使用 Docker Compse 部署 Elasticsearch + Kibana,并整合到 Spring Boot 项目中的详细步骤。 Elasticsearch + Kibana 版本: 7.17.0(7 的最新版本);Spring Boot 版本:2.7.5 。 Kibana 官方文档、Elasticsearch官方文档 在 config 目录下,编写 elasticsearch.yml 配置文件,内容如下。 在 ki

    2024年02月06日
    浏览(38)
  • Docker容器与虚拟化技术:OpenEuler 部署 ES 与 Kibana

    目录 一、实验 1.环境 2.OpenEuler 部署 ES (EalasticSearch) 3.OpenEuler 部署 Kibana 4.部署 Elasticvue插件 5.使用cpolar内网穿透 6.使用Elasticvue (1)主机 表1  主机 系统 架构 版本 IP 备注 Linux openEuler 22.03 LTS SP2 192.168.204.145(动态) 192.168.204.141(静态) 192.168.204.142(静态) docker 25.0.3 cpolar

    2024年04月17日
    浏览(32)
  • Docker部署ELK 8.8.2(2)-Kibana部署&连接Elasticsearch

    下载镜像 [root@kylin ~]# docker pull docker.elastic.co/kibana/kibana:8.8.2 创建容器,容器名称为kibana,映射端口5601,加入网络elastic [root@kylin ~]# docker run -itd --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.8.2 查看创建的容器 [root@kylin ~]# docker ps | grep kibana 在elastic容器执行elastics

    2024年01月25日
    浏览(33)
  • Docker安装部署Elasticsearch+Kibana+IK分词器

    目前elastic官网推荐使用的两个版本分别是: 8.10.2 7.17.13 我尝试安装8.x版本的,不过似乎由于虚拟机内存大小的原因集群状态总是转为RED无法重置elastic账户的密码,因此我最终选择使用7.x版本的elasticsearch,8.x版本的默认使用https来保证数据的安全性,感兴趣的同学可以自行尝

    2024年02月07日
    浏览(39)
  • docker部署Elasticsearch7.17集群和kibana

    环境准备: 3台centos7.9的服务器 vim /etc/sysctl.conf添加:vm.max_map_count=262144 sysctl -w vm.max_map_count=262144 即时生效 cat /proc/sys/vm/max_map_count 查看 #创建es配置目录 mkdir /home/es/config -p #创建es数据目录 mkdir /home/es/data #创建es插件目录 mkdir /home/es/plugins #授权目录 chmod -R 777 /home/es 在/home/e

    2024年02月10日
    浏览(38)
  • docker部署elasticsearch:8.6.2, kibana,logstash 版本以及kibana的使用

    How to Run Elasticsearch 8 on Docker for Local Development Docker下elasticsearch8部署、扩容、基本操作实战(含kibana) 导入es数据 docker安装elasticsearch和head插件 docker安装elasticsearch和head插件,连接失败问题解决 需要输入token 生成token报错 ERROR: [xpack.security.enrollment.enabled] must be set to true to create an

    2024年02月16日
    浏览(71)
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

    点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Elasticsearch和Kibana安装好合适版本的前提下,继续整合Zipkin。 一般的,它们的工作过程是这样的:Spring Cloud微服务把调用链路的日志发送给Zipkin,Zipkin把数据发

    2024年02月14日
    浏览(32)
  • 【ElasticSearch】基于Docker 部署 ElasticSearch 和 Kibana,使用 Kibana 操作索引库,以及实现对文档的增删改查

    Elasticsearch 和 Kibana 是强大的工具,用于构建实时搜索和数据可视化解决方案。Elasticsearch 是一个分布式、高性能的搜索引擎,可以用于存储和检索各种类型的数据,从文本文档到地理空间数据。Kibana 则是 Elasticsearch 的可视化工具,用于实时分析和可视化大规模数据集。 在本

    2024年02月06日
    浏览(68)
  • docker-compose 安装部署ElasticSearch 和 Kibana 8.8.1

    在你的目录新建个文件夹 创建 docker-compose.yml 访问 kibana 如果出现 提示未准备就绪 可能是kibana.yml配置问题,两种方式解决:

    2024年02月14日
    浏览(30)
  • Docker安装部署[8.x]版本Elasticsearch+Kibana+IK分词器

    在我发的上一个博客里记录了如何安装7.x版本的elasticsearch,我在跟着教学学习Java Rest Client的时候发现在elastic的官网上Java Rest Client已经被标注为过时了,elastc提供了全新的Elasticsearch Java API Client,作为程序员,应该勇于去尝试新技术,因此我决定继续尝试使用elasticsearch8.x版本

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包