Elasticsearch 使用 NFS 進行數據備份

1. Elasticsearch 數據備份

Elasticsearch 能夠經過快照命令對索引或者整個集羣進行快照和恢復,第一個快照會是一個數據的完整拷貝,可是全部後續的快照只存儲已存快照和新數據之間的差別。這意味着後續備份會至關快速,由於它們只傳輸很小的數據量。編程

快照和恢復模塊容許建立單個索引或者整個集羣的快照到各類各樣的後臺倉庫,本文主要介紹將快照存儲到共享文件系統安全

在共享文件系統上建立快照須要執行如下步驟:bash

  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)上執行。async

2.2.1 檢查安裝 NFS 服務

rpm -qa|grep nfs
rpm -qa|grep rpcbind
複製代碼

若是組件沒有安裝,請執行下面的命令進行安裝:elasticsearch

yum install nfs-utils rpcbind
複製代碼

2.2.2 設置開機自動啓動

CentOS 6 能夠經過下面的命令設置開機啓動服務:ide

chkconfig nfs on
chkconfig rpcbind on
複製代碼

CentOS 7 能夠經過下面命令設置開機自動啓動:ui

systemctl enable rpcbind.service    
systemctl enable nfs-server.service
複製代碼

2.2.3 啓動服務

CentOS 6 執行下面命令:spa

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』,編程路上,一塊兒前行。

相關文章
相關標籤/搜索