自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ElasticSearch+Kibana on K8s 講解與實戰(zhàn)操作(版本7.17.3)

大數(shù)據(jù) 數(shù)據(jù)倉庫
Elasticsearch 7 引入了集群維護模式(cluster maintenance mode),允許您更方便地執(zhí)行維護操作而不影響數(shù)據(jù)平衡。您可以將集群設置為維護模式,然后執(zhí)行維護操作,最后再將集群恢復到正常狀態(tài)。

一、概述

在 Kubernetes(K8s)上運行 Elasticsearch 是一種在容器化環(huán)境中部署和管理 Elasticsearch 集群的常見方法。Elasticsearch 是一款流行的分布式搜索和分析引擎,而 Kubernetes 則提供了一個出色的平臺,用于編排容器并管理 Elasticsearch 的可伸縮性和容錯性。

以下是在 Kubernetes 上部署 Elasticsearch 的一般步驟:

  1. 安裝 Kubernetes 集群:確保你已經(jīng)運行起了 Kubernetes 集群。你可以使用托管的 Kubernetes 服務,如 Google Kubernetes Engine(GKE)、Amazon Elastic Kubernetes Service(EKS),或者使用工具如 Minikube、kubeadm 或 kops 自行部署一個集群。
  2. 存儲:Elasticsearch 需要持久化存儲來存儲其數(shù)據(jù)。你可以使用 Kubernetes 的持久卷(PVs)和持久卷聲明(PVCs)來為 Elasticsearch 數(shù)據(jù)分配存儲。確保選擇適合你需求的存儲解決方案,如 hostPath、本地存儲或網(wǎng)絡附加存儲(NAS)。
  3. Elasticsearch YAML 配置:創(chuàng)建一個 YAML 配置文件,用于定義你的 Elasticsearch 集群。此文件應包括 Elasticsearch Pod、Service、ConfigMap 和任何所需的環(huán)境變量的規(guī)范。你可以使用官方的 Elasticsearch Helm 圖表或編寫自定義的 Kubernetes YAML 文件。
  4. Pod 反親和性:為了確保高可用性,配置反親和性規(guī)則以防止多個 Elasticsearch Pod 在同一節(jié)點上運行。這有助于在不同節(jié)點上分布 Elasticsearch Pod 以提高容錯性。
  5. 服務發(fā)現(xiàn):使用 Kubernetes Service 來在內(nèi)部或外部暴露你的 Elasticsearch 集群,具體取決于你的需求。外部訪問通常涉及創(chuàng)建 LoadBalancer 或 NodePort 服務,而內(nèi)部訪問可能使用 ClusterIP 服務。
  6. 密鑰管理:使用 Kubernetes Secrets 來安全存儲諸如密碼和身份驗證令牌等敏感信息。Elasticsearch 需要安全設置來控制訪問。
  7. 監(jiān)控和日志記錄:實施監(jiān)控和日志記錄解決方案,如 Prometheus、Grafana 和 Elasticsearch 自身的監(jiān)控功能,以跟蹤集群的健康和性能。
  8. 擴展和更新:Kubernetes 可以相對容易地通過添加或刪除節(jié)點來水平擴展 Elasticsearch 集群。在更新 Elasticsearch 版本或配置時,請確保有適當?shù)纳壊呗?,以最小化中斷?/li>
  9. 備份和災難恢復:建立備份和災難恢復程序,以保護數(shù)據(jù)和集群的完整性。
  10. 安全和訪問控制:實施適當?shù)陌踩胧ㄉ矸蒡炞C、授權和網(wǎng)絡策略,以保護你的 Elasticsearch 集群。
  11. 測試:在 Kubernetes 上徹底測試你的 Elasticsearch 部署,以確保它在不同工作負載下表現(xiàn)如預期。
  12. 文檔:為將來的參考和你的團隊的利益,記錄你的設置、配置和部署過程。

雖然這些步驟提供了在 Kubernetes 上部署 Elasticsearch 的高層次概述,但具體的步驟可能會根據(jù)你的用例和環(huán)境而有所不同。考慮使用 Kubernetes Operators、Helm 圖表或其他工具來簡化在 Kubernetes 中部署和管理 Elasticsearch 集群的過程。此外,請參考 Elasticsearch 和 Kubernetes 文檔,獲取詳細的說明和最佳實踐。

