基于Docker的Elasticsearch集群部署

本文是基于ES5.6.3和Docker的集群部署、配置说明,如有错误或更好的建议请指正

节点类型

Master节点 (主节点)

node.master: true 
node.data: false

这样配置的节点为master节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。

为了防止数据丢失,配置discovery.zen.minimum_master_nodes设置是至关重要的

(默认为1),每个主节点应该知道形成一个集群的最小数量的主资格节点的数量。

解释如下:

​ 假设我们有一个集群。有3个主资格节点,当网络发生故障的时候,有可能其中一个节点不能和其他节点进行通信了。这个时候,当discovery.zen.minimum_master_nodes设置为1的时候,就会分成两个小的独立集群,当网络好的时候,就会出现数据错误或者丢失数据的情况。当discovery.zen.minimum_master_nodes设置为2的时候,一个网络中有两个主资格节点,可以继续工作,另一部分,由于只有一个主资格节点,则不会形成一个独立的集群,这个时候当网络回复的时候,节点又会从新加入集群。

设置这个值的原则是:

(master_eligible_nodes / 2)+ 1

Data节点(数据节点)

node.master: false 
node.data: true

数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。

Client节点 (客户端节点)

当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用。配置如下:

node.master: false 
node.data: false

在配置ES集群的时候,要根据现场情况进行配置

下面举例来进行集群配置。

准备工作

  • Elasticsearch5.6.3镜像
  • 两台服务器
  • 两份elasticsearch.yml配置文件

操作

首先我这里有两台服务器,172.16.73.49 和 172.16.73.50
计划把172.16.73.50作为master节点,172.16.73.49作为data节点。

1.准备配置文件

在用docker启动master节点前,我们需要先写好master节点的elasticsearch.yml文件。我准备好的配置文件内容如下:

cluster.name: "boss-es-cluster"
node.name: node-50
node.master: true
node.data: true
network.host: 0.0.0.0
network.publish_host: 172.16.73.50
discovery.zen.ping.unicast.hosts: ["172.16.73.49"]
discovery.zen.minimum_master_nodes: 1

解释一下内容:

cluster.name:  //集群名称。如果想让多个节点加入一个集群,那么需要使集群名称一致。
node.name: //节点名,为这个节点起一个独一无二的名字
node.master: //该节点是否担任master角色
node.data: //该节点是否可以担任data节点的角色
network.host: //设置为0.0.0.0 ,意思是任何IP都可以访问
network.publish_host: //本节点在外部的IP
discovery.zen.minimum_master_nodes: //自动发现master节点的最小数,如果这个集群中配置进来的master节点少于这个数目,es的日志会一直报master节点数目不足。
discovery.zen.ping.unicast.hosts: // 按照我的理解,这里配置的host ip才是可以ping通的,因此在这里加上49的ip。因为本文是只有两个节点的es集群,所以只写对方的ip即可。如果是大于2个以上的节点的es集群,那么我想应该是在这里写上所有集群的ip
在这个配置中,注意到这个节点既是主节点又是数据节点,实际上对这个节点的压力是挺大的,在资源比较充裕的条件下不建议这样做。

对比一下 49 这个data节点的配置文件:

cluster.name: "boss-es-cluster"
node.name: node-49
node.master: false
node.data: true
network.host: 0.0.0.0
network.publish_host: 172.16.73.49
discovery.zen.ping.unicast.hosts: ["172.16.73.50"]

2.准备目录

在172.16.73.49和172.16.73.50上,都准备如下目录结构:

  • /var/espn/config
  • /var/espn/data

config是挂载elasticsearch.yml的目录
data是挂载数据的目录

3.启动master节点

在172.16.73.50上 ,执行:

docker run -d --name=espn-50 -p 9200:9200 -p 9300:9300  -v /var/espn/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /var/espn/data:/usr/share/elasticsearch/data elasticsearch:5.6.3

将master节点容器命名为espn-50,开放9200 和 9300端口,并挂载config目录下的elasticsearch.yml和data目录

4.启动data节点

在172.16.73.49上 ,执行:

docker run -d --name=espn-49 -p 9200:9200 -p 9300:9300  -v /var/espn/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /var/espn/data:/usr/share/elasticsearch/data elasticsearch:5.6.3

至此为止,如果docker启动无误,我们就可以来看一下各个es节点状态和集群状态了。

5.确认集群

在172.16.73.50上:

$ curl 'localhost:9200'

response:

{
  "name" : "node-50",
  "cluster_name" : "boss-es-cluster",
  "cluster_uuid" : "kNr1ejDGQ2GZCN3UYc_WGA",
  "version" : {
    "number" : "5.6.3",
    "build_hash" : "1a2f265",
    "build_date" : "2017-10-06T20:33:39.012Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

节点启动正常!

查看节点健康度:

$ curl 'localhost:9200/_cat/health?v=pretty' 
epoch      timestamp cluster         status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1515988034 03:47:14  boss-es-cluster green           2         2      0   0    0    0        0             0                  -                100.0%

从结果可以看到,集群健康为绿色,有两个数据节点在集群中。

查看集群状况

$ curl 'localhost:9200/_cat/nodes?v=pretty' 
ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.16.73.49           21          50   7    0.47    0.52     0.66 di        -      node-49
172.16.73.50           26         100   1    0.09    0.11     0.22 mdi       *      node-50

可以看见 ,基本的节点情况已经很清楚的看到集群的情况了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容