ES集群

1.ES集群基础概念

1.不需要了解太多java即可维护ES集群
2.部署简单,主从集群,从节点加入集群,自动同步数据
3.故障转移功能,节点故障,数据自动复制到其他节点
4.理解数据分片
主分片:存储数据节点,负责读写请求
副分片:主分片的副本,提供读请求
5.部署ES集群,至少2台机器

2.ES两节点部署

# 准备2个新es节点,不要带有数据
# es-node1 10.0.0.51
# es-node2 10.0.0.52

1. 安装ES
[root@es-node1 ~]#ls /opt/
all-db.sql  elasticsearch-7.9.1-x86_64.rpm  kibana-7.9.1-x86_64.rpm


2. # 修改内存相关参数
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity


3.修改配置文件
# es-node1

cat > /etc/elasticsearch/elasticsearch.yml <<'EOF'
cluster.name: yuchao_es
node.name: es-node1
path.data: /var/lib/elasticsearch/
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 127.0.0.1,10.0.0.51 
http.port: 9200
discovery.seed_hosts: ["10.0.0.51","10.0.0.52"]
cluster.initial_master_nodes: ["10.0.0.51"]
EOF

# es-node2
cat > /etc/elasticsearch/elasticsearch.yml <<'EOF'
cluster.name: yuchao_es
node.name: es-node2
path.data: /var/lib/elasticsearch/
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 127.0.0.1,10.0.0.52
http.port: 9200
discovery.seed_hosts: ["10.0.0.51","10.0.0.52"]
cluster.initial_master_nodes: ["10.0.0.51"]
EOF

# cluster.initial_master_nodes 作为初始化创建新es集群的作用,写一个节点就好



# 4.如果要清理原有es数据
systemctl stop elasticsearch
mv /var/lib/elasticsearch/* /tmp/es/
systemctl daemon-reload
systemctl restart elasticsearch

# 5.启动两个es
systemctl daemon-reload 
systemctl restart elasticsearch

netstat -tunlp|grep 9200
curl 127.0.0.1:9200


# 6.检查es插件

 

集群细节

 

1. 读写可以在任一节点,es-head插件也是连接任一节点
2. 主节点负责读写请求,主节点挂了,父节点提升角色
3. es端口是 9200、9300

[root@es-node1 ~]#netstat -tunlp|grep java
tcp6       0      0 10.0.0.51:9200          :::*                    LISTEN      8813/java           
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      8813/java           
tcp6       0      0 10.0.0.51:9300          :::*                    LISTEN      8813/java           
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      8813/java           
[root@es-node1 ~]#

 

集群节点信息

 

集群维护

创建index且定义副本与分片

 

7.x版本es之后,默认一个分片,一个副本。

  • 数据完整,表示分片正常
    • 主分片读写,副本分片读。
put /t2/
{
    "settings":{
        "number_of_shards":3, 
        "number_of_replicas":1
    }
}

POST /t2/_doc
{
    "website":"www.yuchaoit.cn"
}



#############

负载均衡

 

集群颜色状态

绿色,数据完整,副本数正确。
黄色,数据完整,副本数错误。
红色,索引数据异常不完整。

副本数异常,黄色

PUT /t2/_settings/
{
    "settings":{
        "number_of_replicas":2  # 将t2库的数据,设置2个副本。
    }
}


# 黄色表示你某个es机器挂了,副本数不对了。
# es限制,一个机器,只能有一个i节点



# 恢复绿色
PUT /t2/_settings/
{
    "settings":{
        "number_of_replicas":1  # 将t2库的数据,设置2个副本。
    }
}

# 修改所有索引的副本

PUT /_all/_settings/
{
    "settings":{
        "number_of_replicas":0
    }
}

 

索引异常,红色

当某个索引出错,es集群提示红色。

ELK架构采用的index设置

3分片,1副本即可。

3.ES加入节点,3节点

1.直接复制超哥前面的部署文档,新加一个es机器

rpm -ivh elasticsearch-7.9.1-x86_64.rpm 

2. # 修改内存相关参数
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity


3.修改配置文件,这里有坑,只需要写发现新节点即可
# 写入自身,集群任意节点都可以同步数据
# es-node1

cat > /etc/elasticsearch/elasticsearch.yml <<'EOF'
cluster.name: yuchao_es
node.name: es-node3
path.data: /var/lib/elasticsearch/
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 127.0.0.1,10.0.0.53
http.port: 9200
discovery.seed_hosts: ["10.0.0.51","10.0.0.53"] 
EOF




# 5.启动两个es
systemctl daemon-reload 
systemctl restart elasticsearch

netstat -tunlp|grep 9200
curl 127.0.0.1:9200

检查新3节点es集群状态

7.x系列的es默认副本规则是,1分片,1副本

有变化的是,我们自己设置的,原本的t2索引,规则是3分片,1副本
以及ES确保所有节点能负载均衡数据。

 


 

es节点故障情况

关闭es-node3
[root@es-node3 ~]#systemctl stop elasticsearch.service 
[root@es-node3 ~]#

1.es集群会在短暂的故障后,将数据切换到其他节点,确保健康,以及保障index的分片、副本数。
2. es 7.x系列之后,要求,至少有2个节点正常,就是健康的。
3. es数据分片颜色状态(插件观察)
- 紫色,迁移中
- 黄色,复制中
- 绿色,正常
posted @ 2024-04-11 10:14  Mrterrific  阅读(16)  评论(0编辑  收藏  举报