Elasticsearch 使用 NFS 進行資料備份

rochy_he發表於2018-07-17

1. Elasticsearch 資料備份

Elasticsearch 可以通過快照命令對索引或者整個叢集進行快照和恢復,第一個快照會是一個資料的完整拷貝,但是所有後續的快照只儲存已存快照和新資料之間的差異。這意味著後續備份會相當快速,因為它們只傳輸很小的資料量。

快照和恢復模組允許建立單個索引或者整個叢集的快照到各種各樣的後臺倉庫,本文主要介紹將快照儲存到共享檔案系統

在共享檔案系統上建立快照需要執行以下步驟:

  1. 建立叢集的共享目錄;
  2. 修改ES配置,新增對共享目錄的設定;
  3. 建立備份倉庫;
  4. 建立快照;
  5. 檢視快照狀態;
  6. 必要時從快照恢復資料。

2. 通過 NFS 設定共享目錄

NFS 檔案共享能解決在叢集環境下圖片、附件等檔案共享的問題,這裡主要用於建立搜尋叢集的快照共享資料夾。

2.1 角色分配

主機名 IP 角色
zk-master01 192.168.1.190 NFS服務端
zk-slaver01 192.168.1.224 NFS客戶端
zk-slaver02 192.168.1.48 NFS客戶端

2.2 配置 NFS 服務端

以下操作只在zk-master01(192.168.1.190)上執行。

2.2.1 檢查安裝 NFS 服務

rpm -qa|grep nfs
rpm -qa|grep rpcbind
複製程式碼

如果元件沒有安裝,請執行下面的命令進行安裝:

yum install nfs-utils rpcbind
複製程式碼

2.2.2 設定開機自動啟動

CentOS 6 可以通過下面的命令設定開機啟動服務:

chkconfig nfs on
chkconfig rpcbind on
複製程式碼

CentOS 7 可以通過下面命令設定開機自動啟動:

systemctl enable rpcbind.service    
systemctl enable nfs-server.service
複製程式碼

2.2.3 啟動服務

CentOS 6 執行下面命令:

service rpcbind start
service nfs start
複製程式碼

CentOS 7 執行下面命令:

systemctl start rpcbind.service    
systemctl start nfs-server.service 
複製程式碼

2.2.4 建立共享目錄

mkdir /data/elastic/bak/backup_es
# 由於備份程式是ES程式進行建立,因此設定目錄的擁有者為啟動ES程式的使用者
chown -R luculent /data/elastic/bak/backup_es
複製程式碼

2.2.5 修改配置檔案

vi /etc/exports
# 新增下面語句
/data/elastic/bak/backup_es *(rw,sync,no_root_squash,no_subtree_check)
複製程式碼
  • * :允許所有的網段訪問
  • rw :讀寫許可權
  • sync:資料同步寫入內在和硬碟
  • no_root_squash:nfs客戶端共享目錄使用者許可權

更多配置詳情如下所示:

ro                  只讀訪問  
rw                  讀寫訪問sync 所有資料在請求時寫入共享  
async nfs           在寫入資料前可以響應請求  
secure nfs          通過1024以下的安全TCP/IP埠傳送  
insecure nfs        通過1024以上的埠傳送  
wdelay              如果多個使用者要寫入nfs目錄,則歸組寫入(預設)  
no_wdelay           如果多個使用者要寫入nfs目錄,則立即寫入,當使用async時,無需此設定。      
hide                在nfs共享目錄中不共享其子目錄  
no_hide             共享nfs目錄的子目錄  
subtree_check       如果共享/usr/bin之類的子目錄時,強制nfs檢查父目錄的許可權(預設)  
no_subtree_check    和上面相對,不檢查父目錄許可權  
all_squash          共享檔案的UID和GID對映匿名使用者anonymous,適合公用目錄。  
no_all_squash       保留共享檔案的UID和GID(預設)  
root_squash         root使用者的所有請求對映成如anonymous使用者一樣的許可權(預設)  
no_root_squas       root使用者具有根目錄的完全管理訪問許可權  
anonuid=xxx         指定nfs伺服器/etc/passwd檔案中匿名使用者的UID  
anongid=xxx         指定nfs伺服器/etc/passwd檔案中匿名使用者的GID 
複製程式碼

