部署Ceph分佈式存儲,實現如下效果:
使用三臺服務器部署Ceph分佈式存儲
實現Ceph文件系統共享
將網站數據從NFS遷移到Ceph存儲
2.2 方案
實驗拓撲如圖-2所示,做具體實驗前請先配置好環境。
圖-2
備註:實際操作中DNS服務代理服務器部署在同一臺主機上(節約虛擬機資源)。
主機配置如表-2所示。
表-2
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:準備實驗環境
1)物理機爲所有節點配置yum源服務器。
提示:ceph10.iso在/linux-soft/02目錄。
[root@room9pc01 ~]# mkdir /var/ftp/ceph
[root@room9pc01 ~]# mount ceph10.iso /var/ftp/ceph/
2)在node1配置SSH密鑰,讓node1可用無密碼連接node1,node2,node3
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@node1 ~]# for i in 41 42 43
do
ssh-copy-id 192.168.2.$i
done
3)修改/etc/hosts域名解析記錄(不要刪除原有的數據),同步給所有ceph節點。
[root@node1 ~]# vim /etc/hosts
192.168.2.41 node1
192.168.2.42 node2
192.168.2.43 node3
[root@node1 ~]# for i in 41 42 43
do
scp /etc/hosts 192.168.2.$i:/etc
done
4)爲所有ceph節點配置yum源,並將配置同步給所有節點
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.2.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.2.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.2.254/ceph/Tools
gpgcheck=0
[root@node1 ~]# yum repolist #驗證YUM源軟件數量
源標識 源名稱 狀態
Dvd redhat 9,911
Mon mon 41
Osd osd 28
Tools tools 33
repolist: 10,013
[root@node1 ~]# for i in 41 42 43
do
scp /etc/yum.repos.d/ceph.repo 192.168.2.$i:/etc/yum.repos.d/
done
5)所有節點主機與真實主機的NTP服務器同步時間。
提示:默認真實物理機已經配置爲NTP服務器。
[root@node1 ~]# vim /etc/chrony.conf
… …
server 192.168.2.254 iburst
[root@node1 ~]# for i in 41 42 43
do
scp /etc/chrony.conf 192.168.2.$i:/etc/
ssh 192.168.2.$i "systemctl restart chronyd"
done
6)使用virt-manager爲三臺ceph虛擬機添加磁盤。
每臺虛擬機添加3塊20G的磁盤。
步驟二:部署ceph集羣
1)給node1主機安裝ceph-deploy,創建工作目錄,初始化配置文件。
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
2)給所有ceph節點安裝ceph相關軟件包
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i "yum -y install ceph-mon ceph-osd ceph-mds"
done
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
[root@node1 ceph-cluster]# ceph -s #查看結果
cluster 9f3e04b8-7dbb-43da-abe6-b9e3f5e46d2e
health HEALTH_ERR
monmap e2: 3 mons at
{node1=192.168.2.41:6789/0,node2=192.168.2.42:6789/0,node3=192.168.2.43:6789/0}
osdmap e45: 0 osds: 0 up, 0 in
3)準備磁盤分區,創建journal盤,並永久修改設備權限。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i "parted /dev/vdb mklabel gpt"
ssh $i "parted /dev/vdb mkpart primary 1 50%"
ssh $i "parted /dev/vdb mkpart primary 50% 100%"
done
提示:下面的步驟在所有主機都需要操作(node1,node2,node3)
#臨時修改權限:
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb2
#永久修改權限:
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-vdb.rules
ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/vdb2",OWNER="ceph",GROUP="ceph"
4)使用ceph-deploy工具初始化數據磁盤(僅node1操作)。
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd
5)初始化OSD集羣。
[root@node1 ceph-cluster]# ceph-deploy osd create \
node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
//創建osd存儲設備,vdc爲集羣提供存儲空間,vdb1提供JOURNAL緩存,
//一個存儲設備對應一個緩存設備,緩存需要SSD,不需要很大
[root@node1 ceph-cluster]# ceph-deploy osd create \
node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph-deploy osd create \
node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph -s #查看集羣狀態
cluster 9f3e04b8-7dbb-43da-abe6-b9e3f5e46d2e
health HEALTH_OK
monmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}
election epoch 6, quorum 0,1,2 node1,node2,node3
osdmap e45: 6 osds: 6 up, 6 in
flags sortbitwise
pgmap v25712: 64 pgs, 1 pools, 86465 kB data, 2612 objects
508 MB used, 119 GB / 119 GB avail
64 active+clean
步驟三:部署ceph文件系統
1)啓動mds服務
[root@node1 ceph-cluster]# ceph-deploy mds create node3
2)創建存儲池(文件系統由inode和block組成)
[root@node1 ceph-cluster]# ceph osd pool create cephfs_data 128
[root@node1 ceph-cluster]# ceph osd pool create cephfs_metadata 128
[root@node1 ceph-cluster]# ceph osd lspools
0 rbd,1 cephfs_data,2 cephfs_metadata
3)創建文件系統
[root@node1 ceph-cluster]# ceph fs new myfs1 cephfs_metadata cephfs_data
[root@node1 ceph-cluster]# ceph fs ls
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
步驟四:遷移網站數據到ceph集羣
1)卸載web1,web2,web3的NFS共享。
暫停服務防止有人實時讀寫文件。
[root@web1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web2 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web3 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@web1 ~]# umount /usr/local/nginx/html
[root@web2 ~]# umount /usr/local/nginx/html
[root@web3 ~]# umount /usr/local/nginx/html
[root@web1 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
[root@web2 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
[root@web3 ~]# vim /etc/fstab
#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0
2)web服務器永久掛載Ceph文件系統(web1、web2、web3都需要操作)。
在任意ceph節點,如node1查看ceph賬戶與密碼。
[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
/etc/rc.local是開機啓動腳本,任何命令放在該文件中都是開機自啓。
[root@web1 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
[root@web1 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local
[root@web1 ~]# chmod +x /etc/rc.local
[root@web2 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
[root@web2 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local
[root@web2 ~]# chmod +x /etc/rc.local
[root@web3 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
[root@web3 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local
[root@web3 ~]# chmod +x /etc/rc.local
另一種解決方案,還可以通過fstab實現永久掛載。
提示:如果希望使用fstab實現永久掛載,客戶端需要額外安裝libcephfs1軟件包。
[root@web1 ~]# yum -y install libcephfs1
[root@web1 ~]# vim /etc/fstab
… …
192.168.4.11:/ /usr/local/nginx/html/ ceph defaults,_netdev,name=admin,secret=AQCVcu9cWXkgKhAAWSa7qCFnFVbNCTB2DwGIOA== 0 0
3)遷移NFS服務器中的數據到Ceph存儲
登陸NFS服務器備份數據,將備份數據拷貝給web1或web2或web3,tar備份數據時注意使用-f選項保留文件權限。
[root@nfs ~]# cd /web_share/html/
[root@nfs html]# tar -czpf /root/html.tar.gz ./*
[root@nfs html]# scp /root/html.tar.gz 192.168.2.11:/usr/local/nginx/html/
登陸web1將數據恢復到Ceph共享目錄
[root@web1 html]# tar -xf html.tar.gz
[root@web1 html]# rm -rf html.tar.gz
4)恢復web服務
[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web2 ~]# /usr/local/nginx/sbin/nginx
[root@web3 ~]# /usr/local/nginx/sbin/nginx