圖片

二、ElasticSearch 節(jié)點類型與作用

Elasticsearch 節(jié)點類型和配置在集群的設計和性能優(yōu)化中起著關鍵作用。以下是一些常見的 Elasticsearch 節(jié)點類型以及它們的配置示例:

  • 主節(jié)點 (Master Nodes):

作用:主節(jié)點用于管理集群狀態(tài)、索引創(chuàng)建和分片分配。它們不負責數(shù)據(jù)存儲或搜索查詢。

配置示例:

node.master: true
node.data: false
  • 數(shù)據(jù)節(jié)點 (Data Nodes):

作用:數(shù)據(jù)節(jié)點存儲索引數(shù)據(jù)并執(zhí)行搜索查詢。

配置示例:

node.master: false
node.data: true
  • 協(xié)調(diào)節(jié)點 (Coordinator Nodes):

作用:協(xié)調(diào)節(jié)點用于接收客戶端請求,并將其路由到數(shù)據(jù)節(jié)點。配置示例:

node.master: false
node.data: false
  • 仲裁節(jié)點 (Arbitrator Nodes):

作用:仲裁節(jié)點不存儲數(shù)據(jù),但可以參與主節(jié)點選舉。配置示例:

node.master: true
node.data: false
  • Ingest 節(jié)點:

作用:Ingest 節(jié)點用于文檔的預處理和轉換。配置示例:

node.master: false
node.data: false
node.ingest: true
  • Machine Learning 節(jié)點:

作用:Machine Learning 節(jié)點用于運行 Elasticsearch 的機器學習任務。配置示例:

node.ml: true
  • Transform 節(jié)點:

作用:Transform 節(jié)點用于執(zhí)行數(shù)據(jù)轉換操作,將結果存儲在新的索引中。配置示例:

node.transform: true
  • Remote 節(jié)點:

作用:Remote 節(jié)點用于轉發(fā)請求到遠程 Elasticsearch 集群。配置示例:

node.remote_cluster_client: true
  • Hot-Warm-Cold 節(jié)點:

作用:Hot 節(jié)點用于接收實時數(shù)據(jù),Warm 節(jié)點用于冷熱數(shù)據(jù)分離,Cold 節(jié)點用于長期存儲。配置示例:

node.attr.hot: true
node.attr.warm: true
node.attr.cold: true

請注意,上述示例是典型的節(jié)點類型和配置示例。在實際的集群配置中,可以根據(jù)需求和性能要求進行更詳細的調(diào)整。配置文件通常是 Elasticsearch 的 elasticsearch.yml,你可以在每個節(jié)點上的該文件中設置節(jié)點類型和其他相關配置。根據(jù)需要,你可以將不同的節(jié)點類型配置在不同的節(jié)點上,以構建具有適當角色的 Elasticsearch 集群。同時,還可以使用其他設置來調(diào)整內(nèi)存、存儲、網(wǎng)絡和性能參數(shù),以滿足特定的用例需求。

三、K8s 集群部署

k8s 環(huán)境安裝之前寫過很多文檔,可以參考我以下幾篇文章:

  • 【云原生】k8s 離線部署講解和實戰(zhàn)操作
  • 【云原生】k8s 環(huán)境快速部署(一小時以內(nèi)部署完)

四、ElasticSearch on K8s 開始部署

1)下載安裝包

地址:https://artifacthub.io/packages/helm/elastic/elasticsearch

# 添加數(shù)據(jù)源
helm repo add elastic https://helm.elastic.co

# 下載
helm pull elastic/elasticsearch --version 7.17.3

# 解壓
tar -xf elasticsearch-7.17.3.tgz

2)構建鏡像

Elasticsearch 各版本下載地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

這里就不重新構建鏡像了,有不知道怎么構建鏡像的小伙伴可以給我留言或私信,這里是將遠程的鏡像推送到我們本地harbor,加速拉取鏡像。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.3
docker tag docker.elastic.co/elasticsearch/elasticsearch:7.17.3  registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/elasticsearch:7.17.3

