美文网首页
elasticsearch docker 配置安装

elasticsearch docker 配置安装

作者: 偷蛋蛋 | 来源:发表于2020-05-25 16:48 被阅读0次

安装准备

1. 机器环境配置

| 机器 | 环境 |配置
| ------------ | ------------ |
| 192.168.213.74 | node and master | 40G ssd 系统盘 300G HHD 数据盘 独立挂载
| 192.168.213.74 | node and master | 40G ssd 系统盘 300G HHD 数据盘 独立挂载
| 192.168.213.77 | node and master | 40G ssd 系统盘 300G HHD 数据盘 独立挂载
| 192.168.213.78 |备用 | 40G ssd 系统盘 300G HHD 数据盘 独立挂载

三节点模式,充当node和master节点

2. docker 环境配置
sudo yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
rm -rf /var/lib/docker && rm -rf /data/storage/
sudo yum install -y yum-utils && yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mkdir -p /etc/docker/
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dthsa6yd.mirror.aliyuncs.com" ]
}
EOF
yum install -y docker-ce
systemctl start docker && systemctl stop docker && mkdir -p /data/storage && mv /var/lib/docker /data/storage/ && ln -s /data/storage/docker /var/lib/docker
systemctl start docker
find / -name 'simple_install.sh' |xargs rm -rf
exit 0

3. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
4. 调高JVM线程数限制数量
vim /etc/sysctl.conf
###加入如下内容:
vm.max_map_count=262144
###启用配置:
sysctl -p

处理错误 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

开始安装

1.修改配置文件
### 192.168.213.74, 从docker景象中获取配置文件模板,修改如下 
mkdir -p /data/workapp/es
###创建ES数据存储位置
mkdir -p /data/workdata/es/data 
### 创建es01

创建配置 es01

###集群名称
cluster.name : elasticsearch-cluster
###节点名称
node.name : es-node1
###绑定host,在docker内部,改成0.0.0.0
network.bind_host : 0.0.0.0
network.publish_host : 192.168.213.74
http.port : 9200
transport.tcp.port : 9300
http.cors.enabled : true
http.cors.allow-origin : "*"
###是否为master节点
node.master : true
###是否为数据节点
node.data : true
###配置集群机器环境
discovery.zen.ping.unicast.hosts : ["192.168.213.74:9300","192.168.213.75:9300","192.168.213.77:9300"]
###最小master节点数
discovery.zen.minimum_master_nodes : 1
cluster.initial_master_nodes : es-node1

创建配置 es02

cluster.name : elasticsearch-cluster
node.name : es-node2
network.bind_host : 0.0.0.0
network.publish_host : 192.168.213.75
http.port : 9200
transport.tcp.port : 9300
http.cors.enabled : true
http.cors.allow-origin : "*"
node.master : true
node.data : true
discovery.zen.ping.unicast.hosts : ["192.168.213.74:9300","192.168.213.75:9300","192.168.213.77:9300"]
discovery.zen.minimum_master_nodes : 1
cluster.initial_master_nodes : es-node2

创建配置 es03

cluster.name : elasticsearch-cluster
node.name : es-node3
network.bind_host : 0.0.0.0
network.publish_host : 192.168.213.77
http.port : 9200
transport.tcp.port : 9300
http.cors.enabled : true
http.cors.allow-origin : "*"
node.master : true
node.data : true
discovery.zen.ping.unicast.hosts : ["192.168.213.74:9300","192.168.213.75:9300","192.168.213.77:9300"]
discovery.zen.minimum_master_nodes : 1
cluster.initial_master_nodes : es-node3

启动ES

docker run -e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" --restart=always -d -p 9200:9200 -p 9300:9300 -v /data/workapp/es/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v /data/workdata/es/data:/usr/share/elasticsearch/data --name es01 registry.cn-hangzhou.aliyuncs.com/touniba/elasticsearch:7.6.2

docker run -e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" --restart=always -d -p 9200:9200 -p 9300:9300 -v /data/workapp/es/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v /data/workdata/es/data:/usr/share/elasticsearch/data --name es02 registry.cn-hangzhou.aliyuncs.com/touniba/elasticsearch:7.6.2

docker run -e ES_JAVA_OPTS="-Xms4096m -Xmx4096m" --restart=always -d -p 9200:9200 -p 9300:9300 -v /data/workapp/es/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml  -v /data/workdata/es/data:/usr/share/elasticsearch/data --name es03 registry.cn-hangzhou.aliyuncs.com/touniba/elasticsearch:7.6.2 

检查启动情况,如有异常,自行google

ES 7.6 镜像包比较大 ,所有我从阿里云网络下载下来上传到个人私服了

注意
ES_JAVA_OPTS= -Xms4096m -Xmx4096m 内存必须保持一致

检查启动是否成功

curl http://地址:9200/_cat/health

也可以使用工具google插件 elasticsearch head 工具对ES进行管理
截图如下
[图片上传失败...(image-e3a4a2-1590396462656)]

问题保留

x-pack 没有安装,后续可以安装配置,进行监控和权限管理

思考

脑裂问题:

一个集群中只有一个A主节点,A主节点因为需要处理的东西太多或者网络过于繁忙,从而导致其他从节点ping不通A主节点,这样其他从节点就会认为A主节点不可用了,就会重新选出一个新的主节点B。过了一会A主节点恢复正常了,这样就出现了两个主节点,导致一部分数据来源于A主节点,另外一部分数据来源于B主节点,出现数据不一致问题,这就是脑裂。

尽量避免脑裂,需要添加最小数量的主节点配置:

discovery.zen.minimum_master_nodes: (有master资格节点数/2) + 1

这个参数控制的是,选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。

常用做法(中大规模集群)

1. Master 和 dataNode 角色分开,配置奇数个master,如3
2. 单播发现机制,配置master资格节点:

discovery.zen.ping.multicast.enabled: false —— 关闭多播发现机制,默认是关闭的

discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] —— 配置单播发现的主节点ip地址,其他从节点要加入进来,就得去询问单播发现机制里面配置的主节点我要加入到集群里面了,主节点同意以后才能加入,然后主节点再通知集群中的其他节点有新节点加入

3. 配置选举发现数,及延长ping master的等待时长

discovery.zen.ping_timeout: 30(默认值是3秒)——其他节点ping主节点多久时间没有响应就认为主节点不可用了
discovery.zen.minimum_master_nodes: 2 —— 选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举

索引应该设置多少个分片

每个分片本质上就是一个Lucene索引, 因此会消耗相应的文件句柄, 内存和CPU资源。
每个搜索请求会调度到索引的每个分片中. 如果分片分散在不同的节点倒是问题不太. 但当分片开始竞争相同的硬件资源时, 性能便会逐步下降。
ES使用词频统计来计算相关性. 当然这些统计也会分配到各个分片上. 如果在大量分片上只维护了很少的数据, 则将导致最终的文档相关性较差。

相关文章

网友评论

      本文标题:elasticsearch docker 配置安装

      本文链接:https://www.haomeiwen.com/subject/bboyahtx.html