您好,登錄后才能下訂單哦!
由于歷史原因文件數據被存到兩套FastDFS環境中,由于項目需求需要將兩套環境合為一個,需要提供統一的接口來訪問數據,這時就要將兩套環境的數據合并到一起了。檢查發現兩套FastDFS上傳生成的Key不同,顧這里不用考慮文件沖突的問題。
簡單驗證了下,將環境B的storage直接拷貝到環境A,并通過環境A的域名進行訪問,是可以做到數據合并(FastDFS通過Nginx訪問數據,故只要Nginx指向的路徑上存在文件,訪問是沒問題的)。但是這帶來一個問題,后期FastDFS擴容增加節點時,這些拷貝過來的文件由于不被環境A的tracerServer所識別,所以這部分數據在擴容后可能會出現異常。
FastDFS4.0后新增storage_id功能,可以為每個storage的節點指定id別名。當storage遷移時,若遷移后的IP與原服務IP不一致時,只需修改ID的指向即可完成遷移。此次由于兩套環境都未開啟storage_id,故只需在兩套環境分別開啟,并為其分配不同的id(id不能不沖突)。然后在環境A上新增一個節點,新節點使用的ID是環境B已經指定的id,再將環境B的數據放到這個新增節點上,這樣兩個節點之間會自動相互同步數據,實現合并。
若已經開啟storage_id,且id沖突,這里猜想只需擴容一次,分配到一個新ID,將新ID的數據遷移過去再合并即可。
1. 修改/etc/fdfs/tracker.conf
#use_storage_id = false
use_storage_id = true
將100001的ID分配給環境A(192.168.1.49),將100002的ID分配給環境B(172.18.73.129)
2. 修改環境A /etc/fdfs/storage_ids.conf
[root@localhost fdfs]# cat /etc/fdfs/storage_ids.conf
# <id> <group_name> <ip_or_hostname>
100001 group1 192.168.1.49
# 100002 group1 192.168.0.116
3.修改環境B /etc/fdfs/storage_ids.conf
[root@localhost fdfs]# cat storage_ids.conf
# <id> <group_name> <ip_or_hostname>
# 100001 group1 192.168.0.196
100002 group1 172.18.73.129
#生成環境A的文件摘要
[root@localhost ~]# find /data/fastdfs/storage/data/ -type f -print0 | xargs -0 md5sum > /tmp/1.49.md5
#生成環境B的文件摘要
[root@localhost ~]# find /data/fastdfs/storage/data/ -type f -print0 | xargs -0 md5sum > /tmp/73.129.md5
#備份環境A數據,當合并失敗時可用于回滾
[root@localhost data]# cd /data/
[root@localhost data]# tar -czf fastdfs-1.49.bak.tar.gz fastdfs/
#備份環境B數據,用于遷移合并
[root@localhost data]# cd /data/
[root@localhost data]# tar -czf fastdfs-73.129.bak.tar.gz fastdfs/
#修改192.168.1.49 /etc/fdfs/storage_ids.conf,增加10002的信息(此前10002已經預配置為環境B)
[root@localhost data]# cat /etc/fdfs/storage_ids.conf
# <id> <group_name> <ip_or_hostname>
100001 group1 192.168.1.49
100002 group1 192.168.1.50
#在192.168.1.50安裝FastDFS,修改/etc/fdfs/storage.conf中的服務器信息(與49使用同一tracker,先不啟動)
bind_addr=192.168.1.50
tracker_server=192.168.1.49:22122
#重啟1.49的tracker服務
[root@localhost data]# ps -ef|grep trac
root 1938 1 0 10:55 ? 00:00:00 /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 2079 2014 0 11:49 pts/2 00:00:00 grep trac
[root@localhost data]# kill 1938
[root@localhost data]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf
#將172.18.73.129的數據拷貝到1.50的storage上
#啟動1.50的storage服務
[root@localhost etc]# /usr/local/FastDFS/bin/fdfs_storaged /etc/fdfs/storage.conf
可以看到只有dat和binlog文件的MD5校驗不通過,由于合并時這兩個文件會被修改,所有這里不用擔心。另外沒有出現文件丟失的情況。
前面已經完成了兩個環境的數據合并,從校驗結果上可以看出所有用戶文件都已經正常同步,此處可以測試另加一個storage節點進一步論證合并成功的結論。若合并后的數據能完整的同步到新增節點上,說明合并的信息完整的記錄到FastDFS中,確保合并是成功的。
新增一臺storage節點,假定IP:192.168.1.51,指定ID為100003。
#修改192.168.1.49 /etc/fdfs/storage_ids.conf,增加10002的信息(此前10002已經預配置為環境B)
[root@localhost data]# cat /etc/fdfs/storage_ids.conf
# <id> <group_name> <ip_or_hostname>
100001 group1 192.168.1.49
100002 group1 192.168.1.50
100003 group1 192.168.1.51
#在192.168.1.51安裝FastDFS,修改/etc/fdfs/storage.conf中的服務器信息
bind_addr=192.168.1.51
tracker_server=192.168.1.49:22122
#重啟1.49的tracker服務
[root@localhost ~]# ps -ef|grep trac
root 2082 1 0 11:49 ? 00:00:00 /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 2178 2014 0 12:14 pts/2 00:00:00 grep tra
[root@localhost ~]# kill 2082
[root@localhost ~]# /usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf
#啟動1.51的storage服務
[root@localhost etc]# /usr/local/FastDFS/bin/fdfs_storaged /etc/fdfs/storage.conf
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。