graylog數(shù)據(jù)備份

前言


Graylog中使用MongoDB存儲(chǔ)配置數(shù)據(jù),例如:用戶信息、stream信息配置數(shù)據(jù)等,沒(méi)有任何的日志數(shù)據(jù)是存儲(chǔ)在MongoDB中的。我們比較關(guān)心的日志數(shù)據(jù)是存儲(chǔ)在elasticsearch中,因此要做數(shù)據(jù)備份重要的是備份elasticsearch中的索引。

Elasticsearch數(shù)據(jù)的備份,可以使用snapshot API。這個(gè)會(huì)拿到集群當(dāng)前的狀態(tài)和數(shù)據(jù)然后保存在一個(gè)共享倉(cāng)庫(kù)里面,并且是增量備份。備份的第一個(gè)快照會(huì)拷貝一份完整的數(shù)據(jù),而后續(xù)的快照則是保留已存快照和新數(shù)據(jù)之間的差異數(shù)據(jù)。隨著你不時(shí)的對(duì)數(shù)據(jù)進(jìn)行快照,備份也在增量的添加和刪除。這意味著后續(xù)備份會(huì)相當(dāng)快速,因?yàn)樗鼈冎粋鬏敽苄〉臄?shù)據(jù)量。
要使用這個(gè)功能,你必須首先創(chuàng)建一個(gè)保存數(shù)據(jù)的倉(cāng)庫(kù)。有多個(gè)倉(cāng)庫(kù)類型可以供你選擇:
1)共享文件系統(tǒng),比如 NAS
2)Amazon S3
3)HDFS (Hadoop 分布式文件系統(tǒng))
4)Azure Cloud
本文以下介紹的為創(chuàng)建共享的目錄,作為備份數(shù)據(jù)的倉(cāng)庫(kù),在創(chuàng)建的倉(cāng)庫(kù)中創(chuàng)建快照以備份數(shù)據(jù)。

信息匯總:
使用快照備份數(shù)據(jù)之前需要?jiǎng)?chuàng)建共享文件系統(tǒng)的倉(cāng)庫(kù),本次使用sshfs在ES集群中每個(gè)節(jié)點(diǎn)的相同位置掛載一個(gè)共享目錄,下面列出集群環(huán)境中各個(gè)節(jié)點(diǎn)中用于數(shù)據(jù)備份的目錄及其作用。

IP 目錄 備注
192.168.2.121 /backup
/esData/backup
共享倉(cāng)庫(kù)目錄
倉(cāng)庫(kù)目錄
192.168.2.122 /esData/backup 倉(cāng)庫(kù)目錄
192.168.2.123 /esData/backup 倉(cāng)庫(kù)目錄

如上述表格所示,本次搭建3節(jié)點(diǎn)的elasticsearch集群。
各個(gè)節(jié)點(diǎn)的/esData/backup目錄掛載到192.168.2.121的目錄/backup,
最終所有節(jié)點(diǎn)的備份數(shù)據(jù)都將存儲(chǔ)在192.168.2.121中的/backup目錄中。后續(xù)如果需要做數(shù)據(jù)遷移,遷移192.168.2.121的目錄/backup中的數(shù)據(jù)即可。

前期準(zhǔn)備


創(chuàng)建并掛載共享目錄

這里的共享目錄是指集群中的每個(gè)節(jié)點(diǎn)都能感知并將數(shù)據(jù)寫(xiě)入到該倉(cāng)庫(kù)的文件。

安裝sshfs

執(zhí)行如下命令安裝sshfs:

$ sudo yum install sshfs

至此,sshfs安裝完成。

選定共享目錄

  1. 選擇在集群中一個(gè)節(jié)點(diǎn)上創(chuàng)建目錄作為共享目錄,本次選擇192.168.2.121節(jié)點(diǎn):
    $ sudo mkdir /backup
    
  2. 更改所屬用戶:
    $ sudo chown -R monitorManager:monitorManager /backup
    
  3. 更改權(quán)限:
    $ sudo chmod -R 777 /backup
    

