高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )
理論拓撲
環境準備:?
N 臺 Linux 測試服務器?
操作系統版本? CentOS 6.5?32bit?
***系統分區要求:需要為格式化的空分區***?
IP 地址:? mfsmaster:10.3.0.81????心跳 ip??192.168.1.11?
mfsbackup:10.3.0.82????心跳 ip??192.168.1.12?
#######All?machine?do?it?############################?
更改 yum 源 mv /etc/yum.repos.d/CentOS‐Base.repo /etc/yum.repos.d/CentOS‐Base.repo.backup cd /etc/yum.repos.d/ wget http://mirrors.163.com/.help/CentOS5‐Base‐163.repo yum makecache yum install ‐y kernel‐headers kernel‐devel####################mfmaster?config###################?
vi?/etc/sysconfig/network? hostname=mfsmaster? ? vi?/etc/hosts? ? #add?line10.3.0.81?mfsmaster? 10.3.0.82?mfsbackup?#########copy?hosts?file?to?10.3.0.82################?
scp?/etc/hosts?root@10.3.0.82:/etc/?##############mfsbackup?config#####################?
vi?/etc/sysconfig/network? hostname=mfsbackup??####################download?resource?and?scp?to?mfsbackup#############?
mfsmaster? mkdir?/usr/src/download?####download?drdb##############
wget?http://oss.linbit.com/drbd/8.4/drbd‐8.4.0.tar.gz?####download?heartbeat##############?
wget?http://hg.linux‐ha.org/heartbeat‐STABLE_3_0/archive/STABLE‐3.0.4.tar.bz2? scp?‐a?/usr/src/download?root@10.3.0.82?############install?drbd######################?
tar?zxvf?drbd‐8.4.0.tar.gz? cd?drbd‐8.4.0? ./configure?‐‐prefix=/usr/local/drbd?? make?&&?make?install?##########yum? 源安裝 drbd?
yum?install?‐y?kmod‐drbd83?drbd83? 檢查 drbd? 模塊? lsmod?|?grep?‐i?drbd?drbd??????????????????228528??0?? 假如為空,需要導入 drbd 模塊? modprobe?drbd? ?? vi?/etc/drbd.conf? ? global?{?usage‐count?yes;?}? common?{?syncer?{?rate?50M;?}?}? resource?r0?{?protocol?C;?? ? net?{? ???????? cram‐hmac‐alg?sha1;? ???????shared‐secret?"secret?string";? ???? }? #?every?machine?must?be?use?the?"on"?beginon?mfsmaster?{? ????#?/dev/drbd1?use?the?"/dev/sda1"? ???????? device????/dev/drbd1;? ???????disk??????/dev/sdb1;? ????????? #?set?DRBD?port,used?connection?to?other?machine? ???????address???10.3.0.81:7898;? ???????? meta‐disk??internal;? ???????}? ??? on?mfsbackup?{? ???????? device????/dev/drbd1;? ???????? disk??????/dev/sdb1;? ???????? address???10.3.0.82:7898;? ???????? meta‐disk??internal;? ???????? }? }? 初始化資源組???? 格式:drbdadm?create‐md?resource_name?? drbdadm?create‐md?r0?###########初次運行提示信息###############?
‐‐==??Thank?you?for?participating?in?the?global?usage?survey??==‐‐? The?server's?response?is:? you?are?the?12052th?user?to?install?this?version? Writing?meta?data...? initializing?activity?log? NOT?initialized?bitmap? New?drbd?meta?data?block?successfully?created.? success? ? service?drbd?start? ________________________________________________________________________############提示信息#################?
Starting?DRBD?resources:?[?? r0? Found?valid?meta?data?in?the?expected?location,?1011671040?bytes?into?/dev/sdb1.? d(r0)?s(r0)?n(r0)?]..........? ***************************************************************? ? DRBD's?startup?script?waits?for?the?peer?node(s)?to?appear.? ? ‐?In?case?this?node?was?already?a?degraded?cluster?before?the? ???reboot?the?timeout?is?0?seconds.?[degr‐wfc‐timeout]? ? ‐?If?the?peer?was?available?before?the?reboot?the?timeout?will? ???expire?after?0?seconds.?[wfc‐timeout]? ???(These?values?are?for?resource?'r0';?0?sec?‐>?wait?forever)? ? To?abort?waiting?enter?'yes'?[??20]:? .? ________________________________________________________________________? cat?/proc/drbd? ________________________________________________________________________? version:?8.3.8?(api:88/proto:86‐94)? GIT‐hash:? d78846e52224fd00562f7c225bcc25b2d422321d? build? by? mockbuild@builder10.centos.org,?2010‐06‐04?08:04:16? ? 1:?cs:Connected?ro:Secondary/Secondary?ds:Inconsistent/Inconsistent?C?r‐‐‐‐? ns:0?nr:0?dw:0?dr:0?al:0?bm:0?lo:0?pe:0?ua:0?ap:0?ep:1?wo:b?oos:987896? 對輸出的含義解釋如下:? ro 表示角色信息,第一次啟動 drbd 時,兩個 drbd 節點默認都處于 Secondary 狀態,? ds 是磁盤狀態信息,“Inconsistent/Inconsisten”,即為“不一致/不一致”狀態,表示兩個節 點的磁盤數據處于不一致狀態。? Ns 表示網絡發送的數據包信息。? Dw 是磁盤寫信息? Dr 是磁盤讀信息? ? 在 MFSMASTER? 設置主節點? ? 初次運行? drbdadm?‐‐?‐‐overwrite‐data‐of‐peer?primary?all? /sbin/drbdadm?primary?r0? ? 主備節點切換? 主備節點切換有兩種方式,分別是停止 drbd 服務切換和正常切換,依次介紹:? 停止 drbd 服務切換? 1.? 關閉主節點服務切換? 此時掛載的 drbd 分區就自動在主節點卸載了,然后在備用節點執行切換命令:? drbdadm?primary?all? 此時會報錯:? State?change?failed:?(‐7)?Refusing?to?be?Primary?while?peer?is?not?outdated? Command?'drbdsetup?2?primary'?terminated?with?exit?code?11? 因此,必須在備用節點執行如下命令:? drbdsetup?/dev/drbd1?primary?–o? 或者? drbdadm?‐‐?‐‐overwrite‐data‐of‐peer?primary?all? 此時就可以正常切換了。? 當在備用節點執行切換到主節點命令后,原來的主用節點自動變為備用節點。無需在主用節 點再次執行切換到備用節點的命令。? 2.? 正常切換? 在主節點卸載磁盤分區,? umount?/mnt/mfs? 然后執行? drbdadm?secondary?all? 如果不執行這個命令,直接在備用節點執行切換到主節點的命令,會報錯:? 2:?State?change?failed:?(‐1)?Multiple?primaries?not?allowed?by?config? Command?'drbdsetup?2?primary'?terminated?with?exit?code?11? 接著,在備用節點執行? drbdadm?primary?all? 最后在備用節點掛載磁盤分區即可:? mount?/dev/drbd1??/mnt/mfs? DRBD 腦裂后的處理:? 腦裂后,兩個節點間數據不同步,主從關系失效,需要按下面的步驟修復:? a.在從節點如下操作:? #drbdadm?secondary?all? #drbdadm?‐‐?‐‐discard‐my‐data?connect?all? b.在主節點上,通過 cat?/proc/drbd 查看狀態,如果不是 WFConnection 狀態,需要再手動連 接:? #drbdadm?connect?all########################??HA??config###############################
安裝基礎包和 heartbeat 包?yum?install?‐y?libnet?heartbeat‐devel?heartbeat‐ldirectord?heartbeat? 配置 ha 環境? cp?/usr/share/doc/heartbeat‐2.1.3/ha.cf?/etc/ha.d/?? cp?/usr/share/doc/heartbeat‐2.1.3/authkeys?/etc/ha.d/?? cp?/usr/share/doc/heartbeat‐2.1.3/haresources?/etc/ha.d/?? ? 更改配置文件?? /etc/ha.d/ha.cf? logfile?/var/log/ha‐log.log? logfacility?????local0? keepalive?2? deadtime?30? warntime?10? udpport?694? ucast?eth1?192.168.1.12? auto_failback?on? node????mfsmaster? node????mfsbackup?hopfudge?1? ? 更改配置文件?? /etc/ha.d/authkeys? auth?1? 1?crc? 更改 authkeys? 權限為 600? chmod?600?/etc/ha.d/authkeys? ? 更改配置文件?? /etc/ha.d/haresource? mfsmaster??Initdrbd??10.3.0.83?mfsmaster??mfsmaster??10.3.0.83? mfsmaster??10.3.0.83?httpd???? #測試 heartbeat 專用,測試完畢之后可以注釋掉?#第一個字段是主機名,是 uname?‐a 得到的?
# 第二個字段作用是執行當前的腳本命令此腳本可以定義在
#/etc/init.d/ 或 /etc/ha.d/resource.d,此處我定義了一個名叫 Initdrbd? 的腳本命令,具體的見下面演示。?
#第三個字段作用定義啟動 mfsmaster 進程,必須在/etc/init.d/或/etc/ha.d/resource.d 能找到 的可執行的腳本文件。?
#第四個字段作用是啟動虛擬的 IP?
編輯 Initdrbd?
vi?/etc/ha.d/resource.d/Initdrbd? #!/bin/shunset?LC_ALL;?export?LC_ALL?unset?LANGUAGE;?export?LANGUAGE? prefix=/usr? exec_prefix=/usr? .?/etc/ha.d/shellfuncs? ?? case?"$1"?in? ??? 'start')? ? drbdadm?primary?r0? ? mount?/dev/drbd1?/mnt/mfs? ???????? ;;? ??? 'stop')? ? umount?/mnt/mfs? ? drbdadm??secondary?r0???????? ? ;;? 'restart')? ???????? ;;? *)? ???????? echo?"Usage:?$0?{?start?|??stop?|?restart?}"? ???????? ;;? esac? exit?0?同步 master 與 backup 之間配置?
scp?/etc/ha.d/ha.cf?root@10.3.0.82:/etc/ha.d/? scp??/etc/ha.d/resource.d/Initdrbd?root@10.3.0.82:/etc/ha.d/resource.d/? scp??/etc/ha.d/haresources?root@10.3.0.82:/etc/ha.d/? scp??/etc/ha.d/authkeys?root@10.3.0.82:/etc/ha.d/?測試內容?
主機 mfsmaster? vi?/var/www/html? ? <!DOCTYPE?HTML?PUBLIC?"‐//W3C//DTD?HTML?4.0?Transitional//EN">? <HTML>? ? <HEAD>? ?? <TITLE>?New?Document?</TITLE>? ?? <META?NAME="Generator"?CONTENT="EditPlus">? ?? <META?NAME="Author"?CONTENT="">? ?? <META?NAME="Keywords"?CONTENT="">? ?<META?NAME="Description"?CONTENT="">? ? </HEAD>? ? <BODY>? ???mfsmaster?is?running? ? </BODY>? ? 主機 mfsbackup? ? <!DOCTYPE?HTML?PUBLIC?"‐//W3C//DTD?HTML?4.0?Transitional//EN">? <HTML>? ? <HEAD>? ?<TITLE>?New?Document?</TITLE>? ?? <META?NAME="Generator"?CONTENT="EditPlus">? ?<META?NAME="Author"?CONTENT="">? ?? <META?NAME="Keywords"?CONTENT="">? ?? <META?NAME="Description"?CONTENT="">? ? </HEAD>? ? <BODY>? ??? mfsbackup?is?running? ? </BODY> 主機 mfsbackup? ? <!DOCTYPE?HTML?PUBLIC?"‐//W3C//DTD?HTML?4.0?Transitional//EN">? <HTML>? ? <HEAD>? ?? <TITLE>?New?Document?</TITLE>? ?? <META?NAME="Generator"?CONTENT="EditPlus">? ?? <META?NAME="Author"?CONTENT="">? ?? <META?NAME="Keywords"?CONTENT="">? ?? <META?NAME="Description"?CONTENT="">? ? </HEAD>? ? <BODY>? ??? mfsbackup?is?running? ? </BODY>?測試? ?
a).? 兩臺機器分別啟動,并且啟動 heartbeat?????
? b).? 然后在兩臺機器意外的其他機器上輸入 http://?10.3.0.83?
c).? 正常會顯示 mfsmaster?is?running,?
d).? 把 mfsmaster 宕機或者關閉 heartbeat,? 則會出現 mfsbackup 接管工作的狀態,刷新瀏覽 器出現 mfsbackup?is?running?
e).? 恢復 mfsmaster,過數秒后刷新瀏覽器出現 mfsmaster?is?running,?
f).? 測試成功? Note:如果輸入 http://?10.3.0.83? 出現錯誤,請檢查配置文件里面的服務是否寫對了,查看日 志文件看服務是否起來了,如果確定全部運行正常,還是沒有 WEB 頁面顯示結果,請檢查 防火墻。?
MFS??環境部署?
由于搭建的環境屬于高可用環境,需要兩臺服務器的用戶 ID、組 ID 都要保持一致? 創建組? :? groupadd?‐g?600?mfs? 創建用戶: useradd?mfs?‐u?600?‐g?mfs? ? cd?/usr/src? wget? http://pro.hit.gemius.pl/hitredir/id=0sWa0S8ft4sTAHF1bGAAEZPcP3ziyq7f9SdhoQf7oeT.c7/url=m oosefs.org/tl_files/mfscode/mfs‐1.6.20‐2.tar.gz? tar?zxvf?mfs‐1.6.20‐2.tar.gz? cd?mfs‐1.6.20? ./configure? ‐‐prefix=/mnt/mfs? ‐with‐default‐user=mfs? ‐with‐default‐group=mfs? ‐‐disable‐mfschunkserver?‐‐disable‐mfsmount?make?&&?make?install? 配置 mfs 文件? cd?/mnt/mfs/etc? cp?mfsmaster.cfg.dist?mfsmaster.cfg?cp?mfsmetalogger.cfg.dist?mfsmetalogger.cfg?cp?mfsexports.cfg.dist?mfsexports.cfg? cd?/mnt/mfs/var/mfs/? cp?metadata.mfs.empty?metadata.mfs? ? scp?/etc/init.d/mfsmaster?root@10.3.0.82:/etc/init.d/? ? _______________________________________________________________________________備份服務器配置 Backup?server?(metalogger)???10.3.0.84?
groupadd?mfs? useradd?‐g?mfs?mfs? tar?zxvf?mfs‐1.6.20‐2.tar.gz?? ./configure? ‐‐prefix=/usr/local/mfs? ‐sysconfdir=/etc? ‐‐localstatedir=/var/lib? ‐‐with‐default‐user=mfs?‐‐with‐default‐group=mfs?‐‐disable‐mfschunkserver?‐‐disable‐mfsmount? ? make?&&?make?install?cp?/etc/mfsmetalogger.cfg.dist?/etc/mfsmetalogger.cfg? 啟動 mfsmetalogger? /usr/local/mfs/sbin/mfsmetalogger?start?vi?/etc/rc.local? #add?this?lie?to?start?mfsmetalogger? /usr/local/mfs/sbin/mfsmetalogger?start?存儲塊服務器 Chunk?servers? 安裝????10.3.0.85~10.3.0.86?
groupadd?mfs?useradd?‐g?mfs?mfs? tar?zxvf?mfs‐1.6.20‐2.tar.gz? ? ./configure? ‐‐prefix=/usr/local/mfs? ‐sysconfdir=/etc? ‐‐localstatedir=/var/lib? ‐‐with‐default‐user=mfs?‐‐with‐default‐group=mfs?‐‐disable‐mfsmaster? cp?/etc/mfschunkserver.cfg.dist?/etc/mfschunkserver.cfg? cp?/etc/mfshdd.cfg.dist?/etc/mfshdd.cfg? vi?/etc/mfshdd.cfg? #add?this?line?? /opt/mfschunks1? /opt/mfschunks2? ? 建立 mfs 存儲所用到的文件夾? mkdir?/opt/mfschunks1? mkdir?/opt/mfschunks2? 更改文件夾權限? chown?‐R?mfs:mfs?/opt/mfschunks1? chown?‐R?mfs:mfs?/opt/mfschunks2? 更改 host 文件? 10.3.0.83?????mfsmaster? 為了方便程序的自動運行,編輯 rc.local 文件?/usr/local/mfs/sbin/mfschunkserver?start? ? ? _______________________________________________________________________? 掛載客戶端? 相關設置? groupadd?mfs? useradd?‐g?mfs?mfs? ??? 安裝 fuse?wget?http://cdnetworks‐kr‐1.dl.sourceforge.net/project/fuse/fuse‐2.X/2.8.5/fuse‐2.8.5.tar.gz? ?tar?zxvf?fuse‐2.8.5.tar.gz? cd?fuse‐2.8.5? ./configure? ? ‐‐prefix=/usr? make? meke?install? cd?/usr/src? tar?zxvf?mfs‐1.6.20‐2.tar.gz?? cd?mfs‐1.6.20‐2? ./configure? ‐‐prefix=/usr/local/mfs? ‐sysconfdir=/etc? ‐‐localstatedir=/var/lib? ‐‐with‐default‐user=mfs?‐‐with‐default‐group=mfs?‐‐disable‐mfsmaster?‐‐disable‐mfschunkserver? ? 編輯 hosts 文件? 10.3.0.83?mfsmaster? ? mkdir?‐p?/mnt/mfs? ? mfsmount?/mnt/mfs?‐H?mfsmaster? ##################提示內容################? mfsmaster? accepted? connection? with? parameters:? read‐write,restricted_ip? ;? root? mapped? to? root:root?集成與測試?
? heartbeat 與 drbd 的集成?
DRBD 的主從的切換依賴與 heartbeat 的服務,所以集成的關鍵點在于定義 Initdrbd 的腳本文 件的定義和 heartbeat 的服務定義文件/etc/ha.d/resource.d。如 server1? Initdrbd? 就是集成 DRBD 和 heartbeat。? ?
heartbeat 與 MFS 的集成?
與 DRBD 一樣,mfsmaster 的腳本文件定義與 heartbeat 的服務定義文件/etc/ha.d/resource.d 中即可。? ?
drbd? 與 mfs? 的集成? 在主服務器中,必須把MFS的安裝文件全部安裝到drbd的掛載目錄中去,安裝到塊設備上去, 所以在主從切換的時候,備份機器拿到安裝環境和主的一樣,那么通過同樣的方式來啟動 MFS 進程,達到切換切換啟動 MFS 的目的。? ?
測試? 兩臺 server 上啟動 DRBD,利用 cat?/proc/drbd? 查看啟動情況和網絡狀態?
主機器上顯示 Primary/Secondary? 備份機器上顯示 Secondary/Primary,啟動成功
? 啟動 heartbeat,通過日志查看 heartbeat 包括關聯的服務加載的情況,tail? –f
/var/log/ha_log/xxx.log?
在主機器上 Ps? 的方式查看 heartbeat? 和 MFS 進程,確保服務啟動,如果沒有啟動,可手動 在啟動一次。
此時備份機器的 mfs 沒有啟動。? 停止主服務的 heartbeat,查看主服務的日志,發現所有的關聯服務都會被關閉,包括 drbd,mfs,vip 等。?
查看備份機器的日志,發現已經開始啟動關聯的服務,此時備份機器上 cat?/proc/drbd? 出現 Primary/Secondary? 主機器上顯示 Secondary/Primary,說明 DRBD 切換成功,然后查看 mfs 是否啟動,如果啟動成功,
恭喜您,高可用的 MFS 文件分布式系統已經搭建好了
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ListView控件商城列表
- 下一篇: 中断系统详解、外部中断