一:选用ES原因

公司项目有些mysql的表数据已经超过5百万了,各种业务的查询入库压力已经凸显出来,初步打算将一个月前的数据迁移到ES中,mysql的老数据就物理删除掉。

首先是ES使用起来比较方便,对于项目初期存储一些不能删除但又一般使用不到的数据比较合适,

还有就是ES的存储采用索引分片式,使用数据的创建时间分片也很合适。

本文使用的ES版本:5.6.8,docker版本:18.06.3-ce。

本文的测试机器为两台百度云的2C4G的机器,每个机器分别部署三个节点(1个master,2个data),总共6个节点,次配置仅为研究测试用,具体生产业务要看情况考虑。

二:Docker的安装:

  参考我之前的安装文档:《Docker-常用基建的安装与部署》。

三:ES配置

1:创建es相关目录

cd /home/data/docker
mkdir -p es/cluster/es-0/conf
mkdir -p es/cluster/es-1/conf
mkdir -p es/cluster/es-2/conf
cd es/cluster/es-0/conf
touch elasticsearch.yml
# 一个机器 三个节点,复制两份
cd /home/data/docker
cp es/cluster/es-0/conf/elasticsearch.yml es/cluster/es-1/conf
cp es/cluster/es-0/conf/elasticsearch.yml es/cluster/es-2/conf

2:编辑 服务器A的 elasticsearch.yml

#跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
#集群名称(所有节点的集群名称必须一致)
cluster.name: es-nova
#节点名称(集群下每个节点都不相同)
node.name: node-0
#ifconfig查看当前系统的内网ip
network.host: 172.16.0.4
#对外服务的http端口,默认为9200
http.port: 9201
#设置可以访问的ip,默认为0.0.0.0,这里全部设置通过
network.bind_host: 0.0.0.0
#设置结点之间交互的ip地址
network.publish_host: 当前服务器的外网ip
#culster transport port
#节点之间交互的tcp端口
transport.tcp.port: 9301
transport.tcp.compress: true
#至少存在一个主资格节点时才进行主节点选举,防止脑裂
discovery.zen.minimum_master_nodes: 1
#是否有master选举资格:一个集群同时只有一个master存在,true代表有资格参与master选举
node.master: true
#是否作为数据节点:参与数据存储与查询
node.data: false
#等待集群至少存在多少节点数才进行数据恢复
gateway.recover_after_nodes: 3
#等待 5 分钟,或者3 个节点上线后,才进行数据恢复,这取决于哪个条件先达到
gateway.expected_nodes: 3
gateway.recover_after_time: 5m
#集群单播发现
discovery.zen.ping.unicast.hosts: ["外网ip:9301","另一台服务器外网ip:9301"]
# 连接集群超时时间
discovery.zen.ping_timeout: 120s
# discovery.zen.fd合理的设置可以避免正常机器重启造成的数据迁移
# 单次心跳检测ping超时时间
discovery.zen.fd.ping_timeout: 60s
# 多少次心跳检测失败才认为节点丢失
discovery.zen.fd.ping_retries: 3
# 集群机器间机器定时心跳检测时间
discovery.zen.fd.ping_interval: 30s
# 为保证ES性能,请同时关闭系统内存交换 swapp
#bootstrap.memory_lock: true

上面这个当前一个非数据节点的master节点的配置,然后再基于当前的配置,简单修改下,分别在es-1/conf 和 es-2/conf 下创建两个数据节点,

只需要修改以下配置:

node.name: node-1   
http.port: 9202  
transport.tcp.port: 9302
node.master: false
node.data: true
node.name: node-2   
http.port: 9203
transport.tcp.port: 9303
node.master: false
node.data: true 

3:编辑 服务器B的 elasticsearch.yml

#跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
#集群名称(所有节点的集群名称必须一致)
cluster.name: es-nova
#节点名称(集群下每个节点都不相同)
node.name: node-4
#ifconfig查看当前系统的内网ip
network.host: 172.16.0.4
#对外服务的http端口,默认为9200
http.port: 9201
#设置可以访问的ip,默认为0.0.0.0,这里全部设置通过
network.bind_host: 0.0.0.0
#设置结点之间交互的ip地址
network.publish_host: 当前服务器的外网ip
#culster transport port
#节点之间交互的tcp端口
transport.tcp.port: 9301
transport.tcp.compress: true
#至少存在一个主资格节点时才进行主节点选举,防止脑裂
discovery.zen.minimum_master_nodes: 1
#是否有master选举资格:一个集群同时只有一个master存在,true代表有资格参与master选举
node.master: true
#是否作为数据节点:参与数据存储与查询
node.data: false
#等待集群至少存在多少节点数才进行数据恢复
gateway.recover_after_nodes: 3
#等待 5 分钟,或者3 个节点上线后,才进行数据恢复,这取决于哪个条件先达到
gateway.expected_nodes: 3
gateway.recover_after_time: 5m
#集群单播发现
discovery.zen.ping.unicast.hosts: ["外网ip:9301","另一台服务器外网ip:9301"]
# 连接集群超时时间
discovery.zen.ping_timeout: 120s
# discovery.zen.fd合理的设置可以避免正常机器重启造成的数据迁移
# 单次心跳检测ping超时时间
discovery.zen.fd.ping_timeout: 60s
# 多少次心跳检测失败才认为节点丢失
discovery.zen.fd.ping_retries: 3
# 集群机器间机器定时心跳检测时间
discovery.zen.fd.ping_interval: 30s
# 为保证ES性能,请同时关闭系统内存交换 swapp
#bootstrap.memory_lock: true

