当前位置: 首页 > news >正文

elasticsearch的docker方式安装及golang1.22版本使用elasticsearch7的示例代码

1.准备linux服务器,ip地址为192.168.137.116

2.安装docker-ce

yum -y install docker-ce

配置docker镜像

vim /etc/docker/daemon.json{"registry-mirrors": ["https://harbor:443", "https://985ecq8w.mirror.aliyuncs.com","https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://docker.jsdelivr.fyi",
"https://dockercf.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://hub.uuuadc.top",
"https://docker.1panel.live",
"https://docker.anyhub.us.kg",
"https://docker.chenby.cn",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io"],"insecure-registries":["harbor:443"],"exec-opts": ["native.cgroupdriver=systemd"]
}

harbor安装什么的就不赘述了,docker pull能够正常使用就行

vim /etc/hosts
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.137.30  harbor
192.168.137.116 ELK

启动docker

systemctl enable --now docker

3.docker pull镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.0
dcoker pull containerize/elastichd

推送到harbor

#登录及推送镜像到harbor
docker login harbor:443
docker tag docker.elastic.co/elasticsearch/elasticsearch:7.3.0 harbor:443/library/elasticsearch:7.3.0
docker push harbor:443/library/elasticsearch:7.3.0
docker tag containerize/elastichd:latest harbor:443/library/containerize/elastichd:latest
docker push harbor:443/library/containerize/elastichd:latest[root@ELK ~]# docker images
REPOSITORY                                      TAG       IMAGE ID       CREATED       SIZE
docker.elastic.co/elasticsearch/elasticsearch   7.3.0     bdaab402b220   5 years ago   806MB
harbor:443/library/elasticsearch                7.3.0     bdaab402b220   5 years ago   806MB
containerize/elastichd                          latest    c2202f76db37   7 years ago   28.1MB
harbor:443/library/containerize/elastichd       latest    c2202f76db37   7 years ago   28.1MB

4.创建一个网络

docker network create esnet

5.启动elasticsearch容器

docker run --name es -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.type=single-node" bdaab402b220

验证是否成功启动

[root@ELK ~]# curl -X GET "http://localhost:9300/"
This is not ancurl -X GET "http://localhost:9200/"
{"name" : "dbda370d76cd","cluster_name" : "docker-cluster","cluster_uuid" : "pN-AU14rTSudsqG1yU4TkA","version" : {"number" : "7.3.0","build_flavor" : "default","build_type" : "docker","build_hash" : "de777fa","build_date" : "2019-07-24T18:30:11.767338Z","build_snapshot" : false,"lucene_version" : "8.1.0","minimum_wire_compatibility_version" : "6.8.0","minimum_index_compatibility_version" : "6.0.0-beta1"},"tagline" : "You Know, for Search"
}

6.启动可视化容器ElasticHD

docker run -p 9800:9800  -d --link es:demo --network esnet -e "discovery.type=single-node" containerize/elastichd

7.浏览器打开ElasticHD

8.使用goland开发go查询elasticsearch示例

package mainimport ("context""encoding/json""fmt""log""strings""github.com/elastic/go-elasticsearch/v7""github.com/elastic/go-elasticsearch/v7/esapi"
)func main() {// 创建 Elasticsearch 客户端_, err := elasticsearch.NewDefaultClient()if err != nil {log.Fatalf("Error creating the client: %s", err)}// 设置 Elasticsearch URLcfg := elasticsearch.Config{Addresses: []string{"http://192.168.137.116:9200"},}esClient, err := elasticsearch.NewClient(cfg)if err != nil {log.Fatalf("Error creating the client with custom config: %s", err)}// 创建索引indexName := "new_index"if err := createIndex(esClient, indexName); err != nil {log.Fatalf("Error creating index: %s", err)}// 插入一些数据if err := insertData(esClient, indexName); err != nil {log.Fatalf("Error inserting data: %s", err)}// 执行一个简单的搜索请求res, err := search(esClient, indexName)if err != nil {log.Fatalf("Error getting response: %s", err)}defer res.Body.Close()// 检查响应状态if res.IsError() {var e map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&e); err != nil {log.Fatalf("Error parsing the response body: %s", err)} else {// Print the response status and error information.log.Fatalf("[%s] %s: %s",res.Status(),e["error"].(map[string]interface{})["type"],e["error"].(map[string]interface{})["reason"],)}}// 解析并打印搜索结果var result map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&result); err != nil {log.Fatalf("Error parsing the response body: %s", err)}fmt.Printf("%s\n", result)
}// createIndex 函数创建索引
func createIndex(client *elasticsearch.Client, indexName string) error {// 构建创建索引的请求req := esapi.IndicesCreateRequest{Index: indexName,Body: strings.NewReader(`{"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"properties": {"title": {"type": "text"},"content": {"type": "text"}}}}`),Pretty: true,}// 执行请求res, err := req.Do(context.Background(), client)if err != nil {return err}defer res.Body.Close()if res.IsError() {var e map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&e); err != nil {return err} else {// Print the response status and error information.return fmt.Errorf("[%s] %s: %s",res.Status(),e["error"].(map[string]interface{})["type"],e["error"].(map[string]interface{})["reason"],)}}return nil
}// insertData 函数插入数据
func insertData(client *elasticsearch.Client, indexName string) error {// 构建插入数据的请求req := esapi.IndexRequest{Index:      indexName,DocumentID: "1",Body:       strings.NewReader(`{"title": "Example Title", "content": "Example Content"}`),Refresh:    "true",}// 执行请求res, err := req.Do(context.Background(), client)if err != nil {return err}defer res.Body.Close()if res.IsError() {var e map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&e); err != nil {return err} else {// Print the response status and error information.return fmt.Errorf("[%s] %s: %s",res.Status(),e["error"].(map[string]interface{})["type"],e["error"].(map[string]interface{})["reason"],)}}return nil
}// search 函数执行搜索请求
func search(client *elasticsearch.Client, indexName string) (*esapi.Response, error) {// 构建搜索请求q := `{"query": {"match_all": {}}}`// 发送搜索请求req := esapi.SearchRequest{Index:  []string{indexName},Body:   strings.NewReader(q),Pretty: true,}// 执行请求res, err := req.Do(context.Background(), client)if err != nil {return nil, err}return res, nil
}

9.浏览器查看数据是否改变

10.创建elasticsearch集群

注意: 先删除之前创建的容器,以免端口冲突

(1)相同的ip,不同的端口

192.168.137.116服务器

es1.yml,es2.yml,es3.yml文件见压缩包资源

原理和下面的(2)逻辑差不多,只要区分不同的服务就行,ip或者端口不同只是区分的条件

不过因为是在一个服务器里面执行,为了端口不冲突,就要映射不同的端口,更加麻烦罢了

在/root目录下执行

cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
EOF
sysctl -p
mkdir data1
chmod 777 data1
mkdir data2
chmod 777 data2
mkdir data3
chmod 777 data3docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9200:9200 \
-p 9300:9300 \
-v ./es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data1:/usr/share/elasticsearch/data \
--name ES01 \
harbor:443/library/elasticsearch:7.3.0docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9201:9201 \
-p 9301:9301 \
-v ./es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data2:/usr/share/elasticsearch/data \
--name ES02 \
harbor:443/library/elasticsearch:7.3.0docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9202:9202 \
-p 9302:9302 \
-v ./es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data3:/usr/share/elasticsearch/data \
--name ES03 \
harbor:443/library/elasticsearch:7.3.0

安装elasticsearch-head进行集群可视化查看

docker pull mobz/elasticsearch-head:5
docker run -it --name="es-admin" -p 9100:9100 mobz/elasticsearch-head

(2)不同的ip,相同的端口

192.168.137.21服务器

es1.yml文件

cluster.name: es-cluster
node.name: es-0001
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.21
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.137.21:9300","192.168.137.22:9300","192.168.137.23:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-0001","es-0002","es-0003"]

在/root目录下执行

cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
EOF
sysctl -p
mkdir data1
chmod 777 data1docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9200:9200 \
-p 9300:9300 \
-v ./es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data1:/usr/share/elasticsearch/data \
--name ES01 \
harbor:443/library/elasticsearch:7.3.0

192.168.137.22服务器

cluster.name: es-cluster
node.name: es-0002
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.22
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.137.21:9300","192.168.137.22:9300","192.168.137.23:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-0001","es-0002","es-0003"]

在/root目录下执行

cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
EOF
sysctl -p
mkdir data1
chmod 777 data1docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9200:9200 \
-p 9300:9300 \
-v ./es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data1:/usr/share/elasticsearch/data \
--name ES01 \
harbor:443/library/elasticsearch:7.3.0

192.168.137.23服务器

cluster.name: es-cluster
node.name: es-0003
network.bind_host: 0.0.0.0
network.publish_host: 192.168.137.23
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.137.21:9300","192.168.137.22:9300","192.168.137.23:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-0001","es-0002","es-0003"]

 在/root目录下执行

cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
EOF
sysctl -p
mkdir data1
chmod 777 data1docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d \
-p 9200:9200 \
-p 9300:9300 \
-v ./es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v ./data1:/usr/share/elasticsearch/data \
--name ES01 \
harbor:443/library/elasticsearch:7.3.0

使用浏览器查看

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Unity小工具】多张图片显示在一个Image组件上
  • 【学习笔记】卫星通信NTN 3GPP标准化进展分析(二)- 3GPP Release16 内容
  • python进阶篇-day03-学生管理系统与深浅拷贝
  • tomcat redis minio nginx windows开机自启
  • Python刷算法题必备技巧总结
  • Fluent 超音速射流噪声仿真分析
  • 697.数组的度
  • Marked: 一款高效、轻量级且全功能的Markdown解析器
  • 【C语言必学知识点六】自定义类型——结构体
  • 单品月GMV破4900W,2024防晒衣赛道在狂飙!
  • 以下是一些对公打款的测试方法
  • 【微信小程序】自定义 tabBar
  • 计算机毕设选题推荐-基于python的豆瓣电子图书数据可视化分析
  • Python脚本参数总结:argparse库基础用法
  • docker容器使用aconda运行python程序
  • AWS实战 - 利用IAM对S3做访问控制
  • iOS编译提示和导航提示
  • JS变量作用域
  • js对象的深浅拷贝
  • Linux Process Manage
  • Mithril.js 入门介绍
  • OSS Web直传 (文件图片)
  • Python_网络编程
  • SQLServer插入数据
  • yii2中session跨域名的问题
  • 测试开发系类之接口自动化测试
  • 工程优化暨babel升级小记
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 机器学习 vs. 深度学习
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 配置 PM2 实现代码自动发布
  • 什么软件可以剪辑音乐?
  • 仓管云——企业云erp功能有哪些?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • #include到底该写在哪
  • #Linux(权限管理)
  • (20050108)又读《平凡的世界》
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (接口自动化)Python3操作MySQL数据库
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (转)编辑寄语:因为爱心,所以美丽
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .env.development、.env.production、.env.staging
  • .mysql secret在哪_MySQL如何使用索引
  • .Net - 类的介绍
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework 服务实现监控可观测性最佳实践
  • .Net6 Api Swagger配置
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • @Data注解的作用
  • [ 蓝桥杯Web真题 ]-布局切换