|
这篇文章给大家分享的是有关ES通过快照方式进行数据迁移的内容。小编觉得挺实用的,因此分享给大家学习。如下资料是关于数据迁移的步骤。
1、对机房的es节点安装oss插件
阿里云提供了es的oss插件,地址elasticsearch-repository-oss 需要注意的是,安装这个插件需要滚动重启es集群的。
安装oss插件的这个前置操作我这里就跳过了,没啥好说的。参考官方文档提出的滚动重启操作步骤进行就行。
2、开通阿里云oss的bucket,并记录下accesskey相关授权信息
3、我们快照数据通过内网直接打到阿里云oss的专用的bucket里面(TIPS:拉了专线,走内网,需要加个路由才能用oss的内网域名地址)
下面是我执行快照和恢复的全流程:
step1_idc_reg_oss.sh ?注册idc的es快照仓库地址到阿里云oss
#!/bin/bash#传参1为es集群的lb地址(用后端真实节点地址也行)echo"作用:"echo"注册快照地址到阿里云到oss仓库"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"ES集群名称:"$CLUSTER_NAMEecho#注册快照仓库,走专线oss内网地址curl-s-XPUThttp://$1:9200/_snapshot/$CLUSTER_NAME-d"{\"type\":\"oss\",\"settings\":{\"base_path\":\"$CLUSTER_NAME\",\"endpoint\":\"http://oss-cn-hangzhou-internal.aliyuncs.com\",\"access_key_id\":\"thisismyaccesskeyid\",\"secret_access_key\":\"thisismykey\",\"bucket\":\"snapshot-es\",\"compress\":true}}"#确认仓库是否okcurl-s-XGEThttp://$1:9200/_snapshot/$CLUSTER_NAME|jq.
step2_first_snapshot.sh 对idc的es打一个全量快照到阿里云oss
#!/bin/bash#传参1为es集群的lb地址(用后端真实节点地址也行)echo"作用:"echo"后台打快照存到阿里云oss仓库"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"ES集群名称:"$CLUSTER_NAMEecho#在后台打快照echo"开始在后台打快照"curl-s-XPUThttp://$1:9200/_snapshot/$CLUSTER_NAME/$(date+%Y_%m_%d_%H_%M)|jq.echoecho"查看快照的进度方法:curl-XGEThttp://$1:9200/_snapshot/$CLUSTER_NAME/_all?pretty"echo
注意:step2 这个脚本第一次跑通后,我们可以在上云前1-2天加个cronjob每小时跑一次,这样在最后上云迁移的时候,增量快照需要的时间就会很短暂。大幅度减少不可用时间。
step3_aliyun_reg_oss.sh 注册阿里云的es快照仓库地址到阿里云oss
#!/bin/bash#传参1为机房es集群的LB地址#传参2为阿里云es集群的域名echo"作用:"echo"注册阿里云es到阿里云的oss仓库"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"ES集群名称:"$CLUSTER_NAMEecho#阿里云关联oss仓库curl-s-XPUThttp://$2:9200/_snapshot/$CLUSTER_NAME-d"{\"type\":\"oss\",\"settings\":{\"base_path\":\"$CLUSTER_NAME\",\"endpoint\":\"http://oss-cn-hangzhou-internal.aliyuncs.com\",\"access_key_id\":\"thisismyaccesskeyid\",\"secret_access_key\":\"thisismykey\",\"bucket\":\"snapshot-es\",\"compress\":true}}"#确认快照仓库是否okcurl-s-XGEThttp://$2:9200/_snapshot/$CLUSTER_NAME?pretty|jq.echo"curl-s-XGEThttp://$2:9200/_snapshot/$CLUSTER_NAME?pretty|jq."
step4 开始,需要在割接当晚操作
step4_stop_write_idc_index.sh 关闭idc 的es索引的写权限,保留只读权限
#!/bin/bash#传参1为es集群的lb地址(用后端真实节点地址也行)echo"作用:"echo"关闭机房es的索引的写权限,以便后续进行最后一次的快照操作"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo$CLUSTER_NAME#关闭全部索引的写权限,保留读权限echo"开始关闭全部索引的写权限,保留读权限..."curl-s-XPUThttp://$1:9200/_all/_settings-d'{"index":{"blocks":{"write":"true"}}}'#官方文档https://www.elastic.co/guide/en/elasticsearch/reference/2.3/index-modules.html#index.blocks.read_only#Settotruetomaketheindexandindexmetadatareadonly,falsetoallowwritesandmetadatachanges.(设置为true可以禁止对索引和索引的metadata进行修改,控制的更严格些)#index.blocks.write#Settotruetodisablewriteoperationsagainsttheindex.(设置为true来禁止对索引的写操作。但索引的metadata可以正常写。)#注意:index.blocks.read_only和index.blocks.write这2个参数,不能同时使用,只能选其一
step5_increase_snapshot.sh 再人工执行一次快照脚本(这时候打的是增量快照,耗时不会太久)
#!/bin/bash#传参1为es集群的lb地址(用后端真实节点地址也行)echo"作用:"echo"关闭机房es写权限后,后台再打一次快照存到阿里云oss仓库"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"ES集群名称:"$CLUSTER_NAMEecho#在后台打快照echo"开始在后台打快照"echo"查看快照的进度方法:curl-XGEThttp://$1:9200/_snapshot/$CLUSTER_NAME/_all?pretty"curl-s-XPUThttp://$1:9200/_snapshot/$CLUSTER_NAME/$(date+%Y_%m_%d_%H_%M)|jq.
注意:确保step5的快照进度完成后,才能执行下面的step6操作!!
step6_restore_into_aliyun.sh ?将oss上面的最新快照恢复到阿里云ES环境
#!/bin/bash#从阿里云oss恢复数据到阿里云es#参数1为idc的es的lb地址(不用带端口号)#参数2为阿里云es的域名(不用带端口号)echo"作用:"echo"从oss仓库恢复数据到阿里云es"echo#找出集群的名称CLUSTER_NAME=$(curl-shttp://$1:9200/|grepcluster_name|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"ES集群名称:"$CLUSTER_NAMEecho#找到最新的快照名称:SNAPSHOT_NAME=$(curl-s-XGEThttp://$2:9200/_snapshot/$CLUSTER_NAME/_all?pretty|egrepsnapshot|tail-1|awk-F':''{print$2}'|awk-F'"''{print$2}')echo"最后一个snapshot的名称:"${SNAPSHOT_NAME}#调整阿里云ES参数加快恢复速度echo"调整阿里云ES参数加快恢复速度"curl-s-XPUThttp://$2:9200/_cluster/settings?flat_settings=true-d'{"transient":{"indices.recovery.concurrent_streams":"10","indices.recovery.concurrent_small_file_streams":"10","indices.recovery.max_bytes_per_sec":"100mb","cluster.routing.allocation.node_concurrent_recoveries":"24"}}'|jq.#执行阿里云ES数据恢复操作echo"开始阿里云ES数据恢复"curl-s-XPOSThttp://$2:9200/_snapshot/$CLUSTER_NAME/$SNAPSHOT_NAME/_restore-d'{"index_settings":{"index.number_of_replicas":0}}'echoechoecho"查看恢复的进度curl-s-XGEThttp://$2:9200/_recovery/|jq."
等阿里云ES集群变绿后(通过_cat api 或者 cerebro观察),开始执行step7操作
step7_aliyun_open_index_increase_replica.sh 打开阿里云es的写功能,并调整index副本为1
#!/bin/bash#调整阿里云es增加副本数#参数1为阿里云es的域名(不用带端口号)echo"作用:"echo"阿里云es打开写,并调整副本改为1"echoecho"打开阿里云ES的写权限"curl-s-XPUThttp://$1:9200/_all/_settings-d'{"index":{"blocks":{"write":"false"}}}'sleep1echo"调整全部index的副本为1"curl-s-XPUThttp://$1:9200/_all/_settings-d'{"number_of_replicas":1}'
至此,我们就可以通知开发测试发版后跟进测试了。
可选步骤
step8_close_idc_index.sh ?建议在完成迁移后,关闭老的es的索引,这样如果有连接连到老es,就会报错便于及时发现问题
#!/bin/bash#传参1为es集群的lb地址(用后端真实节点地址也行)echo"作用:"echo"关闭机房es的索引"echo#列出打开状态的索引idx=$(curl-s-XGEThttp://$1:9200/_cat/indices?h=index,status|grep-vclose)indices=$(echo$idx|sed's//,/g'|sed's/,open//g')echo"当前打开的索引如下:"echo$indicesechoechoecho"开始执行closeindex操作...."curl-s-XPOSThttp://$1:9200/$indices/_close?pretty|jq.关于ES通过快照方式进行数据迁移就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。 |
|