和服务器A的不同配置仅仅 node.name和network.publish_host。

同样在当前服务器下也分别在es-1/conf 和 es-2/conf 下创建两个数据节点,

node.name: node-5  
http.port: 9202  
transport.tcp.port: 9302
node.master: false
node.data: true
node.name: node-6  
http.port: 9203
transport.tcp.port: 9303
node.master: false
node.data: true

四:修改宿主机的配置

如果es集群启动报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] vim /etc/sysctl.conf 
# 配置里需要添加
vm.max_map_count=262144
# 执行命令sysctl -p 生效
sysctl -p
如果es集群启动报错:memory locking requested for elasticsearch process but memory is not locked

# 修改limits.conf
vim /etc/security/limits.conf
# 添加 *表示所用用户

* soft nofile 65536

* hard nofile 65536

* soft nproc 32000

* hard nproc 32000

* hard memlock unlimited

* soft memlock unlimited

# 关闭selinux
vim /etc/sysconfig/selinux
# 将 SELINUX=enforcing 改为 SELINUX=disabled

五:集群

1:开启集群

分别启动服务器A的三个es节点、服务器B的三个es节点 (启动命令中仅docker的路径不同)

docker run -d --name es-0 -p 9201:9201 -p 9301:9301 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /home/data/docker/es/cluster/es-0/data:/usr/share/elasticsearch/data -v /home/data/docker/es/cluster/es-0/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/data/docker/es/cluster/es-0/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8 docker run -d --name es-1 -p 9202:9202 -p 9302:9302 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /home/data/docker/es/cluster/es-1/data:/usr/share/elasticsearch/data -v /home/data/docker/es/cluster/es-1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/data/docker/es/cluster/es-1/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8 docker run -d --name es-2 -p 9203:9203 -p 9303:9303 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /home/data/docker/es/cluster/es-2/data:/usr/share/elasticsearch/data -v /home/data/docker/es/cluster/es-2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /home/data/docker/es/cluster/es-2/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8
docker run -d --name es-0 -p 9201:9201 -p 9301:9301 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /root/data/docker/es/cluster/es-0/data:/usr/share/elasticsearch/data -v /root/data/docker/es/cluster/es-0/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/data/docker/es/cluster/es-0/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8

docker run -d --name es-1 -p 9202:9202 -p 9302:9302 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /root/data/docker/es/cluster/es-1/data:/usr/share/elasticsearch/data -v /root/data/docker/es/cluster/es-1/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/data/docker/es/cluster/es-1/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8

docker run -d --name es-2 -p 9203:9203 -p 9303:9303 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -v /root/data/docker/es/cluster/es-2/data:/usr/share/elasticsearch/data -v /root/data/docker/es/cluster/es-2/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /root/data/docker/es/cluster/es-2/logs:/user/share/elasticsearch/logs --restart=always elasticsearch:5.6.8

启动完成后,docker ps  以及docker logs es-0  去查看es是否启动成功。

2:常用的一些es命令

#集群健康
curl -XGET 127.0.0.1:9201/_cat/health?v

"status": 集群状态,重点关注项

* green正常
* yellow服务仍然可用但存在副本分片丢失,
* red 存在主分片丢失,集群不正常,存在数据丢失可能

shards :所有分片数(主分片+副本分片)

pri:主分片数

# 查询集群节点
curl -XGET 127.0.0.1:9203/_cat/nodes?v

v替换为format=json可以使用json形式返回

表头字段 含义 用途
Ip IP地址  
heap.percent heap使用百分比 内存使用高时重点关注
ram.percent 系统内存使用百分比 内存使用高时重点关注
cpu  当前cpu使用百分比 CPU使用高时重点关注
load_1m 最近1分钟cpu load CPU使用高时重点关注
load_5m 最近5分钟cpu load CPU使用高时重点关注
load_15m 最近15分钟cpu load CPU使用高时重点关注
node.role 三字母缩写 m: 主节点  d: 数据节点  i: 协调节点  
master * 表示当前节点为主节点  

