RBD Mirror(鏡像)(pacific版本)


RBD 鏡像(Mirror)可以在兩個 Ceph 集群之間異步鏡像(Image)。此功能在兩種模式下可用:

  • 基於日志:此模式使用 RBD 日志映像(Image)功能來確保集群之間的時間點、崩潰一致的復制。每次對 RBD 映像的寫入都首先記錄到相關的日志中,然后再修改實際的映像。遠程集群將從這個關聯的日志中讀取並將更新重播到其本地映像副本。由於每次寫入 RBD 映像都會導致兩次寫入 Ceph 集群,因此在使用 RBD 日志映像功能時,預計寫入延遲會增加近一倍。

  • 基於快照:此模式使用定期計划或手動創建的 RBD 映像鏡像快照在集群之間復制崩潰一致的 RBD 映像。遠程集群將確定兩個鏡像快照之間的任何數據或元數據更新,並將增量復制到其本地映像副本。借助 RBDfast-diff映像功能,可以快速確定更新的數據塊,而無需掃描完整的 RBD 映像。由於此模式不像日志那樣細粒度,因此需要在故障轉移場景期間使用之前同步兩個快照之間的完整增量。任何部分應用的增量集都將在故障轉移時回滾。

筆記:基於日志的鏡像需要 Ceph Jewel 版本或更高版本;基於快照的鏡像需要 Ceph Octopus 版本或更高版本。

鏡像在對等集群中基於每個池進行配置,並且可以在池中的特定映像子集上進行配置。使用基於日志的鏡像時,您還可以鏡像給定池中的所有映像。使用該rbd命令配置鏡像。守護 rbd-mirror進程負責從遠程對等集群中提取鏡像更新並將它們應用到本地集群中的鏡像。

根據所需的復制需求,可以將 RBD 鏡像配置為單向或雙向復制:

  • 單向復制:當數據僅從主集群鏡像到輔助集群時,rbd-mirror守護程序僅在輔助集群上運行。

  • 雙向復制:當數據從一個集群上的主映像鏡像到另一個集群上的非主映像(反之亦然)時, rbd-mirror守護程序在兩個集群上運行。

重要:守護進程的每個rbd-mirror實例都必須能夠同時連接到本地和遠程 Ceph 集群(即所有MON和 OSD 主機)。此外,網絡必須在兩個數據中心之間有足夠的帶寬來處理鏡像工作負載。

1. 池(pool)配置

以下過程演示如何執行基本管理任務以使用該rbd命令配置鏡像。鏡像是基於每個池配置的。

這些池配置步驟應在兩個對等集群上執行。為清楚起見,這些過程假設名為“site-a”和“site-b”的兩個集群都可以從單個主機訪問。

有關如何連接到不同 Ceph 集群的更多詳細信息,請參見rbd 手冊頁。

筆記:以下示例中的集群名稱對應於同名的 Ceph 配置文件(例如 /etc/ceph/site-b.conf)。有關如何配置多個集群的信息,請參閱 ceph-conf文檔。請注意,不需要rbd-mirror源集群和目標集群具有唯一的內部名稱;兩者都可以而且應該稱自己cephrbd-mirror本地和遠程集群所需的配置文件可以任意命名,將守護進程容器化是在外部/etc/ceph維護它們以避免混淆的一種策略。

1.1 啟用鏡像

要使用rbd對池啟用鏡像,請發出帶有池名稱和鏡像模式的子命令mirror pool enable

rbd mirror pool enable {pool-name} {mode}

鏡像模式可以是imagepool

  • image:在image模式下配置時,必須在每個鏡像上顯式啟用鏡像。

  • (默認):在pool模式下配置時,池中啟用了日志功能的所有鏡像都會被鏡像。

例如:

$ rbd --cluster site-a mirror pool enable image-pool image
$ rbd --cluster site-b mirror pool enable image-pool image

1.2 禁用鏡像

要使用rbd禁用池上的鏡像,請指定mirror pool disable命令和池名稱:

rbd mirror pool disable {pool-name}

