elasticsearch重庆上海移动切换方案

之前的重庆3台服务器安装了3个节点的es  其中1个master节点  另外2个是node节点

 

由于重庆机房可能停电,现在准备在上海的服务器也安装1个master和2个node节点,平时重庆没停电的时候,上海的3个节点都把  node.data: false   这样就不会有分片分配到上海,不会影响查询速度(重庆到重庆服务器网络带宽比重庆到上海大10倍)

 

 

一,先把147,164,165测试环境配置成类似online环境的情况

同一个机器用docker安装多个es导致找不到master报错问题解决过程

因为测试环境之前装的3个节点是15.15.181.147(上海 node节点)   15.99.72.164(重庆master节点)  15.99.72.165(重庆node节点)

我需要模拟成online环境的重庆3个es节点然后其中一个是master  然后上海新增3个es节点其中一个是master

1,我先把147配置成了一个master节点,然后重启147的es,没有问题,并且测试了分别重启164 master或者重启147 master整个集群的master会在147和164之间切换,整个集群的分片也会自动分配,集群状态从yellow变为green 整个过程大概1分钟。

 

2,然后我把15.99.72.164 上又安装了一个普通node节点,但是发现新增的es节点找不到master ,用 docker logs 命令发现很多错误,比如如下这种,我当时各种查资料修改配置们还有其他一下错误就不列出了,

 

 [2019-12-25T03:30:20,034][INFO ][o.e.d.z.ZenDiscovery     ] [node2] failed to send join request to master [{master}{wY2NxAL_SNa77JCWSYBPfA}{12gr64AjRtCiu_I9ieanpw}{15.99.72.164}{15.99.72.164:9300}], reason [RemoteTransportException[[master][172.17.0.2:9300][internal:discovery/zen/join]]; nested: ConnectTransportException[[node2][15.99.72.164:9300] handshake failed. unexpected remote node {master}{wY2NxAL_SNa77JCWSYBPfA}{12gr64AjRtCiu_I9ieanpw}{15.99.72.164}{15.99.72.164:9300}]; ]

 

 3,后来发现问题所在,因为我在164上安装了2个es节点,一个master配置的9200 和 9300端口  另外一个配置普通node为9201和9301,但是我第一次docker run的时候执行的如下:

 

docker run -d --name es5_6_13node2 -p 9201:9200 -p 9301:9300 --privileged=true -v /usr/local/elasticsearch2/conf/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch2/data:/usr/share/elasticsearch/data elasticsearch:5.6.13

 

 后来改为正确的docker run应该是如下  注意  9201:9201 -p 9301:9301

 

docker run -d --name es5_6_13node2 -p 9201:9201 -p 9301:9301 --privileged=true -v /usr/local/elasticsearch2/conf/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch2/data:/usr/share/elasticsearch/data elasticsearch:5.6.13

 

 4,除了上面所述的问题,注意下面每个节点加入的红色配置,也是解决上述问题的关键。

 

147 master的配置

 

#集群名称 所有节点要相同
cluster.name: "nova_es"
#子节点名称
node.name: master_sha
#不作为master节点
node.master: true
node.data: false
http.cors.enabled: true
http.cors.allow-origin: "*"
network.bind_host: 0.0.0.0
network.publish_host: 15.15.181.147
network.host: 15.15.181.147
http.port: 9200
transport.tcp.port: 9300
#设置master地址
discovery.zen.ping.unicast.hosts: [15.99.72.164,15.15.181.147]

 

 

 

164 master的配置

 

#集群名称 所有节点要相同
cluster.name: "nova_es"
#本节点名称
node.name: master
#作为master节点
node.master: true
#是否存储数据
node.data: true
# head插件设置
http.cors.enabled: true
http.cors.allow-origin: "*"
#设置可以访问的ip 这里全部设置通过
network.bind_host: 0.0.0.0
#设置节点 访问的地址 设置master所在机器的ip
network.publish_host: 15.99.72.164
network.host: 15.99.72.164
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: [15.99.72.164,15.15.181.147]

 

164 普通node的配置

 

cluster.name: "nova_es"
#子节点名称
node.name: node2
#不作为master节点
node.master: false
node.data: true
http.cors.enabled: true
http.cors.allow-origin: "*"
network.bind_host: 0.0.0.0
network.host: 15.99.72.164
http.port: 9201
transport.tcp.port: 9301
network.publish_host: 15.99.72.164
#设置master地址
discovery.zen.ping.unicast.hosts: ["15.99.72.164:9300","15.15.181.147:9300"]

 

 

165 普通node的配置

 

#集群名称 所有节点要相同
cluster.name: "nova_es"
#子节点名称
node.name: node1
#不作为master节点
node.master: false
node.data: true
http.cors.enabled: true
http.cors.allow-origin: "*"
network.bind_host: 0.0.0.0
network.publish_host: 15.99.72.165
#设置master地址
discovery.zen.ping.unicast.hosts: [15.99.72.164,15.15.181.147]

 

 

5, 再在147新增2个普通node节点

在147上先装第1个节点    mkdir -p /usr/local/elasticsearch2/conf

 

touch es2.yml

加入如下配置内容,注意红色的配置比较关键,因为是同一个机器多个es节点 

 

cluster.name: "nova_es"
#子节点名称
node.name: node1_sha
#不作为master节点
node.master: false
node.data: false
http.cors.enabled: true
http.cors.allow-origin: "*"
network.bind_host: 0.0.0.0
network.publish_host: 15.15.181.147
network.host: 15.15.181.147
http.port: 9201
transport.tcp.port: 9301
#设置master地址
discovery.zen.ping.unicast.hosts: ["15.99.72.164:9300","15.15.181.147:9300"]

 

然后执行

docker run -d --name es5_6_13node1sha -p 9201:9201 -p 9301:9301 --privileged=true -v /usr/local/elasticsearch2/conf/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch2/data:/usr/share/elasticsearch/data elasticsearch:5.6.13 

 

 

再在147上先装第2个节点    mkdir -p /usr/local/elasticsearch3/conf

 

touch es3.yml

加入如下配置内容,注意红色的配置比较关键,因为是同一个机器多个es节点 

 

cluster.name: "nova_es"
#子节点名称
node.name: node2_sha
#不作为master节点
node.master: false
node.data: false
http.cors.enabled: true
http.cors.allow-origin: "*"
network.bind_host: 0.0.0.0
network.publish_host: 15.15.181.147
network.host: 15.15.181.147
http.port: 9202
transport.tcp.port: 9302
#设置master地址
discovery.zen.ping.unicast.hosts: ["15.99.72.164:9300","15.15.181.147:9300"]

 

然后执行

docker run -d --name es5_6_13node2sha -p 9202:9202 -p 9302:9302 --privileged=true -v /usr/local/elasticsearch3/conf/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch3/data:/usr/share/elasticsearch/data elasticsearch:5.6.13 

 

 

配置完后通过head查看各个节点情况,可以看到我现在是把147上海的1个master和2个普通node都配置的node.data: false   所以sha的3个node都没有分配分片,也就不会影响重庆服务器的查询es性能

 

 

 二,模拟重庆停电的情况,把分片都切换到上海的147节点来。

 

1,先把147的3个node的node.data: true  配置完成,然后分别docker restart 上海的master和2个普通node

 

 

 

 



posted @ 2019-12-24 18:06  kuroniko  阅读(481)  评论(0编辑  收藏  举报