GlusterFS 開發環境建置

0. download

Ubuntu Server 14.04.1 LTS
Oracle VirtualBox 4.3.20

 
 
 

1. create VMs

建立六部Ubuntu Server 14.04.1 LTS虛擬機
 
(簡化過程, 每台VM的密碼都統一設定成)

  • Ubuntu 用戶名稱: m
  • Ubuntu 用戶密碼: 111111
  • MySQL 用戶名稱: root
  • MySQL 用戶密碼: 111111

 

第一部虛擬機名稱為m
硬碟空間配置:8GB 記憶體配置:512MB 網路卡配置:NAT網路 音效配置:請取消
第二部虛擬機名稱為n1
硬碟空間配置:8GB 記憶體配置:256MB 網路卡配置:NAT網路 音效配置:請取消
第三部虛擬機名稱為n2
硬碟空間配置:8GB 記憶體配置:256MB 網路卡配置:NAT網路 音效配置:請取消
第四部虛擬機名稱為n3
硬碟空間配置:8GB 記憶體配置:256MB 網路卡配置:NAT網路 音效配置:請取消
第五部虛擬機名稱為n4
硬碟空間配置:8GB 記憶體配置:256MB 網路卡配置:NAT網路 音效配置:請取消
第六部虛擬機名稱為c
硬碟空間配置:8GB 記憶體配置:256MB 網路卡配置:NAT網路 音效配置:請取消

Note: 建好VM之後, 可以先不用更改網路卡配置, 進行系統更新和安裝一些套件之後再更改設定

 
掛載Ubuntu Server 14.04.1 LTS

  • OpenSSH server
  • LAMP server
  • Samba file server

 
 
 

2. upgrade, update, installing software

Ubuntu系統檢查、更新、安裝工具套件

date
 
sudo su
apt-get upgrade
apt-get update
 
apt-get install nmap
apt-get install fping
apt-get install dstat

 
安裝GlusterFS套件
apt-get install glusterfs-server // m, n1, n2, n3, n4
 
apt-get install glusterfs-client // c

 
 
 

3. network configuration

更改六部VM的網路組態

vim /etc/hosts
127.0.0.1         localhost
192.168.168.6     m.glusterlab     m
192.168.168.5     c.glusterlab     c
192.168.168.11    n1.glusterlab    n1
192.168.168.12    n2.glusterlab    n2
192.168.168.13    n3.glusterlab    n3
192.168.168.14    n4.glusterlab    n4

 
改成固定IP
vim /etc/network/interfaces
# The primary network interface
auto eth0
iface eth0 inet static    // dhcp -> static
address 192.168.168.x     // IP you want
netmask 255.255.255.0
gateway 192.168.168.2     // 預設結尾為.2

 
VM網路卡配置: NAT網路
// 網路 CIDR
192.168.168.0/24

 
重啟網路服務
/etc/init.d/networking restart

 
測試網路是否設定成功
ping 8.8.8.8
ping 168.95.1.1

 
 
 

4. Managing the glusterd Service

- Starting and Stopping glusterd Manually

/etc/init.d/glusterd start
/etc/init.d/glusterd stop

or (build from source)
service glusterd start
service glusterd stop

 
- check status
service gluster status

 
- Starting glusterd Automatically
// Debian-based Systems
update-rc.d glusterd defaults

Note: You must start glusterd on all GlusterFS servers

 
 
 

5. Setting up GlusterFS Server Volumes

- Adding Servers to Trusted Storage Pool

gluster peer probe <SERVER>
  • The hostnames used to create the storage pool must be resolvable by DNS
  • Also make sure that firewall is not blocking the probe requests/replies

Note: Do not self-probe the first server/localhost.

Note: 各個server的GlusterFS版本必須一致

 
- Verify the peer status

gluster peer status

 
- Removing Servers from the Trusted Storage Pool
gluster peer detach <SERVER>

 
- Create a new volume
gluster volume create [stripe | replica | disperse] [transport tcp | rdma | tcp,rdma]

 
- Start a volume
gluster volume start

 
 

5.1 creating Distributed Volumes

目標: 建立Distributed Volumes
叢集成員: m、n1、n2
卷冊名稱: dis-vol

// 檢查glusterfs-server服務,是否有正確啟動
// 檢查m、n1、n2網路連接狀態
service glusterfs-server status
fping n1 n2
 
gluster peer status    // 檢查gluster叢集狀態
gluster peer probe n1  // 將n1加入gluster叢集成員
gluster peer probe n2  // 將n2加入gluster叢集成員
gluster peer status    // 再次檢查gluster叢集狀態,確認n1、n2節點伺服器已加入
 
