中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES2.3基于快照的遷移上云實錄

發布時間:2020-08-06 12:51:13 來源:網絡 閱讀:384 作者:我的二狗呢 欄目:系統運維

背景:

1、根據公司上云規劃,需要將目前生產環境的N套ES2.3集群搬遷到阿里云ES環境。但是生產環境的ES因為磁盤空間有限,沒有啟用 _source ,因此無法通過reindex進行數據遷移。這里只能鎖寫然后通過快照方式進行遷移。



前置步驟:

1、對機房的es節點安裝oss插件

????????阿里云提供了es的oss插件,地址?https://github.com/aliyun/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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"ES集群名稱:"?$CLUSTER_NAME
echo

#?注冊快照倉庫?,走專線?oss內網地址
curl?-s?-XPUT??http://$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
}
}"

#?確認倉庫是否ok
curl?-s?-XGET?http://$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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"ES集群名稱:"?$CLUSTER_NAME
echo

#?在后臺打快照
echo?"開始在后臺打快照"
curl?-s?-XPUT?http://$1:9200/_snapshot/$CLUSTER_NAME/$(date?+%Y_%m_%d_%H_%M)?|?jq?.

echo
echo?"查看快照的進度方法:?curl?-XGET?http://$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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"ES集群名稱:"?$CLUSTER_NAME
echo

#?阿里云關聯oss倉庫
curl?-s?-XPUT?http://$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
}
}"

#?確認快照倉庫是否ok
curl?-s?-XGET?http://$2:9200/_snapshot/$CLUSTER_NAME?pretty?|?jq?.
echo?"curl?-s?-XGET?http://$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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?$CLUSTER_NAME

#?關閉全部索引的寫權限,保留讀權限
echo?"開始關閉全部索引的寫權限,保留讀權限..."
curl?-s?-XPUT?http://$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
#?Set?to?true?to?make?the?index?and?index?metadata?read?only,?false?to?allow?writes?and?metadata?changes.(設置為true?可以禁止對索引和索引的metadata進行修改,控制的更嚴格些)
#?index.blocks.write
#Set?to?true?to?disable?write?operations?against?the?index.(設置為?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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"ES集群名稱:"?$CLUSTER_NAME
echo

#?在后臺打快照
echo?"開始在后臺打快照"
echo?"查看快照的進度方法:?curl?-XGET?http://$1:9200/_snapshot/$CLUSTER_NAME/_all?pretty"
curl?-s?-XPUT?http://$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?-s?http://$1:9200/?|?grep?cluster_name?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"ES集群名稱:"?$CLUSTER_NAME
echo

#?找到最新的快照名稱:
SNAPSHOT_NAME=$(curl?-s??-XGET?http://$2:9200/_snapshot/$CLUSTER_NAME/_all?pretty?|?egrep?snapshot?|?tail?-1?|?awk?-F?':'?'{print?$2}'?|?awk?-F?'"'?'{print?$2}')
echo?"最后一個snapshot的名稱:"?${SNAPSHOT_NAME}

#?調整阿里云ES參數?加快恢復速度
echo?"調整阿里云ES參數?加快恢復速度"
curl?-s?-XPUT??http://$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?-XPOST?http://$2:9200/_snapshot/$CLUSTER_NAME/$SNAPSHOT_NAME/_restore?-d?'{
??"index_settings":?{
?????"index.number_of_replicas":?0
??}
}'

echo
echo
echo?"查看恢復的進度?curl?-s?-X?GET?http://$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"
echo
echo?"打開阿里云ES的寫權限"
curl?-s?-XPUT?http://$1:9200/_all/_settings?-d?'{
??"index":?{
????"blocks":?{
??????"write":?"false"
????}
??}
}'
sleep?1?
echo?"調整全部index的副本為1"
curl?-s?-XPUT?http://$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?-XGET?http://$1:9200/_cat/indices?h=index,status|?grep?-v?close)
indices=$(echo?$idx|?sed?'s/?/,/g'|?sed?'s/,open//g')
echo?"當前打開的索引如下:"?
echo?$indices
echo
echo

echo?"開始執行close?index?操作?...."
curl?-s?-XPOST?http://$1:9200/$indices/_close?pretty?|?jq?.






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锦州市| 高碑店市| 新余市| 永年县| 玉屏| 东乡族自治县| 沂水县| 望城县| 乐东| 辽阳市| 马尔康县| 常州市| 巴中市| 房产| 嘉荫县| 印江| 东台市| 阳新县| 峨边| 定西市| 山西省| 苗栗县| 中卫市| 青河县| 昌宁县| 东乡族自治县| 靖宇县| 平湖市| 无极县| 永靖县| 乐至县| 巢湖市| 屏边| 合肥市| 文化| 遂宁市| 大石桥市| 邻水| 交口县| 从化市| 华池县|