之前的重庆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