創(chuàng)建倉(cāng)庫(kù)目錄

  1. 在每個(gè)節(jié)點(diǎn)的相同位置創(chuàng)建目錄:
    $ sudo mkdir /esData
    $ sudo mkdir /esData/backup
    
  2. 更改所屬用戶:
    $ sudo chown -R monitorManager:monitorManager /esData
    
  3. 更改權(quán)限:
    $ sudo chmod -R 777 /esData
    

測(cè)試elasticsearch用戶是否對(duì)創(chuàng)建的目錄有寫(xiě)入權(quán)限

命令如下:

$ sudo -u elasticsearch touch /backup/test
$ sudo -u elasticsearch touch /esData/backup/test

每個(gè)節(jié)點(diǎn)掛載共享目錄

  1. /etc/fuse.conf中的user_allow_other注釋去掉,否則下面的步驟2會(huì)有問(wèn)題。
  2. 在每個(gè)節(jié)點(diǎn)中執(zhí)行如下命令,將剛剛創(chuàng)建的目錄掛載到共享目錄上:
    $ sshfs monitorManager@172.30.5.132:/backup /esData/backup -o allow_other
    

說(shuō)明:其中參數(shù)-o allow_other 是為了解決不同節(jié)點(diǎn)往共享倉(cāng)庫(kù)中寫(xiě)數(shù)據(jù)的權(quán)限問(wèn)題。

更改elasticsearch配置

更改elasticsearch配置文件

更改/etc/elasticsearch/elasticsearch.yml文件,在文件末尾添加path.repo配置倉(cāng)庫(kù)目錄位置:

$ sudo vim /etc/elasticsearch/elasticsearch.yml

添加如下內(nèi)容:

path.repo: /esData/backup

保存文件并退出編輯。

重啟elasticsearch

重啟elasticsearch節(jié)點(diǎn):

$ sudo systemctl restart elasticsearch.service

開(kāi)始你的備份


創(chuàng)建倉(cāng)庫(kù)

執(zhí)行如下命令,創(chuàng)建一個(gè)倉(cāng)庫(kù):

$ curl -XPUT 'http://192.168.2.121:9200/_snapshot/backup_1' -d '{
"type":"fs",
"settings":{
"location":"/esData/backup",
"compress":true
}
}'

說(shuō)明:

  • 給我們的倉(cāng)庫(kù)取一個(gè)名字,在本例它叫backup_1。
  • 我們指定倉(cāng)庫(kù)的類型應(yīng)該是一個(gè)共享文件系統(tǒng)。
  • 最后,我們提供一個(gè)已掛載的設(shè)備作為目的地址,本例中位置為:/esData/backup。
  • "compress":true代表壓縮備份。
    這步會(huì)在掛載點(diǎn)創(chuàng)建倉(cāng)庫(kù)和所需的元數(shù)據(jù)。
    還有一些其他的配置你可能想要配置的,這些取決于你的節(jié)點(diǎn)、網(wǎng)絡(luò)的性能狀況和倉(cāng)庫(kù)位置:
  • max_snapshot_bytes_per_sec:當(dāng)快照數(shù)據(jù)進(jìn)入倉(cāng)庫(kù)時(shí),這個(gè)參數(shù)控制這個(gè)過(guò)程的限流情況。默認(rèn)是每秒20mb。
  • max_restore_bytes_per_sec:當(dāng)從倉(cāng)庫(kù)恢復(fù)數(shù)據(jù)時(shí),這個(gè)參數(shù)控制什么時(shí)候恢復(fù)過(guò)程會(huì)被限流以保障你的網(wǎng)絡(luò)不會(huì)被占滿。默認(rèn)是每秒20mb。
    假設(shè)我們有一個(gè)非??斓木W(wǎng)絡(luò),而且對(duì)額外的流量也很 OK,那我們可以增加這些默認(rèn)值:
$ curl -XPOST 'http://192.168.2.121:9200/_snapshot/backup_1' -d '{
"type":"fs",
"settings":{
"location":"/esData/backup",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb"
"compress":true
}
}'

