elasticsearch - 使用 kubernetes 的 Elasticsearch 多节点集群?
问题描述
我正在尝试创建一个弹性搜索的多节点集群。那么我应该使用哪个服务来使用 kubernetes 创建集群。我能够在一个节点内使用无头服务进行 es 之间的内部通信。但是在多节点的情况下不会发生同样的情况。另外,我必须在工作节点的 elasticsearch.yml 文件中的主节点的“discovery.zen.ping.unicast.hosts”中提到哪个 ip 和端口。
部署.yml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-deployment
spec:
selector:
matchLabels:
app: elasticsearch
replicas: 2
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: sandeepp163/elasticsearch:latest
volumeMounts:
- mountPath: /usr/share/elasticsearch/config/
name: config
- mountPath: /var/logs/elasticsearch/
name: logs
volumes:
- name: config
hostPath:
path: "/etc/elasticsearch/"
- name: logs
hostPath:
path: "/var/logs/elasticsearch"
内部通信服务配置
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-cluster
spec:
clusterIP: None
selector:
app: elasticsearch
ports:
- name: transport
port: 9300
targetPort: 9300
外部服务配置
apiVersion: v1
kind: Service
metadata:
name: load-service
labels:
app: elasticsearch
spec:
selector:
app: elasticsearch
type: NodePort
ports:
- nodePort: 31234
port: 9200
targetPort: 9200
我在工作节点上遇到的错误。
[2020-02-26T05:29:02,297][WARN ][o.e.d.z.ZenDiscovery ] [worker] not enough master nodes discovered during pinging (found [[]], but needed [1]), pinging again
工作人员中的 elasticsearch.yml 文件
cluster.name: xxx
node.name: worker
node.master: false
node.data: true
node.ingest: false
discovery.zen.ping.unicast.hosts: ["192.168.9.0"]
discovery.zen.minimum_master_nodes: 1
主控中的 elasticsearch.yml
cluster.name: xxx
node.name: master
node.master: true
node.data: false
node.ingest: false
谢谢
解决方案
您可以使用 HELM 在有状态集中部署 Elasticsearch。
1. 安装 HELM:
如果您使用的是 linux,请键入:curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
如果没有,请在此处查看您的操作系统的安装过程
2. 将稳定库添加到 Helm,并升级它们:
helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo update
3.安装Elasticsearch Helm图表
现在您可以安装Elasticsearch 图表,输入:
helm install stable/elasticsearch --generate-name
等待安装,你可以检查使用kubectl get pods -l app=elasticsearch
要访问您可以使用proxy-port
服务名称:
ES_SVC=$(kubectl get svc -owide -l "app=elasticsearch" -o jsonpath="{.items[0].metadata.name}")
kubectl port-forward svc/$ES_SVC 9200:9200
4.访问服务:
要访问该服务,请从浏览器访问http://127.0.0.1:9200 。
希望有帮助。
推荐阅读
- dynamics-365 - 从 Dynamics 365 导出数据并将其发送到 FTP 服务
- ansible - Jinja2 Ansible 中的转义字符
- ionic-framework - 如何从本地存储中选择文件?离子文件选择器错误
- rxjs - rxjs 并订阅集合中的新值
- julia - 更改 Julia v1.0 后重新加载模块
- selenium - AMP Mobile 网站无法在 DOM 中找到用于创建 selenium 脚本的元素?
- hibernate - 如何使用两个外键制作复合主键?
- git - npm start 断言错误
- java - 从活动返回后,片段中的 RecyclerView 为空
- vue.js - 模糊事件上的 Vue 引导程序