雖然ES提供了replicas shards的機制來保證數(shù)據(jù)的完整性不會因為幾個節(jié)點的奔潰而被破壞,但是定期的數(shù)據(jù)備份以備不時之需依然重要。此外,通過備份與恢復(fù)也可實現(xiàn)數(shù)據(jù)在不同集群間的遷移(直接復(fù)制data目錄下的索引文件的做法我嘗試過,但沒有成功)。
備份的方式在官方文檔里有清楚的交代:先創(chuàng)建倉庫(repository),再往倉庫里添加一個快照(snapshot),查看備份狀態(tài),搞定。雖然官方文檔很輕描淡寫,但我在第一步就卡住了,創(chuàng)建倉庫時需要一個共享文件系統(tǒng)(每個ES節(jié)點都需要能訪問),我只是想把數(shù)據(jù)從線上集群遷移到線下進行更全面的測試,為了這么點事去找系統(tǒng)部走流程等待共享服務(wù)器是多么頭疼啊……
一陣Google之后,決定使用sshfs在ES集群中每個節(jié)點的相同位置掛載一個共享目錄,以下是操作命令:
1 2 3 4 5 6 7 8 9 10 11 12 | // 在每個節(jié)點上安裝sshfs yum install fuse sshfs // 選定一個節(jié)點的一個目錄作為共享目錄(不要放在系統(tǒng)盤所在目錄) mkdir /data0/es_backup // 在每個節(jié)點的相同位置創(chuàng)建目錄,并掛載共享目錄 mkdir /mnt/backup sshfs root@192.168.x.x: /data0/es_backup /mnt/backup -o allow_other // 測試運行ES的用戶是否有對共享目錄的寫權(quán)限 sudo -u elasticsearch touch /mnt/backup/test |
這里最大的坑是寫權(quán)限問題,我試過在創(chuàng)建/mnt/backup時把owner改成elasticsearch或者在掛載的時候用-o uid= gid= 這樣參數(shù)更改目錄的owner,然并卵……折騰了一下午。最后總算在stack overflow找到了這個參數(shù)-o allow_other,但其實這樣做比較粗魯,機器上的任何用戶都可以訪問這個目錄了,有更優(yōu)雅實現(xiàn)方式的同學(xué)請賜教。
解決了共享目錄的問題之后,就可以像官方文檔一樣輕描淡寫啦:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 在_plugin /marvel/sense 里 // 創(chuàng)建倉庫 PUT _snapshot /my_backup { "type" : "fs" , "settings" : { "location" : "/mnt/backup" , "compress" : true } } // 針對具體的index創(chuàng)建快照備份 PUT _snapshot /my_backup/snapshot_test { "indices" : "index_1, index_2" } // 查看備份狀態(tài) GET _snapshot /my_backup/snapshot_test/_status |
現(xiàn)在可以開始進行遷移了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 備份創(chuàng)建好之后,在共享目錄 /data0/es_backup 里是這樣的: -rw-r--r-- 1 root root 31 12月 15 22:14 index drwxr-xr-x 3 root root 4096 12月 15 22:14 indices -rw-r--r-- 1 root root 83 12月 15 22:14 metadata-snapshot_test -rw-r--r-- 1 root root 181 12月 15 22:14 snapshot-snapshot_test // 在遷移目標(biāo)的集群上重復(fù)上面創(chuàng)建倉庫的操作 // 將源集群的備份內(nèi)容( /data0/es_backup 里的所有文件),復(fù)制到遷移目標(biāo)的集群倉庫目錄里 // 在sense中使用RESTful API進行備份的恢復(fù) POST _snapshot /my_backup/snapshot_test/_restore // 查看恢復(fù)的狀態(tài) GET _snapshot /my_backup/snapshot_test/_status |
以上就是參照官方文檔實施的ES數(shù)據(jù)備份與遷移,希望對大家有幫助,歡迎留言與交流。