注意:注意我們用的是 POST而不是PUT,POST會(huì)更新已有倉(cāng)庫(kù)的設(shè)置。
查看倉(cāng)庫(kù)指定倉(cāng)庫(kù):

$ curl -XGET 'http://192.168.2.121:9200/_snapshot/my_backup?pretty'

查看所有倉(cāng)庫(kù):

$ curl -XGET 'http://192.168.2.121:9200/_snapshot?pretty'

或者

$ curl -XGET 'http://192.168.2.121:9200/_snapshot/_all?pretty'

說(shuō)明:pretty參數(shù)會(huì)讓返回?cái)?shù)據(jù)可讀性提高,顯示縮進(jìn),以json的格式返回到控制臺(tái)。

快照索引

一個(gè)倉(cāng)庫(kù)可以包含同一個(gè)集群的多個(gè)快照??煺崭鶕?jù)集群中的唯一名字進(jìn)行區(qū)分。
快照所有打開(kāi)的索引:

$ curl -XPUT 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_1?pretty&wait_for_completion=true'

這個(gè)會(huì)備份所有打開(kāi)的索引到backup_1倉(cāng)庫(kù)下一個(gè)命名為 snapshot_1 的快照里。wait_for_completion參數(shù)指定創(chuàng)建snapshot的請(qǐng)求是否等待快照創(chuàng)建完成再返回。
快照指定索引:

$ curl -XPUT 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_2018_03_23' -d '{"indices":"test_28"}?pretty&wait_for_completion=true'

上面的命令快照了索引名為test_28的索引,可以指定多個(gè)索引名稱,如:"indices":"test_28,test_27,test_26"
監(jiān)控快照進(jìn)度:

$ curl -XGET 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_2018_03_23/_status?pretty'

wait_for_completion=true只是顯示基礎(chǔ)信息,對(duì)于大型的集群備份時(shí)這個(gè)指標(biāo)是不夠用的,上面的_status可以顯示全面的信息,一個(gè)正在運(yùn)行的快照會(huì)顯示 IN_PROGRESS作為狀態(tài)。
INITIALIZING
分片在檢查集群狀態(tài)看看自己是否可以被快照。這個(gè)一般是非??斓?。
STARTED
數(shù)據(jù)正在被傳輸?shù)絺}(cāng)庫(kù)。
FINALIZING
數(shù)據(jù)傳輸完成;分片現(xiàn)在在發(fā)送快照元數(shù)據(jù)。
DONE
快照完成!
FAILED
快照處理的時(shí)候碰到了錯(cuò)誤,這個(gè)分片/索引/快照不可能完成了。檢查你的日志獲取更多信息。
查看指定快照:
例如,你想要查看backup_1倉(cāng)庫(kù)中名為snapshot_2018_03_23的快照,你就可以使用下面的命令。

$ curl -XGET 'http://172.30.5.133:9200/_snapshot/backup_1/snapshot_2018_03_23?pretty'

查看所有快照:
查看backup_1倉(cāng)庫(kù)中的所有快照。

$ curl -XGET 'http://192.168.2.121:9200/_snapshot/backup_1/_all?pretty'

刪除快照:
刪除backup_1倉(cāng)庫(kù)中的snapshot_1的快照。

$ curl -XDELETE 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_1'

取消一個(gè)快照:
要取消一個(gè)快照,在他進(jìn)行中的時(shí)候簡(jiǎn)單的刪除快照就可以:

$ curl -XDELETE 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_1'

這個(gè)會(huì)中斷快照進(jìn)程,然后刪除倉(cāng)庫(kù)里進(jìn)行到一半的快照。

從快照恢復(fù)

一旦你備份過(guò)了數(shù)據(jù),恢復(fù)它就簡(jiǎn)單了:只要在你希望恢復(fù)回集群的快照ID后面加上_restore即可。
快照恢復(fù):

