溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

發(fā)布時(shí)間:2020-05-23 16:22:19 來源:億速云 閱讀:297 作者:鴿子 欄目:系統(tǒng)運(yùn)維

背景

   由于歷史原因文件數(shù)據(jù)被存到兩套FastDFS環(huán)境中,由于項(xiàng)目需求需要將兩套環(huán)境合為一個(gè),需要提供統(tǒng)一的接口來訪問數(shù)據(jù),這時(shí)就要將兩套環(huán)境的數(shù)據(jù)合并到一起了。檢查發(fā)現(xiàn)兩套FastDFS上傳生成的Key不同,顧這里不用考慮文件沖突的問題。
   簡單驗(yàn)證了下,將環(huán)境B的storage直接拷貝到環(huán)境A,并通過環(huán)境A的域名進(jìn)行訪問,是可以做到數(shù)據(jù)合并(FastDFS通過Nginx訪問數(shù)據(jù),故只要Nginx指向的路徑上存在文件,訪問是沒問題的)。但是這帶來一個(gè)問題,后期FastDFS擴(kuò)容增加節(jié)點(diǎn)時(shí),這些拷貝過來的文件由于不被環(huán)境A的tracerServer所識別,所以這部分?jǐn)?shù)據(jù)在擴(kuò)容后可能會出現(xiàn)異常。

環(huán)境信息

  • 環(huán)境A地址 192.168.1.49 文件key為wKgBMV.....
  • 環(huán)境B地址 172.18.73.129 文件key為rBJJgV...
  • 環(huán)境A新增服務(wù)器地址 192.168.1.50(用于遷移環(huán)境B的數(shù)據(jù))
  • 環(huán)境A的擴(kuò)展服務(wù)器地址 192.168.1.51(用于合并后驗(yàn)證集群擴(kuò)展)

實(shí)現(xiàn)原理

  FastDFS4.0后新增storage_id功能,可以為每個(gè)storage的節(jié)點(diǎn)指定id別名。當(dāng)storage遷移時(shí),若遷移后的IP與原服務(wù)IP不一致時(shí),只需修改ID的指向即可完成遷移。此次由于兩套環(huán)境都未開啟storage_id,故只需在兩套環(huán)境分別開啟,并為其分配不同的id(id不能不沖突)。然后在環(huán)境A上新增一個(gè)節(jié)點(diǎn),新節(jié)點(diǎn)使用的ID是環(huán)境B已經(jīng)指定的id,再將環(huán)境B的數(shù)據(jù)放到這個(gè)新增節(jié)點(diǎn)上,這樣兩個(gè)節(jié)點(diǎn)之間會自動相互同步數(shù)據(jù),實(shí)現(xiàn)合并。
  若已經(jīng)開啟storage_id,且id沖突,這里猜想只需擴(kuò)容一次,分配到一個(gè)新ID,將新ID的數(shù)據(jù)遷移過去再合并即可。

操作過程

一、開啟storage_id

1. 修改/etc/fdfs/tracker.conf
#use_storage_id = false
use_storage_id = true

將100001的ID分配給環(huán)境A(192.168.1.49),將100002的ID分配給環(huán)境B(172.18.73.129)
2. 修改環(huán)境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.修改環(huán)境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

重啟服務(wù),檢查切換情況

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

二、輸出兩套環(huán)境文件的MD5信息,用于校驗(yàn)。

#生成環(huán)境A的文件摘要
[root@localhost ~]# find /data/fastdfs/storage/data/ -type f -print0 | xargs -0 md5sum > /tmp/1.49.md5
#生成環(huán)境B的文件摘要
[root@localhost ~]# find /data/fastdfs/storage/data/ -type f -print0 | xargs -0 md5sum > /tmp/73.129.md5

三、分別打包兩套環(huán)境的Storage。

#備份環(huán)境A數(shù)據(jù),當(dāng)合并失敗時(shí)可用于回滾
[root@localhost data]# cd /data/
[root@localhost data]# tar -czf fastdfs-1.49.bak.tar.gz fastdfs/

#備份環(huán)境B數(shù)據(jù),用于遷移合并
[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已經(jīng)預(yù)配置為環(huán)境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中的服務(wù)器信息(與49使用同一tracker,先不啟動)
bind_addr=192.168.1.50
tracker_server=192.168.1.49:22122

#重啟1.49的tracker服務(wù)
[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的數(shù)據(jù)拷貝到1.50的storage上
#啟動1.50的storage服務(wù)
[root@localhost etc]# /usr/local/FastDFS/bin/fdfs_storaged  /etc/fdfs/storage.conf

五、分別檢查1.49/1.50的binlog狀態(tài)。

可以看到兩個(gè)節(jié)點(diǎn)相互同步的日志,最終兩個(gè)節(jié)點(diǎn)狀態(tài)為ACTIVE為同步完成。

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?
如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

六、用步驟二中生成的md5同時(shí)檢驗(yàn)兩個(gè)節(jié)點(diǎn)上所有的數(shù)據(jù)。

在1.49上檢驗(yàn)兩個(gè)md5文件

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

在1.50上檢驗(yàn)兩個(gè)md5文件

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

可以看到只有dat和binlog文件的MD5校驗(yàn)不通過,由于合并時(shí)這兩個(gè)文件會被修改,所有這里不用擔(dān)心。另外沒有出現(xiàn)文件丟失的情況。

七、訪問數(shù)據(jù)驗(yàn)證。

通過環(huán)境A的url訪問原環(huán)境B的數(shù)據(jù),可以正常讀取到。

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

到此,合并已經(jīng)完成。

八、擴(kuò)展節(jié)點(diǎn),驗(yàn)證新節(jié)點(diǎn)上的所有數(shù)據(jù)。

前面已經(jīng)完成了兩個(gè)環(huán)境的數(shù)據(jù)合并,從校驗(yàn)結(jié)果上可以看出所有用戶文件都已經(jīng)正常同步,此處可以測試另加一個(gè)storage節(jié)點(diǎn)進(jìn)一步論證合并成功的結(jié)論。若合并后的數(shù)據(jù)能完整的同步到新增節(jié)點(diǎn)上,說明合并的信息完整的記錄到FastDFS中,確保合并是成功的。
新增一臺storage節(jié)點(diǎn),假定IP:192.168.1.51,指定ID為100003。

#修改192.168.1.49 /etc/fdfs/storage_ids.conf,增加10002的信息(此前10002已經(jīng)預(yù)配置為環(huán)境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中的服務(wù)器信息
bind_addr=192.168.1.51
tracker_server=192.168.1.49:22122

#重啟1.49的tracker服務(wù)
[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服務(wù)
[root@localhost etc]# /usr/local/FastDFS/bin/fdfs_storaged  /etc/fdfs/storage.conf

在1.49上檢查storage信息

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

在1.51上校驗(yàn)MD5摘要信息。此時(shí)可以看到新擴(kuò)容的節(jié)點(diǎn)能同步兩套環(huán)境的所有文件

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

在1.49上傳一個(gè)文件,然后再3個(gè)節(jié)點(diǎn)上檢查文件是否可以同步??梢钥吹叫律蟼鞯奈募梢酝降剿袛?shù)據(jù)節(jié)點(diǎn)上。

如何合并兩套環(huán)境的FastDFS數(shù)據(jù)?

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI