写点什么

ElasticSearch 低成本高可用最佳实践

作者:冰心的小屋
  • 2022-12-02
    北京
  • 本文字数:1644 字

    阅读完需:约 5 分钟

ElasticSearch 低成本高可用最佳实践

1. 目标

本方案主要解决单节点故障对集群造成的影响,保证数据的完整性、集群功能的正确性。


2. 方案步骤

  1. Master 节点至少 3 个,不同物理主机部署

  2. 所有 Master 节点需配置在属性 discovery.seed_hosts 中,适用于所有节点

  3. 数据节点:当 number_of_replicas=1 时,不同物理主机部署;number_of_replicas=2 时,每台物理主机最多部署两个数据节点,也就是说每台物理主机最多部署的数据节点数量等于 number_of_replicas。

3. 方案说明

  1. Master 节点主要职责:集群管理、节点管理和索引管理,如果单 Master 挂掉,集群无法对外提供服务,所以 Master 至少 >=3 的奇数节点部署在其他物理机。

  2. 为了保证数据的完整性,1 份数据至少存储在两个不同的物理中。生产级的做法是存储 3 份数据,每份数据存储于不同物理主机。


4. 集群准备

4.1 主机资源


4.2 安装步骤

#!/bin/bash# 1. 生成密钥ssh-keygen# 2. 免密其他机器for ip in $(seq 1 7);do ssh-copy-id 172.17.48.2$ip;done# 3. 下载mkdir ~/shellcd ~/shellwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.7-linux-x86_64.tar.gz
# 4. 安装mastertar -xvf elasticsearch-7.17.7-linux-x86_64.tar.gz
echo "-Xms4096m" >> elasticsearch-7.17.7/config/jvm.optionsecho "-Xmx4096m" >> elasticsearch-7.17.7/config/jvm.options
for i in $(seq 1 3)do
ip=172.17.48.2$i
cat << EoF > elasticsearch-7.17.7/config/elasticsearch.ymlcluster.name: zggnode.name: master-$inode.master: truenode.data: falsepath.data: ./datanetwork.host: $iphttp.port: 9200transport.tcp.port: 9300discovery.seed_hosts: ["172.17.48.21:9300", "172.17.48.22:9300", "172.17.48.23:9300"]cluster.initial_master_nodes: ["172.17.48.21", "172.17.48.22", "172.17.48.23"]EoF
cp -R elasticsearch-7.17.7 master-$iscp -r master-$i $ip:/home/hadoopdone
# 5. 安装datafor i in $(seq 4 7)do
ip=172.17.48.2$i
cat << EoF > elasticsearch-7.17.7/config/elasticsearch.ymlcluster.name: zggnode.name: data-$inode.master: falsenode.data: truepath.data: ./datanetwork.host: $iphttp.port: 9200transport.tcp.port: 9300discovery.seed_hosts: ["172.17.48.21:9300", "172.17.48.22:9300", "172.17.48.23:9300"]cluster.initial_master_nodes: ["172.17.48.21", "172.17.48.22", "172.17.48.23"]EoF
cp -R elasticsearch-7.17.7 data-$i
scp -r data-$i $ip:/home/hadoopdone
复制代码


4.3 创建分片

PUT http://182.92.99.60:9200/patent_cn{  "settings": {      "index": {        "routing": {          "allocation": {            "include": {              "_name": "data-3,data-4,data-5,data-6"            },            "total_shards_per_node": "12"          }        },        "number_of_shards": "16",        "number_of_replicas": "1"      }    }}
复制代码



4.4 批量写入数据

#!/bin/bashfor id in $(seq 1 100)do
cat << EoF > test.json{ "value": "`uuidgen`" }EoF
curl -XPUT "http://182.92.99.60:9200/patent_cn/_doc/"$id"?pretty" -H 'Content-Type: application/json' -d@test.json
done
复制代码



5. 方案验证

5.1 单 master 挂掉对历史数据读、实时数据写的影响

这里面 master-2 为主节点,kill 掉

可以发现集群重启选择了 master 节点

5.1.1 验证历史数据的读请求


5.1.2 验证实时数据的写请求

通过 head,可以看到插入的数据


5.2 单数据节点挂掉对历史数据读、实时数据写的影响

这里面 kill data-3



5.2.1 验证历史数据的读请求

#!/bin/bashfor id in $(seq 1 100)do
curl "http://182.92.99.60:9200/patent_cn/_doc/"$id"" -H 'Content-Type: application/json'echo
done
复制代码



5.2.2 验证实时数据的写请求

通过 head 进行查看

6. 结论

  1. 单 master 节点挂掉,对历史数据的读、实时数据的写无影响

  2. 单 node 节点挂掉,对历史数据的读、实时数据的写无影响

发布于: 2022-12-02阅读数: 28
用户头像

分享技术上的点点滴滴! 2013-08-06 加入

一杯咖啡,一首老歌,一段代码,欢迎做客冰屋。

评论

发布
暂无评论
ElasticSearch 低成本高可用最佳实践_elasticsearch_冰心的小屋_InfoQ写作社区