當以這種方式在池上禁用鏡像時,鏡像也將在顯式啟用鏡像的任何映像(池內)上禁用。

例如:

$ rbd --cluster site-a mirror pool disable image-pool
$ rbd --cluster site-b mirror pool disable image-pool

1.3 Bootstrap Peers

為了讓rbd-mirror守護進程發現其對等集群,必須注冊對等並且必須創建用戶帳戶。這個過程可以使用rbd、 mirror pool peer bootstrap createmirror pool peer bootstrap import命令自動化。

要使用 rbd手動創建新的引導令牌,請發出 mirror pool peer bootstrap create子命令、池名稱和可選的友好站點名稱來描述本地集群:

rbd mirror pool peer bootstrap create [--site-name {local-site-name}] {pool-name}

mirror pool peer bootstrap create的輸出將是應提供給mirror pool peer bootstrap import命令的令牌。例如,在站點 a 上:

$ rbd --cluster site-a mirror pool peer bootstrap create --site-name site-a image-pool
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==

要使用 rbd手動導入另一個集群創建的引導令牌,請指定mirror pool peer bootstrap import命令、池名稱、創建的令牌的文件路徑(或從標准輸入讀取的“-”),以及用於描述本地的可選友好站點名稱集群和鏡像方向(默認為 rx-tx 用於雙向鏡像,但也可以設置為 rx-only 用於單向鏡像):

rbd mirror pool peer bootstrap import [--site-name {local-site-name}] [--direction {rx-only or rx-tx}] {pool-name} {token-path}

例如,在站點 b 上:

$ cat <<EOF > token
eyJmc2lkIjoiOWY1MjgyZGItYjg5OS00NTk2LTgwOTgtMzIwYzFmYzM5NmYzIiwiY2xpZW50X2lkIjoicmJkLW1pcnJvci1wZWVyIiwia2V5IjoiQVFBUnczOWQwdkhvQmhBQVlMM1I4RmR5dHNJQU50bkFTZ0lOTVE9PSIsIm1vbl9ob3N0IjoiW3YyOjE5Mi4xNjguMS4zOjY4MjAsdjE6MTkyLjE2OC4xLjM6NjgyMV0ifQ==
EOF
$ rbd --cluster site-b mirror pool peer bootstrap import --site-name site-b image-pool token

1.4 手動添加集群對等點(可選)

如果需要,或者如果上述引導命令在當前安裝的 Ceph 版本中不可用,可以手動指定集群對等點。

遠程rbd-mirror守護進程需要訪問本地集群才能執行鏡像。應該創建一個新的本地 Ceph 用戶供遠程守護程序使用。要創建 Ceph 用戶ceph請指定 auth get-or-create命令、用戶名、MON caps 和 OSD caps:

ceph auth get-or-create client.rbd-mirror-peer mon 'profile rbd' osd 'profile rbd'

如果不使用下面描述的 Ceph Monitor config-key存儲,則應將生成的密鑰環復制到其他集群的rbd-mirror 守護程序主機。

要使用 rbd手動添加鏡像對等 Ceph 集群,請指定 mirror pool peer add命令、池名稱和集群規范:

rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}

例如:

$ rbd --cluster site-a mirror pool peer add image-pool client.rbd-mirror-peer@site-b
$ rbd --cluster site-b mirror pool peer add image-pool client.rbd-mirror-peer@site-a

默認情況下,rbd-mirror守護進程需要訪問位於/etc/ceph/{cluster-name}.conf提供對等集群MON地址的 Ceph 配置文件,以及 {client-name}位於默認或配置的密鑰環搜索路徑(例如/etc/ceph/{cluster-name}.{client-name}.keyring)中的密鑰環。

或者,對等集群的MON和(或)客戶端密鑰可以安全地存儲在本地 Ceph MONconfig-key存儲中。要在添加鏡像對等點時指定對等點集群連接屬性,請使用 --remote-mon-host--remote-key-file選項。例如:

$ cat <<EOF > remote-key-file
AQAeuZdbMMoBChAAcj++/XUxNOLFaWdtTREEsw==
EOF
$ rbd --cluster site-a mirror pool peer add image-pool client.rbd-mirror-peer@site-b --remote-mon-host 192.168.1.1,192.168.1.2 --remote-key-file remote-key-file
$ rbd --cluster site-a mirror pool info image-pool --all
Mode: pool
Peers:
  UUID                                 NAME   CLIENT                 MON_HOST                KEY
  587b08db-3d33-4f32-8af8-421e77abb081 site-b client.rbd-mirror-peer 192.168.1.1,192.168.1.2 AQAeuZdbMMoBChAAcj++/XUxNOLFaWdtTREEsw==

1.5 刪除集群對等

要使用 rbd刪除鏡像對等 Ceph 集群,請指定 mirror pool peer remove命令、池名稱和對等 UUID(可從命令rbd mirror pool info中獲得):

rbd mirror pool peer remove {pool-name} {peer-uuid}

例如:

$ rbd --cluster site-a mirror pool peer remove image-pool 55672766-c02b-4729-8567-f13a66893445
$ rbd --cluster site-b mirror pool peer remove image-pool 60c0e299-b38f-4234-91f6-eed0a367be08

1.6 數據池

在目標集群中創建鏡像時,rbd-mirror選擇數據池如下:

  1. 如果目標集群配置了默認數據池(使用 rbd_default_data_pool配置選項),則將使用它。

  2. 否則,如果源鏡像使用單獨的數據池,並且目標集群上存在同名池,則將使用該池。

  3. 如果以上都不是,則不會設置數據池。

2. 鏡像(Image)配置

與池配置不同,鏡像配置只需要針對單個鏡像對等 Ceph 集群執行。

鏡像的 RBD 映像被指定為主或非主。這是鏡像的屬性,而不是池的屬性。不能修改指定為非主要的鏡像。