gluster volume info    // 檢查Volume狀態
gluster volume create dis-vol transport tcp n1:/dis-vol n2:/dis-vol    // 建立dis-vol卷冊
gluster volume start dis-vol    // 啟用dis-vol卷冊
gluster volume info    // 再次檢視Volume狀態,檢視Volume訊息

跳到 6.1 Manually Mounting Volumes
利用c 試試看如何 mount distributed volumes

建議將server硬碟分成兩個, 系統&儲存, 在儲存槽建立volume

5.2 creating Replicated Volumes

目標: 建立Replicated Volumes
叢集成員: m、n3、n4
卷冊名稱: rep-vol

service glusterfs-server status
fping n3 n4
 
gluster peer status
gluster peer probe n3
gluster peer probe n4
gluster peer status
 
gluster volume info
gluster volume create rep-vol replica 2 n3:/rep-vol n4:/rep-vol    // 建立rep-vol卷冊
gluster volume start rep-vol    // 啟用rep-vol卷冊
gluster volume info

跳到 6.1 Manually Mounting Volumes
利用c 試試看如何 mount replicated volumes

5.3 creating Striped Volumes

目標: 建立Striped Volumes
叢集成員: m、n1、n2
卷冊名稱: rep-vol

service glusterfs-server status
fping n1 n2
 
gluster peer status
gluster peer probe n1
gluster peer probe n2
gluster peer status
 
gluster volume info
gluster volume create str-vol stripe 2 transport tcp n1:/str-vol n2:/str-vol    // 建立str-vol卷冊
gluster volume start str-vol    // 啟用str-vol卷冊
gluster volume info

5.4 creating Distributed Striped Volumes

TBD

5.5 creating Distributed Replicated Volumes

目標: 建立Distributed Replicated Volumes
叢集成員: m、n1、n2、n3、n4
卷冊名稱: dr-vol

service glusterfs-server status
fping n1 n2 n3 n4
 
gluster peer status
gluster peer probe n1
gluster peer probe n2
gluster peer probe n3
gluster peer probe n4
gluster peer status
 
gluster volume info
// 建立dr-vol卷冊
gluster volume create dr-vol replica 2 transport tcp n1:/dr-vol n2:/dr-vol n3:/dr-vol n4:/dr-vol
gluster volume start dr-vol    // 啟用dr-vol卷冊
gluster volume info

跳到 附錄三
檢測看看 Distributed-Replicated 的機制

5.6 creating Distributed Striped Replicated Volumes

TBD

5.7 creating Striped Replicated Volumes

TBD
 
 
 

6. Accessing Data - Setting Up GlusterFS Client

6.1 Manually Mounting Volumes

mounting Distributed Volumes

目標: 掛載Distributed Volumes
卷冊名稱: dis-vol
 
利用c這部虛擬機擔任client的角色,將dis-vol卷冊掛載上來使用
 

 // 檢查m、n1、n2網路連接狀態
fping m n1 n2
 
// 在mnt目錄下,建立一個目錄以便進行mount
mkdir /mnt/mydisvol
 
// 掛載卷冊dis-vol,成為本地端目錄
mount.glusterfs m:/dis-vol /mnt/mydisvol
 
mount    // 確認dis-vol卷冊已掛載成功
df -h    // 檢視/mnt/mydisvol可用空間
 
// Testing: create files
cd /mnt/mydisvol
touch Files{1..10}

another mount command:
# mount -t glusterfs m:/dis-vol /mnt/mydisvol

 
至n1、n2節點伺服器上檢查,10個檔案分布的狀況

cd /dis-vol
ls
ls | wc -l

n1節點伺服器上檔案數量為8個
n2節點伺服器上檔案數量為2個

mounting Replicated Volumes

目標: 掛載Replicated Volumes(複製式卷冊)
卷冊名稱: rep-vol
 
利用c這部虛擬機擔任client的角色,將rep-vol卷冊掛載上來使用
 

fping m n3 n4
 
mkdir /mnt/myrepvol
 
mount.glusterfs m:/rep-vol /mnt/myrepvol
 
mount
df -h
 
cd /mnt/myrepvol
touch Files{1..20}

 
至n3、n4節點伺服器上檢查,20個檔案分布的狀況
cd /dis-vol
ls
ls | wc -l

n3節點伺服器上檔案數量為20個
n4節點伺服器上檔案數量為20個

6.2 Automatically Mounting Volumes

有興趣自行看手冊

另外還有透過 NFS 和 CIFS mounting

也是分成手動/自動 兩種方式去操作
 
 
 