$ curl -XPOST 'http://192.168.2.121:9200/_snapshot/backup_1/snapshot_1/_restore?pretty&wait_for_completion=true'

默認(rèn)情況下,把這個(gè)快照里存有的所有索引都恢復(fù)。如果 snapshot_1包括五個(gè)索引,這五個(gè)都會(huì)被恢復(fù)到我們集群里。
此外,你可以指定索引名稱恢復(fù)指定的索引,同樣可以使用 include_global_state 選項(xiàng)來(lái)防止恢復(fù)集群的狀態(tài)。 indices 支持配置多個(gè)索引multi index syntax.rename_patternrename_replacement 選項(xiàng)可以在恢復(fù)的時(shí)候使用正則表達(dá)式來(lái)重命名index。例如:

$ curl -XPOST "192.168.2.121:9200/_snapshot/backup_1/snapshot_1/_restore" -d '{
    "indices": "index_1,index_2",
    "ignore_unavailable": "true",
    "include_global_state": false,
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_index_$1"
}'

說(shuō)明:

  • 只恢復(fù)index_1、index_2索引,忽略快照中存在的其余索引。
  • rename_pattern查找所提供的模式能匹配上的正在恢復(fù)的索引。
  • rename_replacement 然后把它們重命名成替代的模式。

上述命令會(huì)恢復(fù)index_1、index_2 到你及群里,但是重命名成了restored_index_1、restored_index_2
取消快照恢復(fù):
要取消一個(gè)恢復(fù),你需要?jiǎng)h除正在恢復(fù)的索引。 因?yàn)榛謴?fù)進(jìn)程其實(shí)就是分片恢復(fù),發(fā)送一個(gè) 刪除索引 API 修改集群狀態(tài),就可以停止恢復(fù)進(jìn)程。比如:

$ curl XDELETE 'http://192.168.2.121:9200/restored_index_3'

如果restored_index_3 正在恢復(fù)中,這個(gè)刪除命令會(huì)停止恢復(fù),同時(shí)刪除所有已經(jīng)恢復(fù)到集群里的數(shù)據(jù)。

數(shù)據(jù)遷移


數(shù)據(jù)備份之后在共享目錄/backup中是這樣的:

  1. 在遷移目標(biāo)的集群上重復(fù)上面創(chuàng)建倉(cāng)庫(kù)的步驟。
  2. 將源集群的備份內(nèi)容(/backup里的所有文件),復(fù)制到遷移目標(biāo)的集群倉(cāng)庫(kù)目錄里。
  3. 在遷移目標(biāo)集群上,使用RESTful API進(jìn)行備份的恢復(fù),如果索引已經(jīng)存在目標(biāo)的集群,需要先關(guān)閉索引,恢復(fù)數(shù)據(jù)后在開(kāi)啟。
    $ curl XPOST 'http://ip:port/index_name/_close'
    $ curl XPOST 'http://ip:port/_snapshot/backup_1/snapshot_name/_restore'
    $ curl XPOST 'http://ip:port/index_name/open'
    
  4. 查看恢復(fù)狀態(tài)
    $ curl XGET 'http://ip:port/_snapshot/backup_1/snapshot_name/_status?pretty'
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,383評(píng)論 0 5
  • 翻譯自官網(wǎng), 水平有限,用于自查。轉(zhuǎn)載請(qǐng)注明網(wǎng)址: http://www.itdecent.cn/p/f53ce0...
    朱柏霖閱讀 1,355評(píng)論 0 1
  • 1基本安裝1.1在基于RHEL的系統(tǒng)中安裝Cassandra1.1.1必要條件? YUM包管理器? Root或...
    戰(zhàn)神湯姆閱讀 1,121評(píng)論 0 4
  • 我喜歡和自己對(duì)話,在交談中找到兩個(gè)我的區(qū)別,找到善與惡的紅線,好與壞的距離;也或者找到對(duì)話中自己的共通點(diǎn),握手點(diǎn)頭...
    王小草兒閱讀 1,224評(píng)論 7 6

友情鏈接更多精彩內(nèi)容