es集群搭建-离线搭建、k8s搭建
ES基本概念名词Cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。Shards代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把
ES基本概念名词
Cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
Shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
Recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。
Shards 分片:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Replicas分片:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
离线搭建es集群
参考博客链接
https://blog.csdn.net/fiy_fish/article/details/108501550
k8s搭建es集群
在k8s中不能直接修改系统参数(ulimit)。官网上的事例是在docker上部署的,docker可以通过ulimits来修改用户资源限制。所以需要修改镜像
镜像下载地址
下载地址参考:https://www.docker.elastic.co
编写dockerfile重新构建镜像
以官网镜像为基础镜像
vi Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:7.14.0
COPY run.sh /
RUN chmod 775 /run.sh
CMD ["/run.sh"]
启动脚本
vi run.sh
#!/bin/bash
# 设置memlock无限制
ulimit -l unlimited
exec su elasticsearch /usr/local/bin/docker-entrypoint.sh
标注为master的节点表示master候选节点,具备成为master的资格,实际的master节点在运行时由其他节点投票产生,集群健康的情况下,同一时刻只有一个master节点,否则称之为脑裂,会导致数据不一致。
问题描述:(es环境为7.2.0)
新版废弃了原先discovery.zen.ping.unicast.hosts及discovery.zen.minimum_master_nodes的探测方式,而是改为了discovery.seed_hosts及cluster.initial_master_nodes,其中第一项换汤不换药,值还是一样的,我们还是填内部服务域名,而后一项就有点恶心了,这项在实体服务器上配置没任何问题,把符合master节点的ip或主机名配进去就可以了,但在k8s环境下,master节点的ip是pod ip,随即分配的,主机名由于是deployment下部署的,主机名的尾巴也是随机字符,同样无法指定,不配的话各节点服务器无法选举master,无法组成集群。
办法:将es-master部署方式由depolyment调整至statefulset,这样就解决了主机名无法指定的问题,配置如下:
- name: cluster.initial_master_nodes
value: "es-master-0,es-master-1,es-master-2"
es部署yaml文件
存储pvc使用nfs,创建storageclass,这里直接使用,不再贴出yaml。
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
elastic-app: elasticsearch
name: elasticsearch-admin
namespace: elk
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: elasticsearch-admin
labels:
elastic-app: elasticsearch
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: elasticsearch-admin
namespace: elk
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
elastic-app: elasticsearch
role: master
name: es-master
namespace: elk
spec:
serviceName: es-master
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
elastic-app: elasticsearch
role: master
template:
metadata:
labels:
elastic-app: elasticsearch
role: master
spec:
#将持久卷声明
volumes:
- name: es-master-data
persistentVolumeClaim:
claimName: pvc-es-master
containers:
- name: es-master
image: elasticsearch:7.14.0-ulimit
lifecycle:
postStart:
exec:
command: ["/bin/bash", "-c", "sysctl -w vm.max_map_count=262144; chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data;"]
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
#修改es默认的数据存储目录,否则多个节点同时写一个目录es权限不允许
- name: "path.data"
value: "/usr/share/elasticsearch/data/$(MY_POD_NAME)"
- name: "cluster.name"
value: "elasticsearch-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.seed_hosts" #7.x的配置方式
value: "elasticsearch-discovery"
- name: "node.master"
value: "true"
- name: "node.data"
value: "false"
- name: "node.ingest"
value: "false"
- name: "ES_JAVA_OPTS"
value: "-Xms1024m -Xmx1024m"
- name: "cluster.initial_master_nodes"
value: "es-master-0,es-master-1,es-master-2"
securityContext:
privileged: true
#将持久卷映射为数据目录的父目录
volumeMounts:
- name: es-master-data
mountPath: /usr/share/elasticsearch/data/
serviceAccountName: elasticsearch-admin
---
kind: Service
apiVersion: v1
metadata:
labels:
elastic-app: elasticsearch
name: elasticsearch-discovery
namespace: ns-elasticsearch
spec:
ports:
- port: 9300
targetPort: 9300
selector:
elastic-app: elasticsearch
role: master
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
elastic-app: elasticsearch
role: data
name: es-data
namespace: elk
spec:
serviceName: es-data
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
elastic-app: elasticsearch
template:
metadata:
labels:
elastic-app: elasticsearch
role: data
spec:
#将es-data持久卷声明
volumes:
- name: es-data-data
persistentVolumeClaim:
claimName: pvc-es-data
nodeSelector:
es: enable
containers:
- name: es-data
image: elasticsearch:7.14.0-ulimit
lifecycle:
postStart:
exec:
command: ["/bin/bash", "-c", "sysctl -w vm.max_map_count=262144; chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data;"]
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
#修改es默认的数据存储目录,否则多个节点同时写一个目录es权限不允许
- name: "path.data"
value: "/usr/share/elasticsearch/data/$(MY_POD_NAME)"
- name: "cluster.name"
value: "elasticsearch-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.seed_hosts"
value: "elasticsearch-discovery"
- name: "node.master"
value: "false"
- name: "node.data"
value: "true"
- name: "ES_JAVA_OPTS"
value: "-Xms1024m -Xmx1024m"
securityContext:
privileged: true
#将持久卷映射到数据目录的父目录
volumeMounts:
- name: es-data-data
mountPath: /usr/share/elasticsearch/data/
serviceAccountName: elasticsearch-admin
---
kind: Service
apiVersion: v1
metadata:
labels:
elastic-app: elasticsearch-service
name: elasticsearch-service
namespace: elk
spec:
ports:
- port: 9200
targetPort: 9200
nodePort: 32000
selector:
elastic-app: elasticsearch
type: NodePort
---
kind: Service
apiVersion: v1
metadata:
labels:
elastic-app: elasticsearch-service
name: elasticsearch-api-service
namespace: ns-elasticsearch
spec:
ports:
- port: 9300
targetPort: 9300
nodePort: 32100
selector:
elastic-app: elasticsearch
type: NodePort
参考博客
https://www.cnblogs.com/soft2018/p/10213266.html
https://blog.csdn.net/duanqing_song/article/details/106219197
更多推荐
所有评论(0)