2.2.6 重新整理配置立即生效

# 重新整理配置使得修改立刻生效
exportfs -a

# 檢視可掛載目錄
showmount -e 192.168.1.190
複製程式碼

2.3 配置客戶端

以下指令在zk-slaver01(192.168.1.224)和zk-slaver02(192.168.1.48)上執行。

請執行配置服務端的 1-4步驟;NFS 安裝部署完成後,啟動 NFS,建立備份資料夾。

2.3.5 掛載目錄

# 檢視可掛載目錄
showmount -e 192.168.1.190

# 掛載
mount -t nfs 192.168.1.190:/data/elastic/bak/backup_es /data/elastic/bak/backup_es
複製程式碼

2.3.6 設定開機自動掛載

# 檢視當前掛載
df -h

# 設定開機自動掛載
vi /etc/fstab
192.168.1.190:/data/elastic/bak/backup_es /data/elastic/bak/backup_es nfs defaults 0 0
複製程式碼

3. 修改 ES 配置

配置完共享目錄後,需要修改 ES 配置,並重啟 ES 使其生效。

# 在 elasticsearch.yml 中新增下面配置來設定備份倉庫路徑
path.repo: ["/data/elastic/bak/backup_es"]
複製程式碼

4. 建立備份倉庫

4.1 開啟快照管理介面

ES 外掛 kopf 提供了圖形化的介面來建立管理快照,安裝 kopf 外掛的叢集直接訪問:http://es-ip:9200/_plugin/kopf/#!/snapshot即可進入快照管理介面。

快照介面

當然也可以通過點選選單進入介面。

選單入口

4.2 建立備份倉庫

在快照介面左側的文字框新增備份倉庫資訊後點選create按鈕即可完成建立,各個文字框欄位的作用:

  • repository name:倉庫名稱
  • type:請務必選擇fs
  • location:請填寫共享目錄名/data/elastic/bak/backup_es
  • max_restore_bytes_per_sec:資料恢復時速度限制,預設(40m/s)
  • max_snapshot_bytes_per_sec:建立備份復時速度限制,預設(40m/s)
  • chunk_size:分片大小,預設不限制
  • compress:是否啟用壓縮

建立倉庫

當然也可以通過 REST 客戶端執行下面請求來建立備份倉庫。

POST _snapshot/es_bak_20180710
{
  "type": "fs",
  "settings": {
    "location": "/data/elastic/bak/backup_es",
    "max_restore_bytes_per_sec": "50mb",
    "max_snapshot_bytes_per_sec": "50mb",
    "compress": true
  }
}
複製程式碼

5. 建立快照

5.1 建立快照

在快照介面右側的snapshot name文字框填寫快照名稱,repository選擇剛才建立的倉庫es_bak_20180710ignore_unavailable勾選trueinclude_global_state勾選false;最後選擇需要參與備份的索引(不選擇表示全部索引,按住ctrl鍵可以進行多選),點選create按鈕即可建立快照。

建立快照

當然也可以通過 REST 客戶端執行下面請求來建立快照。

POST _snapshot/es_bak_20180710/ss_2018_07_10
{
  "indices": "img_face,lk_other",
  "include_global_state": false,
  "ignore_unavailable": true
}
複製程式碼

5.2 檢視快照

直接在位址列訪問下面的地址即可檢視ss_2018_07_10快照的資訊。

http://es-ip:9200/_snapshot/es_bak_20180710/ss_2018_07_10
複製程式碼

檢視快照

等待一段時間重新訪問,提示建立成功。

建立成功

6. 從快照恢復

# 全部恢復
POST /_snapshot/my_backup/snapshot_1/_restore

# 恢復指定的索引
POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1",
  "index_settings": {
    "index.number_of_replicas": 0
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}
複製程式碼

傳送恢復請求


Any Code,Code Any!

掃碼關注『AnyCode』,程式設計路上,一起前行。

Elasticsearch 使用 NFS 進行資料備份

相關文章