7. Managing GlusterFS Volumes

7.1 Tuning Volume Options

Tune volume options using the following command:
#gluster volume set <VOLNAME> <OPTION> <PARAMETER>

// 將指定的卷冊加上快取記憶體
gluster volume set test-vol performance.cache-size 256MB
gluster volume info
// 允許可存取Gluster叢集儲存池的網路位置,單一IP位置
gluster volume set test-vol auth.allow 10.10.10.1
// 允許可存取Gluster叢集儲存池的網路位置,某個網段
gluster volume set dr-vol auth.allow 10.10.10.*
// 允許可存取Gluster叢集儲存池的網路位置,例如多個網段
gluster volume set dr-vol auth.allow 10.* 192.168.1.*
// 允許可存取Gluster叢集儲存池的網路位置,開放任意個網段
gluster volume set dr-vol auth.allow *
// 拒絕可存取Gluster叢集儲存池的網路位置,,單一IP位置
gluster volume set dr-vol auth.reject 192.168.1.123

其他 option 有興趣請翻手冊

7.2 Expanding Volumes

# gluster peer probe <HOSTNAME>
# gluster volume add-brick <VOLNAME> <NEW-BRICK>
# gluster volume info

7.3 Shrinking Volumes

# gluster volume remove-brick <VOLNAME> <BRICK> start
 
// (optional)
# gluster volume remove-brick <VOLNAME> <BRICK> status
 
# gluster volume remove-brick <VOLNAME> <BRICK> commit
 
# gluster volume info

7.4 Migrating Volumes

# gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> start
# gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> status
# gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> commit
# gluster volume info <VOLNAME>
 
// if needed
# gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> pause
 
// to abort
# gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> abort

7.5 Rebalancing Volumes

TBD

7.6 Stopping Volumes

# gluster volume stop <VOLNAME>

7.7 Deleting Volumes

# gluster volume delete <VOLNAME>

7.8 Triggering Self-Heal on Replicate

TBD
 
 
 

附錄一 - 常用指令列表

Glusterfs Commands

- To run commands directly:

gluster peer <COMMAND>
// Example: gluster peer status

- To run the Gluster Console Manager in interactive mode

gluster
// 少打一點字的概念

- to check all the supported CLI commands

gluster help

附錄二 - 名詞解釋

Glossary

附錄三 - 練習

Distributed-Replicated 模式
能夠容許伺服器故障嗎?
那到底可以容許幾部伺服器同時故障?


切換到 c

首先先mount d-r vol

mkdir /mnt/dr-vol
mount.glusterfs m:/dr-vol /mnt/dr-vol/

產生 10 個檔案, 觀察檔案分布情況

// Testing: create files
cd /mnt/mydisvol
touch Files{1..10}

所以我們可看出n1與n2是一個複寫群組,
而n3與n4則是另一個複寫群組,現在來測試一下~~

STEP.1
先將n1關機,再來檢視m虛擬機上已掛載的dr-vol,能否正常存取。
說明:
先登入m虛擬機確認dr-vol已掛載成功,再將n11伺服器關機,
接著於m虛擬機在已掛載的dr-vol目錄下編輯檔案,是可以正常存取檔案的,
並再使用touch命令產生a開頭的檔案20個,最後再將n11伺服器再次開機,確認檔案是有複寫成功的。

STEP.2
這次將n1與n3關機,再來檢視m虛擬機上已掛載的dr-vol,能否正常存取。
說明:
先登入m虛擬機使用gluster peer status確認叢集狀態,再將n1與n3伺服器關機,
接著於m虛擬機將dr-vol掛載後並在目錄下編輯檔案,是可以正常存取檔案的,
最後再將n1、n3伺服器再次開機,並再使用touch命令產生b開頭的檔案5個,
並檢視n1~n4伺服器確認檔案是有複寫成功的。

附錄四 - 問題

§ peer probe: failed: Error through RPC layer, retry again later

各個server間的GlusterFS版本有所差異所造成

§ Mount failed. Please check the log file for more details. (in /var/log/glusterfs/)

可能是server authenication failed (代表你的clint無法被verify啦)

§ 版本差異問題

只存在於server之間的GlusterFS版本不同可能導致無法probe

client的版本跟server不同, 照樣可以爽爽mount
而且不需要做任何事(包括加入server的/etc/hosts)
server可以利用auto.allow/auth.reject管理可存取的IP位址
新功能 SSL/TLS 目前還在研究中

§ 其他: Ubuntu

"no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory"
fix: run "pam-auth-update" and remove "SMB password synchronization".

除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-ShareAlike 3.0 License