# 分片信息查询
curl -XGET 127.0.0.1:9201/_cat/shards?v

 

表头字段 含义 用途
index 索引名  
shard 分片  
prirep p:主分片,r:副本分片  
state 节点状态  
docs 分片文档数  
store 分片数据大小  
ip 分片所在ip地址  
node 分片所在节点名称 结合prirep,确定多个主分片是否分布在同一个节点

分片移动(当多个主分片分配在同一节点,造成单节点写入压力较大,可将其中一个主分片移动到空闲节点)

POST _cluster/reroute
{
"commands": [
{
"move": {
"index": "poi-address", // 索引名
"shard": 2, // 分片号
"from_node": "node-1", // 源节点
"to_node": "node-5" // 目标节点
}
}
]
}
commands为json数据,支持多个迁移命令同时执行,可通过GET /_cat/recovery?v 查看迁移进度

六:参考文献

1:Elasticsearch: 权威指南

Docker Elasticsearch 集群配置的更多相关文章

  1. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  2. elasticsearch集群配置 (Tobe Continue)

    elasticsearch集群配置 (Tobe Continue)   准备 首先需要在每个节点有可以正常启动的单节点elasticsearch   elasticsearch集群配置仅需要在elas ...

  3. elasticsearch 集群配置

    2015-10-10 09:56 by 轩脉刃, 999 阅读, 1 评论, 收藏, 编辑 elasticsearch 集群 搭建elasticsearch的集群 现在假设我们有3台es机器,想要把他 ...

  4. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

  5. ElasticSearch(十):Elasticsearch集群配置

    我本地虚拟机配置了两台centos机器,分别安装了elasticsearch6.4.0版本,IP分别为:192.168.56.12, 192.168.56.13 分别修改两个机器上Elasticsea ...

  6. ElasticSearch集群配置

    因机器有限,本文只做单机3个节点的集群测试. 1.集群测试信息 elasticsearch版本:elasticsearch-2.4.1 windowns版本:win10 2.解压elasticsear ...

  7. Elasticsearch集群配置以及REST API使用

    ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并 ...

  8. Docker Swanm集群配置

    首先 可以用ContOS虚拟机   克隆  5个虚拟机,注意(克隆主机必须装了Docker,克隆后,克隆机都会有Docker) 配置 网络 克隆CentOS虚拟机 最后和到如下结果 打开2377端口 ...

  9. Elasticsearch集群搭建教程及生产环境配置

    Elasticsearch 是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性. 本教程将提供有关如何设置 Elasticsearch 集群的一些信息,并将添加一 ...

随机推荐

  1. cisco 4500X 交换机限速

    一.配置步骤 1.定义ACL以匹配数据流 ip access-list extended aclname 2.配置流量分类和策略 class-map [match-all(默认:完全符合)/Match ...

  2. Maven pom中的 scope 详解

    Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了 ...

  3. Flink-v1.12官方网站翻译-P022-Working with State

    有状态程序 在本节中,您将了解Flink为编写有状态程序提供的API.请看一下Stateful Stream Processing来了解有状态流处理背后的概念. 带键值的数据流 如果要使用键控状态,首 ...

  4. L2-007 家庭房产 (25分) 并查集

    题目链接 题解:并查集把一个家的并在一起,特殊的一点是编号大的并到小的去.这个题有个坑编号可能为0000,会错数据3和5. 1 #include<bits/stdc++.h> 2 usin ...

  5. P1387 最大正方形 && P1736 创意吃鱼法(DP)

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  6. 牛客的两道dfs

    1.传送门:牛客13594-选择困难症 题意:给你k类物品,每类物品有a[i]个每个物品都有一个value,每类物品最多选一个,要求有多少种选法使得总value>m(没要求每类物品都必须选) 题 ...

  7. tomacat配置虚拟主机 && 配置缺省页面

    在conf文件夹下的server.xml文件中 在c盘建立一个sina文件夹,里面建立一个mail文件夹,在mail文件夹下面建立一个1.html网页 你配置完如果直接访问http://www.sin ...

  8. Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思维,字符串)

    题意:给你某个字符串的\(n-1\)个前缀和\(n-1\)个后缀,保证每个所给的前缀后缀长度从\([1,n-1]\)都有,问你所给的子串是前缀还是后缀. 题解:这题最关键的是那两个长度为\(n-1\) ...

  9. 3.keepalived+脚本实现nginx高可用

    标题 : 3.keepalived+脚本实现nginx高可用 目录 : Nginx 序号 : 3 else exit 0 fi else exit 0 fi - 需要保证脚本有执行权限,可以使用chm ...

  10. anaconda jupyter notebook 启动方法

    介绍 anaconda jupyter notebook是一种基于浏览器的python编译环境.(大概) 使用时可能因为浏览器缓存造成问题. 但是很方便. 启动方法 anaconda navigato ...