環境:
系統centos6.x
拓撲圖以下
moosefs 是一個具有冗餘容錯功能的分佈式網絡文件系統,它將數據分別存放多個物理服務器或單獨磁盤及分區上,確保
一份數據多個備份副本。對於訪問的客戶端或者用戶來講,整個分佈式網絡文件系統集羣看起來像一個資源同樣。
從對其文件操做的狀況看,Moosefs 就至關於類UNIX文件系統。
mfs 是一個分層的目錄樹結構。
存儲支持POSIX 標準的文件屬性(權限,最後訪問和修改時間)
支持特殊的文件,如:塊石板,字符設備,管道和套接字,鏈接文件(符合鏈接和硬連接)
支持基於ip地址和密碼的方式訪問文件系統
MooseF的特性
高可靠性,沒一份數據,能夠設置多個副本(多份數據) ,並能夠存儲在不一樣的主機上
搞可擴展性,能夠輕鬆的經過增長主機磁盤容量或增長主機數量來動態擴展整個文件系統的存儲量。
高可容錯性,咱們能夠經過對mfs進行系統設置,實現數據文件被刪除後的一段時間內,依然存放於主機的回收站中,一備誤刪除恢復數據。
高數據一致性,即便文件被寫入訪問時,咱們依然能夠輕鬆完成文件的一致性快照。
註釋:我這裏用的vmware虛擬機跑的4G內存,勉強跑了三個虛擬機,若是用虛擬機能夠考慮用: master and data 01 ;backup and data 02 ; client and data 03
這樣既作master,backup,client,也能夠作data數據服務器,省資源,推薦
一.安裝主服務器MFS master
1.下載mfs
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-1.tar.gz
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 建立mfs用戶和組
useradd mfs -s /sbin/nologin
3.安裝mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
4.查看mfs的安裝目錄結構
ll /usr/local/mfs
drwxr-xr-x 2 root root 4096 Jan 31 04:09 etc #mfs配置文件目錄
drwxr-xr-x 2 root root 4096 Jan 31 04:09 sbin #mfs命令路徑
drwxr-xr-x 4 root root 4096 Jan 31 04:09 share #mfs幫助文件目錄
drwxr-xr-x 3 root root 4096 Jan 31 04:09 var #mfs數據及日誌目錄
提示:etc 和var須要備份
配置主服務器 mfs master
cd /usr/local/mfs/etc
mfsexports.cfg.dist #權限配置文件
mfsmaster.cfg.dist #master 的主配置文件
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
主配置文件mfsmaster.cfg 原始內容:
#WORKING_USER = mfs #運行master server 用戶
# WORKING_GROUP = mfs #運行master server 組
# SYSLOG_IDENT = mfsmaster #master server 在syslog中的標識,說明是由master產生的
# LOCK_MEMORY = 0 #是否執行mlockall()避免mfsmaster 進程溢出(默認爲0)
# NICE_LEVEL = -19 #運行的優先級(若是能夠默認-19;注意:進程必須是用root啓動)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg #被掛接的目錄及其權限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs#數據存放路徑,此目錄分三類文件,changelog ,sessions 和stats
# BACK_LOGS = 50 #metadata的改變log文件數目(默認是50)
# REPLICATIONS_DELAY_INIT = 300 #延遲複製的時間(默認是300s)
# REPLICATIONS_DELAY_DISCONNECT = 3600 #chunkserver 斷開的複製延遲(默認是3600)
# MATOCS_LISTEN_HOST = * #metalogger 監聽的ip地址(默認是*,表明任何ip)
# MATOCS_LISTEN_PORT = 9419 #metalogger 監聽的端口地址(默認是9419)
# MATOCS_LISTEN_HOST = * #用於chunkserver 鏈接的ip地址(默認是*,表明任何ip)
# MATOCS_LISTEN_PORT = 9420 #用於chunkserver 鏈接的端口地址(默認是9420)
# MATOCU_LISTEN_HOST = * #用於客戶端掛接的ip地址(默認*,表明任何ip)
# MATOCU_LISTEN_PORT = 9421 #用於客戶端掛接鏈接的端口地址(默認9421)
# CHUNKS_LOOP_TIME = 300 #chunksde 迴環頻率(默認是:300秒)
# CHUNKS_WRITE_REP_LIMIT = 1 #在一個循環裏複製到一個chunkserver的最大chunk數目
# CHUNKS_READ_REP_LIMIT = 5 #在一個循環裏從一個chunkserver複製的最大chunk數目
CHUNKS_READ_REP_LIMIT = 0 彈出低於1.6.0的客戶端掛接(0或1,默認是0
Mfsmaster.cfg 配置文件包含主服務器master相關的設置,在這裏咱們暫時不打算對其進行修改,若是你想知道關於該配置的文件
請查看手冊
權限控制配置文件mfsexports.cfg
配置文件mfsexports.cfg 指定那些客戶端主機能夠遠程掛接MFS文件系統,以及受權掛接客戶端什麼樣的訪問權限
mfsexports.cfg 的文件每個條目分爲三部分;
第一部分:mfs客戶端的ip地址或地址範圍
地址能夠指定的幾種表現形式
* #因此的ip地址
n.n.n.n #單個ip地址
n.n.n.n/b #ip網絡地址/位數掩碼
n.n.n.n/m.m.m.m #ip網絡地址/子網掩碼
f.f.f.f-t.t.t.t #ip段
第二部分:被掛載的目錄
目錄部分須要注意兩點
/標識 Moosefs 根
.表示mfsmeta文件系統
第三部分:設置mfs客戶端能夠擁有的訪問權限
權限部分:
ro #只讀模式共享
rw #讀寫的方式共享
alldirs #容許掛載任何指定的子目錄
maproot #映射爲root,仍是指定的用戶
password #指定客戶端密碼
mfsexports.cfg 實際配置
echo 192.168.66.0/24 / rw,alldirs,mapall=mfs:mfs,password=123 >mfsexports.cfg
配置vip地址用於對外提供服務
配置vip地址用於對外提供服務,包括全部的服務器及客戶端。
192.168.66.116 mfsmaster.etiantian.org
配置虛擬網卡eth0:0
DEVICE=eth0:0
BOOTPROTO=static
HWADDR=00:0C:29:50:9F:90
ONBOOT=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.66.100
GATEWAY=192.168.66.1
ifup ifcfg-eth0:0 開啓
hosts文件都添加 192.168.66.100 mfsmaster.etiantian.org
啓動主服務器 mfs master
echo export PATH=$PATH:/usr/local/mfs/sbin >>/etc/hosts #環境變量設置
/etc/hosts
chown -R mfs:mfs /usr/local/mfs/*
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
/usr/local/mfs/sbin/mfsmaster start
[root@mysql2 mfs]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
中止主服務器 mfs master
安全的中止master server 是很是必要的,必定不要用kill -9 。可使用mfsmaster -s 或mfsmaster stop
來安全中止master進程,固然一旦用了kill也是有解決方法的,如經過mfsmetastore 修復
常常才查看系統日誌(tail -f /var/log/messages 查看mfs健康狀態
加入開機自啓動配置
echo "#startup master" >> /etc/rc.local
echo "/usr/local/mfs/sbin/mfsmaster start " >>/etc/rc.local
開啓主服務器mfs master 的圖形監控
主服務器mfs master 的圖形監控就是mfscgiserv,這是一個用python編寫的一個web服務器,它監聽端口9425
,能夠利用: /usr/local/mfs/sbin/mfscgiserv start 來啓動,啓動後,咱們經過瀏覽器,便可比較全面的
master,backup,以及全部客戶端掛接狀態信息及相關操做等待。
[root@mysql2 network-scripts]# /usr/local/mfs/sbin/mfscgiserv start
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)
192.168.66.100:9425 進行訪問
二.安裝與配置備份服務器 Backup(metalogger)
mfs主服務器的備份服務器,也被稱爲Back server 或metalogger server ,即備份服務器
備份服務器的安裝和主服務器master的安裝徹底相同,只是配置文件有區別。安裝步驟以下:
1.下載mfs
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-1.tar.gz
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 建立mfs用戶和組
useradd mfs -s /sbin/nologin
3.安裝mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
配置備份服務器
備份服務器Backup server 的配置文件爲:
cp /usr/local/mfs/etc/mfsmetalogger.cfg.dist /usr/local/mfs/etc/mfsmetalogger.cfg
cat /usr/local/mfs/etc/mfsmetalogger.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# META_DOWNLOAD_FREQ = 24 #元數據備份文件下載請求,默認24小時,每隔一天從元數據服務器,下載一個metadata,mfs.bak
.當元數據服務器關閉或者故障,metedata.mfs.bak文件將消失,那麼要恢復整個mfs,則需從metalogger服務器取得該文件,請特別注意
這個文件,它與日誌文件一塊兒,纔可以恢復整個被破壞的分佈式文件系統
# MASTER_RECONNECTION_DELAY = 5
# MASTER_HOST = mfsmaster.etiantian.org #這裏是須要鏈接的mfs master 的主機IP或者域名
# MASTER_PORT = 9419 #這裏是須要鏈接的mfs master 的port
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
啓動備份服務器:
/usr/local/mfs/sbin/mfsmetalogger start
[root@www etc]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
關閉備份服務器
echo export PATH=$PATH:/usr/local/mfs/sbin >>/etc/hosts #環境變量設置
source /etc/hosts
mfsmetalogger stop
開機自啓動
echo "#start mfsmetalogger " >>/etc/rc.local
echo "/usr/local/mfs/sbin/mfsmetalogger start" >>/etc/rc.local
三. 安裝數據庫服務器 data servers
data server 也稱爲chunk server ,在這裏爲了方便理解稱之爲data server
數據庫服務器的安裝和主服務器master 的安裝徹底相同,只是配置文件區別。
1.下載mfs
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-1.tar.gz
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 建立mfs用戶和組
useradd mfs -s /sbin/nologin
3.安裝mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #配置mfs
make && make install
ln -s /usr/local/mfs /usr/local/mfs-1.6.20
配置數據服務器 data servers
配置數據服務器 data servers ,須要兩個配置文件mfschunkserver.cfg和 mfshdd.cfg 其中
-rw-r--r-- 1 root root 527 Feb 1 01:37 mfschunkserver.cfg #主配置文件
-rw-r--r-- 1 root root 57 Feb 1 01:37 mfshdd.cfg #服務器用來分配給MFS使用空間的配置文件
最好是一個單獨的硬盤或者一個raid卷,最低要求是一個分區
配置mfschunkserver.cfg 主配置文件
cp /usr/local/mfs/etc/mfschunkserver.cfg.dist /usr/local/mfs/etc/mfschunkserver.cfg
cp /usr/local/mfs/etc/mfshdd.cfg.dist /usr/local/mfs/etc/mfshdd.cfg
cat -n /usr/local/mfs/etc/mfschunkserver.cfg
1# WORKING_USER = mfs
2# WORKING_GROUP = mfs
3 SYSLOG_IDENT = mfsmaster.etiantian.org #指定主機
4# LOCK_MEMORY = 0
5# NICE_LEVEL = -19
6
7# DATA_PATH = /usr/local/mfs/var/mfs
8
9# MASTER_RECONNECTION_DELAY = 5
10
11# BIND_HOST = *
12# MASTER_HOST = mfsmaster
13# MASTER_PORT = 9420
14
15# MASTER_TIMEOUT = 60
16
17# CSSERV_LISTEN_HOST = *
18# CSSERV_LISTEN_PORT = 9422 #監聽端口用於與其餘數據存儲服務器間鏈接,一般是數據複製
19
20# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
21# HDD_TEST_FREQ = 10
22
23# deprecated, to be removed in MooseFS 1.7
24# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
25# BACK_LOGS = 50
26# CSSERV_TIMEOUT = 5
echo 192.168.66.100 mfsmaster.etiantian.org >>/etc/hosts
配置mfshdd.cfg 主配置文件
[root@mysql1 etc]# cat mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
配置磁盤分區
/dev/sda5 新添加的分區並格式化
[root@mysql1 etc]# LANG=en #調整英文字符集
[root@mysql1 etc]# /etc/init.d/kudzu start
Checking for hardware changes [ OK ]
[root@mysql1 etc]# mkdir /mnt/mfs 建立掛載點並掛載測試
[root@mysql1 etc]# mkdir /mfsdata #存放數據文件
chown -R mfs.mfs /mfsdata
mount /dev/sda5 /mnt/mfsdata
vim /etc/fstab
添加/dev/sda5 /mfsdata ext3 defaults 0 0
echo "/mfsdata " >mfshdd.cfg #添加共享目錄掛載點
啓動數據服務器data servers
echo export PATH=$PATH:/usr/local/mfs/sbin >> /etc/profile
source /etc/profile
/usr/local/mfs/sbin/mfschunkserver start 啓動服務
[root@mysql1 etc]# chown -R mfs:mfs /mfsdata/
[root@mysql1 etc]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: scanning folder /mfsdata/ ...
hdd space manager: scanning complete
hdd space manager: /mfsdata/: 0 chunks found
hdd space manager: scanning complete
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
檢查是否啓動:
[root@mysql1 etc]# netstat -tunlp |grep 9422
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 10261/mfschunkserve
配置開機啓動
echo "#mfs data server " >>/etc/rc.local
echo " /usr/local/mfs/sbin/mfschunkserver start" >>/etc/rc.local
若是資源不夠用能夠用3-4臺虛擬機
1 master and data 01
2. backup and data 02
3. client and data 03 (安裝特殊)
打開瀏覽器查看:
四. 安裝配置客戶端服務器(client server)
安裝客戶端服務器
因爲mfs文件系統客戶端的掛載依賴於fuse工具,因此要先安裝fuse工具
查看內核支持狀況
[root@mysql1 etc]# modprobe fuse
[root@mysql1 etc]# lsmod |grep fuse
fuse 49237 0
若是內核不支持fuse 客戶嘗試一下安裝
wget http://nchc.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
make && make install
安裝mfs
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-1.tar.gz
tar -zxvf mfs-1.6.27-1.tar.gz
cd mfs-1.6.20
2. 建立mfs用戶和組
useradd mfs -s /sbin/nologin
3.安裝mfs
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount #配置mfs
make && make install
編譯報錯解決:
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for FUSE... no
configure: error: mfsmount build was forced, but fuse library is too old or not installed
[root@mysql1 mfs-1.6.20]# echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >>/etc/profile
[root@mysql1 mfs-1.6.20]# source /etc/profile
設置環境變量:
echo export PATH=$PATH:/usr/local/mfs/bin >>/etc/profile
source /etc/profile
從客戶端上掛載mfs文件系統
1.建立數據目錄掛載點
mkdir /mnt/mfs -p
chown -R mfs.mfs /mnt/mfs
2.加載fuse模塊到內核
lsmod |grep fuse
modprobe fuse
lsmod |grep fuse
設置模塊開機自啓動:
①.echo "modprobe fuse " >/etc/sysconfig/modules/fuse.modules
echo 755 /etc/sysconfig/modules/fuse.modules
②.echo "modprobe fuse" >>/etc/rc.modules
chmod 755 /etc/rc.modules
3.掛載mfs文件系統
root@mysql1 ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H mfsmaster.etiantian.org -p
MFS Password: #服務器密碼123輸入便可
mfsmaster accepted connection with parameters: read-write,restricted_ip,map_all ; root mapped to 4889:4889 ; users mapped to 4889:4889
[root@mysql1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 7.5G 6.6G 520M 93% /
/dev/sda1 289M 27M 248M 10% /boot
tmpfs 252M 0 252M 0% /dev/shm
/dev/sda5 2.0G 37M 1.9G 2% /mfsdata
mfs#mfsmaster.etiantian.org:9421
1.6G 0 1.6G 0% /mnt/mfs
[root@mysql1 ~]#
報錯解決:
[root@mysql1 ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H mfsmaster.etiantian.org
/usr/local/mfs/bin/mfsmount: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
{root@mysql1 ~]# ln -s /usr/local/lib/libfuse.so.2 /lib/
[root@mysql1 ~]# ln -s /usr/local/lib/libfuse.so.2 /var/lib/
打開瀏覽器查看:
python