首次在映像上啟用鏡像時,映像會自動提升為主映像(如果池鏡像模式是pool並且映像啟用了日志映像功能,則隱式地提升,或者如果池鏡像模式是image,則由 rbd命令顯式啟用

2.1 啟用鏡像

如果在鏡像image池的模式下配置了鏡像,則需要為池中的每個鏡像顯式啟用鏡像。要使用 rbd為特定映像啟用鏡像,請指定 mirror image enable命令以及池、映像名稱和模式:

rbd mirror image enable {pool-name}/{image-name} {mode}

鏡像模式可以是journalsnapshot

  • 日志(默認):在journal模式下配置時,鏡像將利用 RBD 日志映像功能來復制映像內容。如果鏡像上尚未啟用 RBD 日志鏡像功能,它將自動啟用。

  • 快照:在snapshot模式下配置時,鏡像將利用 RBD 鏡像鏡像快照來復制鏡像內容。啟用后,將自動創建初始鏡像快照。該rbd命令可以創建其他 RBD 映像 鏡像快照。

例如:

$ rbd --cluster site-a mirror image enable image-pool/image-1 snapshot
$ rbd --cluster site-a mirror image enable image-pool/image-2 journal

2.2 啟用鏡像日志功能

基於 RBD 日志的鏡像使用 RBD 映像日志功能來確保復制的映像始終保持崩潰一致。使用image 鏡像模式時,在鏡像啟用鏡像時會自動啟用日志功能。使用pool鏡像模式時,在鏡像可以鏡像到對等集群之前,必須啟用 RBD 鏡像日志功能。通過向rbd命令提供--image-feature exclusive-lock,journaling選項, 可以在創建映像時啟用該功能。

或者,可以在預先存在的 RBD 映像上動態啟用日志功能。要使用 rbd啟用日志功能,請指定feature enable命令、池和映像名稱以及功能名稱:

rbd feature enable {pool-name}/{image-name} {feature-name}

例如:

$ rbd --cluster site-a feature enable image-pool/image-1 journaling

筆記:日志功能依賴於獨占鎖功能。如果尚未啟用獨占鎖定功能,則應在啟用日志功能之前啟用它。

提示:默認情況下,您可以通過添加rbd default features = 125到您的 Ceph 配置文件中啟用所有新鏡像的日志功能 。

提示:rbd-mirror可調參數默認設置為適合鏡像整個池的值。當用於將單個卷遷移為集群時,您可以通過設置rbd_mirror_journal_max_fetch_bytes=33554432rbd_journal_max_payload_bytes=8388608在本地或集中配置的[client]配置部分中rbd-mirror獲得顯着的性能提升。請注意,這些設置可能允許rbd-mirror向目標集群呈現大量寫入工作負載:在遷移期間密切監控集群性能,並在並行運行多個遷移之前仔細測試。

2.3 創建鏡像-快照

使用基於快照的鏡像時,只要需要鏡像 RBD 映像的更改內容,就需要創建鏡像快照。要使用 rbd手動創建鏡像快照,請指定 mirror image snapshot命令以及池和映像名稱:

rbd mirror image snapshot {pool-name}/{image-name}

例如:

$ rbd --cluster site-a mirror image snapshot image-pool/image-1

默認情況下,每個鏡像只會創建3個鏡像快照。如果達到限制,則會自動修剪最近的鏡像快照。如果需要,可以通過rbd_mirroring_max_mirroring_snapshots 配置選項覆蓋限制。此外,刪除鏡像或禁用鏡像時,鏡像快照會自動刪除。

如果定義了鏡像快照計划,還可以定期自動創建鏡像快照。鏡像快照可以在全局、每個池或每個映像級別進行調度。可以在任何級別定義多個鏡像快照計划,但只有與單個鏡像映像匹配的最具體的快照計划才會運行。

要使用 rbd來創建鏡像快照計划,請指定 mirror snapshot schedule add命令以及可選的池或映像名稱;間隔; 和可選的開始時間:

rbd mirror snapshot schedule add [--pool {pool-name}] [--image {image-name}] {interval} [{start-time}]

interval可以分別使用dhm后綴以天、小時或分鍾為單位指定。start-time可以使用 ISO 8601 時間格式指定可選參數。例如:

$ rbd --cluster site-a mirror snapshot schedule add --pool image-pool 24h 14:00:00-05:00
$ rbd --cluster site-a mirror snapshot schedule add --pool image-pool --image image1 6h

要使用 rbd刪除鏡像快照計划,請使用與add相應計划命令匹配的選項指定 mirror snapshot schedule remove命令。

要使用 rbd列出特定級別(全局、池或映像)的所有快照計划,請指定mirror snapshot schedule ls命令以及可選的池或映像名稱。此外,可以指定--recursive選項以列出指定級別及其以下的所有計划。例如:

$ rbd --cluster site-a mirror schedule ls --pool image-pool --recursive
POOL        NAMESPACE IMAGE  SCHEDULE
image-pool  -         -      every 1d starting at 14:00:00-05:00
image-pool            image1 every 6h

要使用rbd查看何時為基於快照的鏡像 RBD 映像創建下一個快照的狀態,請指定 mirror snapshot schedule status命令以及可選的池或映像名稱:

rbd mirror snapshot schedule status [--pool {pool-name}] [--image {image-name}]

例如:

$ rbd --cluster site-a mirror snapshot schedule status
SCHEDULE TIME       IMAGE
2020-02-26 18:00:00 image-pool/image1

2.4 禁用鏡像

要使用 rbd禁用特定映像的鏡像,請指定 mirror image disable命令以及池和映像名稱:

rbd mirror image disable {pool-name}/{image-name}

例如:

$ rbd --cluster site-a mirror image disable image-pool/image-1

2.5 鏡像提升與降級

在需要將主指定移動到對等 Ceph 集群中的映像的故障轉移場景中,應停止對主映像的訪問(例如關閉 VM 或從 VM 中移除關聯的驅動器),將當前主映像降級,提升新的主映像,並恢復對備用集群上的映像的訪問。

筆記:RBD 僅提供必要的工具來促進映像的有序故障轉移。需要一個外部機制來協調整個故障轉移過程(例如,在降級之前關閉映像)。

要使用rbd將特定鏡像降級為非主鏡像,請指定 mirror image demote命令以及池和鏡像名稱:

rbd mirror image demote {pool-name}/{image-name}

例如:

$ rbd --cluster site-a mirror image demote image-pool/image-1

要使用rbd將池中的所有主映像降級為非主映像,請指定mirror pool demote命令和池名稱:

rbd mirror pool demote {pool-name}

例如:

$ rbd --cluster site-a mirror pool demote image-pool

要使用rbd將特定映像提升為主映像,請指定 mirror image promote命令以及池和映像名稱:

rbd mirror image promote [--force] {pool-name}/{image-name}

例如:

$ rbd --cluster site-b mirror image promote image-pool/image-1

要使用 rbd將池中的所有非主映像提升為主映像,請指定mirror pool promote命令和池名稱:

rbd mirror pool promote [--force] {pool-name}

例如:

$ rbd --cluster site-a mirror pool promote image-pool

提示:由於主要/非主要狀態是針對每個映像,因此可以讓兩個集群拆分 IO 負載和階段故障轉移/故障恢復。

筆記:可以使用--force選項強制升級。當降級無法傳播到對等 Ceph 集群(例如 Ceph 集群故障、通信中斷)時,需要強制提升。這將導致兩個對等方之間出現裂腦情況,並且在發出強制重新同步命令之前,鏡像將不再同步。

2.6 強制鏡像重新同步

如果rbd-mirror守護程序檢測到腦裂事件,它不會嘗試鏡像受影響的鏡像,直到得到糾正。要恢復鏡像的鏡像,首先將確定為過期的鏡像降級,然后請求重新同步到主鏡像。要請求與 rbd重新同步的鏡像,請指定命令mirror image resync以及池和鏡像名稱:

rbd mirror image resync {pool-name}/{image-name}

例如:

$ rbd mirror image resync image-pool/image-1

筆記:該rbd命令僅將映像標記為需要重新同步。本地集群的rbd-mirror守護進程負責異步執行重新同步。

3. 鏡像狀態

為每個主鏡像存儲對等集群復制狀態。可以使用mirror image status 和 mirror pool status 命令檢索此狀態。

要使用 rbd請求鏡像狀態,請指定 mirror image status命令以及池和鏡像名稱:

rbd mirror image status {pool-name}/{image-name}

例如:

$ rbd mirror image status image-pool/image-1

要使用 rbd請求鏡像池摘要狀態,請指定 mirror pool status命令和池名稱:

rbd mirror pool status {pool-name}

例如:

$ rbd mirror pool status image-pool

筆記:向命令mirror pool status添加--verbose選項將額外輸出池中每個鏡像映像的狀態詳細信息。

4. RBD-MIRROR 守護進程

這兩個rbd-mirror守護進程負責查看遠程對等集群上的鏡像日志,並針對本地集群重放日志事件。RBD 映像日志功能按發生的順序記錄對映像的所有修改。這確保了遠程映像的崩潰一致鏡像在本地可用。

rbd-mirror守護程序在可選的rbd-mirror 分發包中可用。

重要:每個rbd-mirror守護進程都需要能夠同時連接到兩個集群。

警告:rbd-mirrorPre-Luminous 版本:每個 Ceph 集群只運行一個守護進程。

每個rbd-mirror守護進程都應該使用唯一的 Ceph 用戶 ID。要使用ceph 創建 Ceph 用戶,請指定 auth get-or-create命令、用戶名、MON caps 和 OSD caps:

ceph auth get-or-create client.rbd-mirror.{unique id} mon 'profile rbd-mirror' osd 'profile rbd'

可以通過systemd將用戶 ID 指定為rbd-mirror守護程序實例來管理守護程序:

systemctl enable ceph-rbd-mirror@rbd-mirror.{unique id}

rbd-mirror也可以通過rbd-mirror命令在前台運行:

rbd-mirror -f --log-file={log_path}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM