在linux Ubuntu16上搭建ceph分散式檔案系統(四節點)實測有效!
特別注意:如果命令直接複製粘貼出現錯誤,則手動輸入可解決
參考教程:
第一步~~~.準備 4個Ubuntu 16.04 Server 虛擬機器(可以使用VMware或者VirtualBox)
配置好每個虛擬機器的IP 以及hostname (很重要!)
我的四臺虛擬機器配置如下:(ip根據個人的網路環境配置,記得虛擬機器網路選擇橋接模式)
①虛擬機器1 :
hostname:ceph ;
IP :192.168.93.146(使用者名稱root1(199077));
這臺虛擬機器對應下圖admin-node節點 用來安裝ceph-deploy ,進行ceph部署使用,基本上大部分操作都在這臺機器上。
②虛擬機器2:
hostname:ceph1 ;
IP :192.168.93.145(使用者名稱root2(199077));
這臺虛擬機器對應下圖node1節點,用來安裝monitor監控節點.
③虛擬機器3:
hostname:ceph2 ;
IP :192.168.93.142(使用者名稱root3(199077));
這臺虛擬機器對應下圖node2節點,用來安裝osd節點1。
④虛擬機器4:
hostname:ceph3 ;
IP :192.168.93.143(使用者名稱root4(199077));
這臺虛擬機器對應下圖node3節點,用來安裝osd節點2 .
配置好後ping www.baidu.com 看是否可以上網。
特別注意的是:再開始配置叢集之前,要關閉各個節點上的防火牆:sudo ufw disable。
第二步~~~.在虛擬機器1上也就是ceph(hostname是ceph)上執行以下三個命令安裝cephdeploy:
(1)新增 release key :
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt install ceph-deploy
sudo useradd -d /home/cephuser -m cephuser
sudo chmod 0440 /etc/sudoers.d/cephuser
passwd cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
sudo chmod 0440 /etc/sudoers.d/cephuser
ssh-copy-id ceph1
ssh-copy-id ceph2
ssh-copy-id ceph3
osd pool default size = 2
sudo service ceph restart ceph-mon
1. ceph-deploy mon create-initial
1. ceph-deploy osd prepare ceph2:/var/local/osd0 ceph3:/var/local/osd1
具體說明,以掛載/dev/sdb1為例:
<fs spec> :
分割槽定位,可以給UUID或LABEL,例如:UUID=6E9ADAC29ADA85CD或LABEL=software
<fs file> : 具體掛載點的位置,例如:/data
<fs vfstype> : 掛載磁碟型別,linux分割槽一般為ext4,windows分割槽一般為ntfs
<fs mntops> : 掛載引數,一般為defaults
<fs freq> : 磁碟檢查,預設為0
<fs passno> : 磁碟檢查,預設為0,不需要檢查
(2)新增Ceph軟體包源,用Ceph穩定版
(3)更新你的倉庫,並安裝 ceph-deploy :
sudo apt update
第三步~~~.在四臺虛擬機器上都安裝ntp與openssh-server ,實現時間同步以及ceph 節點ssh訪問ceph1 ceph2 ceph3節點,用cephuser使用者。
四臺虛擬機器上都執行以下2個命令:
sudo apt-get install ntp
sudo apt-get install openssh-server
第四步~~~.在ceph ceph1 ceph2 ceph3 虛擬機器上新建一個使用者 (我在4臺虛擬機器上全是新建的cephuser使用者,以後四臺機器上的所有操作均在該使用者下執行。直到整個配置過程結束!!)該使用者具有sudo許可權。
在4臺機器上均執行:
passwd cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
或者執行:
useradd -m -s /bin/bash cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
也可以在虛擬機器ceph上使用ssh連結ceph1 ceph2 ceph3虛擬機器後再各自建立cephuser使用者。
首先在虛擬機器ceph裡面配置好hosts:
在虛擬機器ceph上執行:
sudo nano /etc/hosts
在後面新增
192.168.93.146 ceph
192.168.93.145 ceph1
192.168.93.142 ceph2
192.168.93.143 ceph3
在使用虛擬機器ceph ssh連結ceph1 (root2是我建虛擬機器ceph1的時候建立的預設使用者,cephuser是我新建的使用者)
執行:
再執行:
sudo useradd -d /home/cephuser -m cephuser
passwd cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
連結ceph ceph2 ceph3 執行類似操作!
第五步~~~.在ceph虛擬機器生成ssh-keygen 並複製到ceph1 ceph2 ceph3 節點上,實現ceph無密碼訪問其餘節點。
在ceph上執行:(執行ssh-keygen後全部按回車鍵)
1. ssh-keygen
2. (全按回車鍵,預設)
修改 ~/.ssh/config
1. sudo nano ~/.ssh/config
在config裡面加上:
Host ceph
Hostname ceph
User cephuser
Host ceph1
Hostname ceph1
User cephuser
Host ceph2
Hostname ceph2
User cephuser
Host ceph3
Hostname ceph3
User cephuser
然後,將配置檔案的許可權更改為644。
chmod 644 ~/.ssh/config
現在使用ssh-copy-id命令將金鑰新增到所有節點。
ssh-keyscan ceph1 ceph2 ceph3 >> ~/.ssh/known_hosts
現在就可以在主節點ceph通過如下命令無密碼訪問其餘節點,如:
ssh ceph1
因為我們用的是cephuser使用者,而非root使用者,所以執行上述ssh-copy-id 命令可能出現錯誤,可嘗試執行如下命令:
1. ssh-copy-id [email protected]
2. ssh-copy-id [email protected]
3. ssh-copy-id [email protected]
第六步~~~. 在ceph(admin節點) 建立my-cluster 目錄並進入
1. mkdir my-cluster
2. cd my-cluster
(注意下面所有的操作都在此目錄下執行,直到整個配置過程結束,有些配置檔案會生成在裡面)
執行:
ceph-deploy new ceph1
會在my-cluster下生成三個檔案
Ceph configuration file, a monitor secret keyring, and a log file
修改Ceph configuration file檔案
sudo nano ceph.conf
並在後面加上 第一個引數2是副本數量,第二個2000是 日誌大小約為2G
osd journal size = 2000
Public Network = 192.168.93.140/150
Cluster Network = 192.168.93.140/150
第七步~~~.在ceph,ceph1 ,ceph2 ,ceph3 四個節點上安裝ceph
在ceph節點上執行:
ceph-deploy install ceph ceph1 ceph2 ceph3
(可能會報錯,大部分是網路問題,繼續重複執行就是!直到成功為止!可以選擇一個節點一個節點的安裝,即在ceph上分別執行:
ceph-deploy install ceph
ceph-deploy install ceph1
ceph-deploy install ceph2
ceph-deploy install ceph3
執行ceph-deploy install ceph1容易出現錯誤:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
[mon][WARNIN] E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
[mon][ERROR ] RuntimeError: command returned non-zero exit status: 100
[ceph_deploy][ERROR] RuntimeError: Failed to execute command: env DEBIAN_FRONTEND=noninteractive DEBIAN_PRIORITY=critical apt-get --assume-yes -q --no-install-recommends install ca-certificates apt-transport-https
解決辦法:
將監控節點ceph1重啟,然後再在主節點ceph上再次執行ceph-deploy install ceph1
,直到成功。
必須確保四個節點上的ceph開啟成功,在每個節點上執行:
systemctl status ceph.service
檢視ceph是否處於active狀態,不是的話執行:
啟動ceph服務。
第八步~~~.在ceph上執行
如果出現錯誤:
RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
可執行如下命令:
ceph-deploy --overwrite-conf mon create-initial
會在my-cluster目錄下生成四個檔案
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring {cluster-name}.bootstrap-mds.keyring {cluster-name}.bootstrap-rgw.keyring
收集遠端監控節點ceph1上的金鑰到當前資料夾,
ceph-deploy gatherkeys ceph1
第九步~~~.
為了快速安裝,這裡我們使用資料夾形式來新增OSD而不是以硬碟,在ceph2 ceph3節點上建立osd 每個節點建立一個osd檔案目錄
1. ssh ceph2
2. sudo mkdir /var/local/osd0
3. exit
4. ssh ceph3
5. sudo mkdir /var/local/osd1
6. exit
// 因為ceph3上無足夠空間,故改到ceph1:/var/local/osd1
如果osd節點出現錯誤,想要移除叢集,則使用命令: ceph osd crush remove osd.1//osd.1是osd節點名。
第十步~~~. 繼續在ceph上執行:
準備osd 命令:
執行準備命令時,出現錯誤:
ceph-deploy osd: error: argument subcommand: invalid choice: 'prepare' (choose from 'list', 'create')
解決辦法:
重新換一個管理節點,從頭來過。
啟用osd命令:
1. ceph-deploy osd activate ceph2:/var/local/osd0 ceph3:/var/local/osd1
執行啟用命令時,出現錯誤:
RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /var/local/osd0
ERROR: error creating empty object store in /var/local/osd0: (13) Permission denied
解決辦法:在各個osd節點上給/var/local/osd0/和/var/local/osd1/新增許可權
如下:
在ceph2上執行:
sudo chmod 777 /var/local/osd0/
在ceph3上執行:
sudo chmod 777 /var/local/osd1/
執行以下兩條:
1. ceph-deploy admin ceph ceph1 ceph2 ceph3
2. sudo chmod +r /etc/ceph/ceph.client.admin.keyring
第十二步~~~.最後在ceph執行:ceph health 命令,不出意外就會輸出HEALTH_OK ,恭喜你 ceph三節點的叢集安裝成功!
該步容易出現錯誤:
HEALTH_ERR 64 pgs are stuck inactive for more than 300 seconds; 64 pgs stuck inactive; 64 pgs stuck unclean
或者
HEALTH_WARN 64 pgs degraded; 64 pgs stuck degraded; 64 pgs stuck unclean; 64 pgs stuck undersized; 64 pgs undersized
解決辦法:
先關閉各個節點的防火牆:
sudo ufw disable
然後在各個節點的配置檔案/etc/ceph/ceph.conf中加入如下內容:
osd max object name len = 256
osd max object namespace len = 64
第十二步:增加上述四個節點的硬碟空間(4個節點上的操作均相同)
(1)先使用gparted軟體增加硬碟空間。硬碟名稱為:/dev/sda3,大小為20G,
(2)新建資料夾:sudo mkdir /home/sda3
(3)將新建的/dev/sda3硬碟掛載到目錄/home/sda3中:
sudo mount -t ext4 /dev/sda3 /home/sda3
(4) 再將該硬碟設定為開機啟動:
1) 格式化新硬碟:sudo mkfs.ext4 /home/sda3
2) 檢視新硬碟的UUID:sudo blkid ,效果如下:
/dev/sda1: UUID="7aa7388d-277a-42e5-a301-d0d57eb48d4f" TYPE="ext4" PARTUUID="7c2a71eb-01"
/dev/sda3: UUID="49201ae9-d7e0-4b51-9e0c-d9d169cfc374" TYPE="ext4" PARTUUID="7c2a71eb-03"
/dev/sda5: UUID="e01871b9-4ee7-47d9-9066-f8782fe9f241" TYPE="swap" PARTUUID="7c2a71eb-05"
/dev/sr0: UUID="2017-08-01-11-51-33-00" LABEL="Ubuntu 16.04.3 LTS amd64" TYPE="iso9660" PTUUID="0d66cd15" PTTYPE="dos"
3)找到/dev/sda3的UUID,
4)將分割槽資訊寫入/etc/fstab檔案中讓它永久掛載:
Sudo nano /etc/fstab
在該檔案中加入如下內容:
UUID=49201ae9-d7e0-4b51-9e0c-d9d169cfc374 /home/sda3 ext4 defaults 0 1
注:
<fs spec> <fs file> <fs vfstype> <fs mntops> <fs freq> <fs passno>
修改完/etc/fstab檔案後,執行sudo mount -a命令驗證一下配置是否正確。如果配置不正確可能會導致系統無法正常啟動。
5)重啟系統!執行df -h檢視是否掛載成功。
第十三步:在ceph2 ceph3上增加monitor監控節點
第十四步: 分散式檔案系統的掛載