# 上傳鏡像到阿里云鏡像倉庫
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/elasticsearch:7.17.3

3)修改yaml編排

這里只顯示修改部分,在最后會提供修改后的git下載地址。

  • elasticsearch/values.yaml
image: "registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/elasticsearch"

### 去掉這幾行
volumeClaimTemplate:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 30Gi

persistence:
  enabled: true
  labels:
    # Add default labels for the volumeClaimTemplate of the StatefulSet
    enabled: false
  annotations: {}
  accessModes:
    - ReadWriteOnce
  size: 1Gi
  storageClass: "elasticsearch-local-storage"
  local:
  - name: elasticsearch-0
    host: "local-168-182-110"
    path: "/opt/bigdata/servers/elasticsearch/data/data1"
  - name: elasticsearch-1
    host: "local-168-182-111"
    path: "/opt/bigdata/servers/elasticsearch/data/data1"
  - name: elasticsearch-2
    host: "local-168-182-112"
    path: "/opt/bigdata/servers/elasticsearch/data/data1"

protocol: http
httpPort: 9200
transportPort: 9300
service:
  enabled: true
  type: NodePort
  nodePort: 30920
  httpPortName: http
  • elasticsearch/templates/storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: {{ .Values.persistence.storageClass }}
provisioner: kubernetes.io/no-provisioner
  • elasticsearch/templates/pv.yaml
{{- range .Values.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.persistence.size }}
  accessModes:
  {{- range $.Values.persistence.accessModes }}
    - {{ . | quote }}
  {{- end }}
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}
  • elasticsearch/templates/statefulset.yaml
spec:
  volumeClaimTemplates:
    spec:
# 去掉這行
{{ toYaml .Values.volumeClaimTemplate | indent 6 }}

# 新增以下內(nèi)容:
      accessModes:
      {{- range .Values.persistence.accessModes }}
      - {{ . | quote }}
      {{- end }}
      resources:
        requests:
          storage: {{ .Values.persistence.size | quote }}
    {{- if .Values.persistence.storageClass }}
    {{- if (eq "-" .Values.persistence.storageClass) }}
      storageClassName: ""
    {{- else }}
      storageClassName: "{{ .Values.persistence.storageClass }}"
    {{- end }}
    {{- end }}

4)開始部署

# 如果沒有掛載目錄,則需要提前創(chuàng)建,也可自己更換掛載目錄
# 先創(chuàng)建本地存儲目錄
mkdir -p /opt/bigdata/servers/elasticsearch/data/data1
chmod -R 777 /opt/bigdata/servers/elasticsearch/data/data1

helm install my-elasticsearch ./elasticsearch -n elasticsearch --create-namespace
# 查看
helm get notes my-elasticsearch -n elasticsearch
kubectl get pods,svc -n elasticsearch -owide

# 查看日志
kubectl logs -f elasticsearch-master-0 -n elasticsearch

notes,可以獲取用戶密碼

NAME: my-elasticsearch
LAST DEPLOYED: Sat Sep  9 22:01:15 2023
NAMESPACE: elasticsearch
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.
  $ kubectl get pods --namespace=elasticsearch -l app=elasticsearch-master -w
2. Retrieve elastic user's password.
  $ kubectl get secrets --namespace=elasticsearch elasticsearch-master-credentials -ojsnotallow='{.data.password}' | base64 -d
3. Test cluster health using Helm test.
  $ helm --namespace=elasticsearch test my-elasticsearch

5)測試

賬號:elastic密碼獲?。?/p>

kubectl get secrets --namespace=elasticsearch elasticsearch-master-credentials -ojsnotallow='{.data.password}' | base64 -d

curl 訪問:

curl http://192.168.182.110:30920/
curl http://192.168.182.110:30920/_cat/nodes
curl http://192.168.182.110:30920/_cat/health?pretty

圖片圖片

6)elasticsearch-head

elasticsearch-head GitHub下載地址:https://github.com/mobz/elasticsearch-headGoogle 瀏覽器 elasticsearch-head 插件:

鏈接:https://pan.baidu.com/s/1kYcTjBDPmSWVzsku2hEW7w?pwd=67v4提取碼:67v4

7)卸載

helm uninstall my-elasticsearch -n elasticsearch

# 刪除數(shù)據(jù)
rm -fr /opt/bigdata/servers/elasticsearch/data/data1/*

五、Kibana 編排部署

地址:https://artifacthub.io/packages/helm/bitnami/kibana?modal=install

1)下載安裝包

helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/kibana --version 10.2.6
tar -xf kibana-10.2.6.tgz

2)構建鏡像

這里也不重新構建鏡像了,只是將鏡像推送到本地harbor加速,對構建鏡像不清楚的可以留言或私信。Kibana 和 Elasticsearch 需保證所用版本互相兼容,版本兼容性:https://www.elastic.co/cn/support/matrix#matrix_compatibility

圖片圖片

docker pull docker.io/bitnami/kibana:7.17.3
docker tag docker.io/bitnami/kibana:7.17.3 registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/kibana:7.17.3

# 上傳鏡像
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/kibana:7.17.3

3)修改yaml編排

  • kibana/values.yaml
image:
  registry: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative
  repository: kibana
  tag: 7.17.3

replicaCount: 1

persistence:
  enabled: true
  accessModes:
    - ReadWriteOnce
  size: 10Gi
  storageClass: "kibana-local-storage"
  local:
  - name: kibana-0
    host: "local-168-182-111"
    path: "/opt/bigdata/servers/kibana/data/data1"

service:
  ports:
    http: 5601
  type: NodePort
  nodePorts:
    http: "30601"

elasticsearch:
  hosts:
    - elasticsearch-master.elasticsearch
  port: "9200"
  • kibana/templates/values.yaml
{{- range .Values.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.persistence.size }}
  accessModes:
  {{- range $.Values.persistence.accessModes }}
    - {{ . | quote }}
  {{- end }}
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}
  • kibana/templates/storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: {{ .Values.persistence.storageClass }}
provisioner: kubernetes.io/no-provisioner

4)開始部署

# 先創(chuàng)建本地存儲目錄
mkdir -p /opt/bigdata/servers/kibana/data/data1
chmod -R 777 /opt/bigdata/servers/kibana/data/data1

helm install my-kibana ./kibana -n kibana --create-namespace
# 查看
helm get notes my-kibana -n kibana 
kubectl get pods,svc -n kibana -owide

5)測試驗證

kibana web 地址:http://192.168.182.110:30601/

圖片圖片

6)卸載

helm uninstall my-kibana -n kibana
kubectl delete ns kibana --force
ssh local-168-182-111 rm -fr /opt/bigdata/servers/kibana/data/data1/*

六、Elasticsearch7 常見API示例講解

1)ES7 集群狀態(tài)信息 API

要查看 Elasticsearch 7 集群的狀態(tài)和信息,您可以使用以下 API 操作:

1、獲取集群健康狀態(tài)

使用 GET 請求來獲取集群的健康狀態(tài)。以下是一個示例:

GET /_cluster/health

這個請求將返回有關集群健康狀態(tài)的信息,包括集群名稱、狀態(tài)(例如:green、yellow、red)、節(jié)點數(shù)量、分片數(shù)量、副本數(shù)量等。

2、獲取節(jié)點信息

使用 GET 請求來獲取有關集群中節(jié)點的信息。以下是一個示例:

GET /_cat/nodes?v

這個請求將返回節(jié)點的詳細信息,包括節(jié)點的名稱、IP 地址、節(jié)點角色(主節(jié)點、數(shù)據(jù)節(jié)點、協(xié)調(diào)節(jié)點等)等。

3、獲取索引信息

使用 GET 請求來獲取有關集群中索引的信息。以下是一個示例:

GET /_cat/indices?v

這個請求將返回索引的詳細信息,包括索引的名稱、狀態(tài)、文檔數(shù)量、分片數(shù)量、副本數(shù)量等。

4、獲取集群設置信息

使用 GET 請求來獲取集群的設置信息。以下是一個示例:

GET /_cluster/settings

這個請求將返回有關集群設置的信息,包括索引的分片和副本配置、分配策略等。

5、獲取節(jié)點統(tǒng)計信息

使用 GET 請求來獲取集群中節(jié)點的統(tǒng)計信息。以下是一個示例:

GET /_nodes/stats

這個請求將返回有關節(jié)點的各種統(tǒng)計信息,包括內(nèi)存使用、CPU 使用、磁盤使用等。

2)POST 與 PUT 請求方式的區(qū)別

在 Elasticsearch 7 中,POST 和 PUT 請求的區(qū)別涉及到文檔的創(chuàng)建和更新。以下是它們之間的主要區(qū)別:

1、POST 請求

  • POST 請求用于創(chuàng)建新文檔或將新文檔添加到索引中。
  • 當使用 POST 請求創(chuàng)建文檔時,Elasticsearch 會自動生成文檔的唯一 ID。
  • 如果在索引中已經(jīng)存在具有指定 ID 的文檔,POST 請求會失敗,不會覆蓋已存在的文檔。
  • POST 請求的常見用途包括將新文檔添加到索引中,而不必指定文檔的 ID。

示例使用 POST 請求創(chuàng)建文檔:

POST /my_index/_doc
{
  "name": "John Doe",
  "age": 30
}

2、PUT 請求

  • PUT 請求用于創(chuàng)建新文檔或更新現(xiàn)有文檔。
  • 當使用 PUT 請求創(chuàng)建文檔時,需要明確指定文檔的唯一 ID。如果具有相同 ID 的文檔已存在,則 PUT 請求將覆蓋該文檔。
  • PUT 請求的常見用途包括顯式地創(chuàng)建文檔并指定其 ID,以及更新現(xiàn)有文檔的內(nèi)容。

示例使用 PUT 請求創(chuàng)建或更新文檔:

PUT /my_index/_doc/1
{
  "name": "Jane Smith",
  "age": 35
}

總結:

  • 使用 POST 請求時,Elasticsearch 將為您生成文檔的 ID(如果未指定)并將文檔添加到索引中。
  • 使用 PUT 請求時,您需要明確指定文檔的 ID,并且可以用它來創(chuàng)建新文檔或覆蓋現(xiàn)有文檔。
  • 在某些情況下,根據(jù)需要選擇 POST 或 PUT 請求來執(zhí)行創(chuàng)建和更新操作。

3)ES7 增刪改查 API

在 Elasticsearch 7 中,您可以使用 RESTful API 執(zhí)行索引數(shù)據(jù)(文檔)的增刪改查操作。以下是一些常見的 Elasticsearch 操作示例及其講解:

1、添加文檔(Indexing)

要將文檔添加到 Elasticsearch 索引中,可以使用 POST 或 PUT 請求。以下是一個示例:

POST /my_index/_doc/1
{
  "name": "John Doe",
  "age": 30
}

這個示例使用 POST 請求將一個文檔添加到名為 my_index 的索引中。文檔的 ID 設置為 1。如果您使用 PUT 請求,也可以指定文檔的 ID。

2、獲取文檔(Retrieving)

要按 ID 獲取文檔,可以使用 GET 請求。以下是一個示例:

GET /my_index/_doc/1

這個示例使用 GET 請求按文檔 ID 1 從索引 my_index 中獲取文檔。

3、更新文檔(Updating)

要更新現(xiàn)有文檔,可以使用 POST 或 PUT 請求。以下是一個示例:

POST /my_index/_doc/1/_update
{
  "doc": {
    "age": 31
  }
}

這個示例使用 POST 請求來更新文檔 ID 1 中的 age 字段的值為 31。

4、刪除文檔(Deleting)

要刪除文檔,可以使用 DELETE 請求。以下是一個示例:

DELETE /my_index/_doc/1

4)ES7 模板 API

Elasticsearch 7 中引入了索引模板(Index Templates) API,允許您定義模板來自動應用于新索引的設置、映射和別名。這對于確保索引的一致性和管理大規(guī)模的數(shù)據(jù)非常有用。以下是 Elasticsearch 7 中索引模板 API 的一些示例和解釋:

1、創(chuàng)建索引模板(Put Index Template)

使用 PUT 請求創(chuàng)建索引模板,指定模板的名稱和設置。以下是一個示例:

PUT /_index_template/my_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 2
    },
    "mappings": {
      "properties": {
        "timestamp": {
          "type": "date"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}
  • 上述示例創(chuàng)建了一個名為 my_template 的索引模板,該模板將自動應用于匹配 logs-* 模式的所有索引。
  • 模板定義了索引的設置(分片數(shù)量和副本數(shù)量)和映射(字段類型和屬性)。

2、獲取索引模板(Get Index Template)

使用 GET 請求獲取特定索引模板的信息。以下是一個示例:

GET /_index_template/my_template

這個請求將返回名為 my_template 的索引模板的詳細信息。

3、列出所有索引模板(List All Index Templates)

使用 GET 請求列出所有已定義的索引模板。以下是一個示例:

GET /_index_template

4、刪除索引模板(Delete Index Template)

使用 DELETE 請求刪除特定索引模板。以下是一個示例:

DELETE /_index_template/my_template

5)ES7 冷熱數(shù)據(jù)設置

Elasticsearch 提供了數(shù)據(jù)熱(hot)和冷(cold)階段的設置,以幫助優(yōu)化數(shù)據(jù)存儲和查詢性能,特別是對于大規(guī)模的時間序列數(shù)據(jù)(如日志、度量和事件數(shù)據(jù))非常有用。以下是設置冷熱數(shù)據(jù)的一般步驟和一些配置選項:

1、創(chuàng)建索引模板(Index Template)

首先,您可以創(chuàng)建一個索引模板,以定義新索引的設置和分配策略,以及索引在不同階段之間的遷移策略。在模板中,您可以指定哪些條件應將索引劃分為熱、溫和冷(或其他階段),并定義相應的設置。

以下是一個示例索引模板,定義了熱、溫和冷階段的索引分配策略:

PUT /_index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.lifecycle.name": "logs_policy",
      "index.lifecycle.rollover_alias": "logs-alias",
      "index.routing.allocation.require.box_type": "hot"
    },
    "mappings": {
      "properties": {
        "timestamp": {
          "type": "date"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}
  • 上述示例創(chuàng)建了一個名為 logs_template 的索引模板,該模板將自動應用于匹配 logs-* 模式的所有索引。
  • 模板定義了索引的設置,包括分片數(shù)量、副本數(shù)量、生命周期策略、別名以及索引的映射。

2、創(chuàng)建生命周期策略(Lifecycle Policy)

接下來,創(chuàng)建一個生命周期策略,以定義索引在不同階段之間的遷移條件和操作。

PUT /_ilm/policy/logs_policy
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "30d"
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "cold": {
        "min_age": "90d",
        "actions": {
          "freeze": {},
          "read_only": {}
        }
      },
      "delete": {
        "min_age": "365d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  • 上述示例創(chuàng)建了一個名為 logs_policy 的生命周期策略,定義了四個不同的生命周期階段:熱、溫、冷和刪除。
  • 每個階段都有不同的遷移條件和操作,例如,熱階段在索引大小達到50GB或存在30天后執(zhí)行滾動操作。

3、創(chuàng)建索引并將其分配到不同的節(jié)點:

現(xiàn)在,當您創(chuàng)建新的日志索引時,它將自動應用索引模板和生命周期策略,以及分配到熱節(jié)點。

4、自動數(shù)據(jù)遷移:

一旦索引和生命周期策略配置完成,Elasticsearch 將自動執(zhí)行索引的遷移操作。數(shù)據(jù)將根據(jù)生命周期策略從一個階段遷移到另一個階段,以優(yōu)化性能和降低存儲成本。

這個設置允許您根據(jù)數(shù)據(jù)的訪問模式和重要性來優(yōu)化 Elasticsearch 集群的性能和成本效益。新的日志數(shù)據(jù)將從熱存儲階段自動遷移到溫存儲和冷存儲階段,從而使熱節(jié)點保持高性能,同時降低了冷數(shù)據(jù)的存儲成本。

6)ES7 數(shù)據(jù)平衡 API

雖然不推薦手動分片遷移,但您可以使用以下 API 將分片從一個節(jié)點遷移到另一個節(jié)點:

POST /_cluster/reroute
{
  "commands": [
    {
      "move": {
        "index": "your_index",
        "shard": 0,
        "from_node": "source_node",
        "to_node": "destination_node"
      }
    }
  ]
}

這個操作需要非常小心,因為錯誤的分片移動可能會導致數(shù)據(jù)丟失或集群不穩(wěn)定。因此,只有在非常特殊的情況下才應該手動干預分片分配。

7)ES7 禁用數(shù)據(jù)平衡 API

在 Elasticsearch 7 中,默認情況下,數(shù)據(jù)平衡是自動啟用的,它確保數(shù)據(jù)均勻分布在集群的各個節(jié)點和分片之間。然而,有時您可能需要禁用數(shù)據(jù)平衡,尤其是在特定情況下,例如集群維護期間或者出現(xiàn)異常情況時。以下是禁用數(shù)據(jù)平衡的方法:

1、設置節(jié)點屬性

Elasticsearch 允許您為節(jié)點設置屬性(node attributes)。您可以通過設置節(jié)點的屬性來控制數(shù)據(jù)平衡的行為。例如,您可以為節(jié)點設置一個自定義屬性,然后在進行集群維護期間,通過將節(jié)點標記為不可分配(disable allocation)來禁用數(shù)據(jù)平衡。

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "node_name"
  }
}

在上面的示例中,將 node_name 替換為您要禁用數(shù)據(jù)平衡的節(jié)點名稱。

2、暫時禁用數(shù)據(jù)平衡

您可以使用以下 API 暫時禁用數(shù)據(jù)平衡,直到您重新啟用它。這可以在進行特定維護操作時使用。

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

這將暫時禁用數(shù)據(jù)平衡,直到您通過以下方式重新啟用它:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}

3、集群維護模式

Elasticsearch 7 引入了集群維護模式(cluster maintenance mode),允許您更方便地執(zhí)行維護操作而不影響數(shù)據(jù)平衡。您可以將集群設置為維護模式,然后執(zhí)行維護操作,最后再將集群恢復到正常狀態(tài)。

啟用維護模式:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.cluster_maintenance_mode": "enable"
  }
}

執(zhí)行維護操作后,禁用維護模式:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.cluster_maintenance_mode": "disable"
  }
}

請注意,在維護模式下,Elasticsearch 會暫時禁用自動分片分配和數(shù)據(jù)平衡,以便您可以執(zhí)行維護操作。

無論您使用哪種方法,都應小心使用禁用數(shù)據(jù)平衡的功能,并確保在維護操作完成后重新啟用它,以保持集群的健康狀態(tài)。

責任編輯:武曉燕 來源: 大數(shù)據(jù)與云原生技術分享
相關推薦

2022-10-14 07:42:50

LuceneHTTPWeb

2022-10-10 12:54:00

Flink運維

2023-03-06 07:19:50

2022-11-08 08:55:31

2023-03-07 07:56:37

Sqoopk8s底層

2023-02-27 07:40:00

2023-03-03 07:54:21

2023-03-01 07:42:12

HBase編排部署數(shù)據(jù)

2022-11-06 21:31:11

云原生Sentinel集群模式

2023-08-29 10:27:32

2023-11-06 01:17:25

主機容器選項

2023-09-06 08:12:04

k8s云原生

2024-02-01 09:48:17

2022-04-22 13:32:01

K8s容器引擎架構

2022-11-28 17:22:32

高可用master節(jié)點

2023-09-08 08:09:12

k8sservice服務

2023-12-05 18:16:59

LTS版本K8s

2023-09-15 08:00:20

Ingress網(wǎng)關Istio

2023-11-06 07:16:22

WasmK8s模塊

2023-11-30 08:08:30

k8s優(yōu)雅停機
點贊
收藏

51CTO技術棧公眾號