目录
背景介绍
因为业务调整,我司有一批服务器需要从A机房退役迁移至B机房。但是因为涉及业务量太大,为了降低对业务的影响,本次迁移通过先扩容,再缩容的方式完成迁移。本次es集群迁移以elasticsearch集群介绍为例,所有迁移流程均有实践操作。
1 A机房elasticsearch集群基本情况
A机房elasticsearch集群一共10个节点,其中7个节点为data角色,其余3个节点为master/data角色合装,discovery.zen.ping.unicast.hosts配置为三个master节点:10.0.0.1,10.0.0.2,10.0.0.3
network.host | node.name | node.data | node.master |
---|---|---|---|
10.0.0.1 | node1 | true | true |
10.0.0.2 | node2 | true | true |
10.0.0.3 | node3 | true | true |
10.0.0.4 | node4 | true | flase |
10.0.0.5 | node5 | true | flase |
10.0.0.6 | node6 | true | flase |
10.0.0.7 | node7 | true | flase |
10.0.0.8 | node8 | true | flase |
10.0.0.9 | node9 | true | flase |
10.0.0.10 | node10 | true | flase |
2 在B机房完成elasticsearch集群扩容
2.1 扩容规划
B机房elasticsearch集群规划一共10个节点,其中7个节点为data角色,余下3个节点规划为单独master角色,discovery.zen.ping.unicast.hosts配置为六个master节点:10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3
注:B机房将master和data角色分离,是为了减轻合装给master带来的压力,导致集群出现不稳定性。
network.host | node.name | node.data | node.master | 是否启动 |
---|---|---|---|---|
20.1.1.1 | node11 | flase | true | 否 |
20.1.1.2 | node12 | flase | true | 否 |
20.1.1.3 | node13 | flase | true | 否 |
20.1.1.4 | node14 | true | flase | 是 |
20.1.1.5 | node15 | true | flase | 是 |
20.1.1.6 | node16 | true | flase | 是 |
20.1.1.7 | node17 | true | flase | 是 |
20.1.1.8 | node18 | true | flase | 是 |
20.1.1.9 | node19 | true | flase | 是 |
20.1.1.10 | node20 | true | flase | 是 |
2.2 启动非master节点
只启动data节点,用于数据的迁移。master节点服务暂时不启动。
ssh 20.1.1.4 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.5 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.6 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.7 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.8 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.9 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"' ssh 20.1.1.10 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
2.3 通知业务修改集群连接地址
因为A机房机器下线后,只剩下B机房机器可以连通,所以连接地址需要修改为B机房node.data节点。不连接master节点原因,只是为了减轻master节点负担。
20.1.1.4:9200,20.1.1.5:9200,20.1.1.6:9200,20.1.1.7:9200,20.1.1.8:9200,20.1.1.9:9200,20.1.1.10:9200
3 将索引数据排空迁移至B机房
注:跨机房数据迁移,需要提前考虑机房间带宽情况。防止集群带宽速率过高,影响到其他业务传输。
1、先检查集群是否已经有节点数据被排空 curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty" #curl命令可以在kibana替换为如下命令: get /_cluster/settings?pretty 2、如果1查询结果有排空数据的节点,接下来操作需要做追加。无则忽略。 curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent":{"cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"},"transient":{"cluster.routing.allocation.exclude._ip":"10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10"}}' #curl命令可以在kibana替换为如下命令: PUT /_cluster/settings //排空数据节点,填 的老节点的ip { "persistent" :{ "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10" }, "transient" :{ "cluster.routing.allocation.exclude._ip" : "10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,10.0.0.5,10.0.0.6,10.0.0.7,10.0.0.8,10.0.0.9,10.0.0.10" } } 3、检查数据排空进度 curl -XGET "http://集群任意IP:9200/_cat/shards?v&pretty&s=state:desc" #curl命令可以在kibana替换为如下命令: get /_cat/shards?v&pretty&s=state:desc 4、调整如下参数,可以加快跨机房数据迁移速度。 #每秒传输速度,默认40Mb PUT /_cluster/settings { "persistent" :{ "indices.recovery.max_bytes_per_sec" : "200mb" }, "transient" :{ "indices.recovery.max_bytes_per_sec" : "200mb" } } #恢复线程数,默认是2 PUT /_cluster/settings { "persistent": { "cluster.routing.allocation.node_concurrent_recoveries": "5" }, "transient": { "cluster.routing.allocation.node_concurrent_recoveries": "5" } } #当前节点在进行主分片恢复时的数量,默认是4 PUT /_cluster/settings { "persistent": { "cluster.routing.allocation.node_initial_primaries_recoveries": "5" }, "transient": { "cluster.routing.allocation.node_initial_primaries_recoveries": "5" } }
4 下线A机房data节点
数据排空后,下线A机房只含data角色的节点。含有master角色的节点需要放在切割阶段下线。
ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9
5 master节点切割
5.1 关闭集群自动均衡
1、关闭集群自动均衡。用于启时候,禁自动均衡 curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{ "persistent" :{ "cluster.routing.rebalance.enable": "none" }, "transient" :{ "cluster.routing.rebalance.enable": "none" } }' #curl命令可以在kibana替换为如下命令: PUT /_cluster/settings { "persistent": { "cluster.routing.rebalance.enable": "none" }, "transient": { "cluster.routing.rebalance.enable": "none" } } 2、检查群自动均衡是否关闭 curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty" #curl命令可以在kibana替换为如下命令: get/_cluster/settings?pretty
5.2 从节点pending master切割
排除掉required master节点,就是pending master。确认主节点required master方法如下
curl http://集群任意IP:9200/_cat/master?v #curl命令可以在kibana替换为如下命令: get /_cat/master?v
假如:10.0.0.3为required master节点:
第一步:停10.0.0.1,起20.1.1.1
ssh 10.0.0.1 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9' ssh 20.1.1.1 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
第二步:停10.0.0.2,起20.1.1.2
ssh 10.0.0.2 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9' ssh 20.1.1.2 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
5.3 主节点required master切割
ssh 10.0.0.3 -C 'ps -ef|grep org.elasticsearch.bootstrap.Elasticsearch|grep -v grep|awk '{print $2}'|xargs kill -9' ssh 20.1.1.3 -C 'su - es -c "cd /home/es/software/elasticsearch/bin;sh elasticsearch -d"'
检查master是否已经全部迁移至B机房,A机房master是否已经全部下线
curl http://集群任意IP:9200/_cat/nodes?v #curl命令可以在kibana替换为如下命令: get /_cat/nodes?v
6 恢复集群配置
1、打开集群自动均衡 curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"persistent" :{"cluster.routing.rebalance.enable": "all"}}' curl -XPUT "http://集群任意IP:9200/_cluster/settings?pretty" -H 'Content-Type:application/json' -d '{"transient" :{"cluster.routing.rebalance.enable": "all"}}' #curl命令可以在kibana替换为如下命令: PUT /_cluster/settings { "persistent": { "cluster.routing.rebalance.enable": "ALL" }, "transient": { "cluster.routing.rebalance.enable": "ALL" } } 2、检查集群自动均衡是否打开 curl -XGET "http://集群任意IP:9200/_cluster/settings?pretty" #curl命令可以在kibana替换为如下命令: get /_cluster/settings?pretty
7 修改B机房节点配置,不需要重启
注:此处只需要elasticsearch.yml配置文件,删除A机房相关的节点信息就可以。
修改elasticsearch.yml配置文件中discovery.zen.ping.unicast.hosts配置项,将 10.0.0.1,10.0.0.2,10.0.0.3,20.1.1.1,20.1.1.2,20.1.1.3 修改为: 20.1.1.1,20.1.1.2,20.1.1.3
我的微信公众号同步发表了这一篇文章,欢迎各位小伙伴阅读加关注。