1. 程式人生 > >在linux Ubuntu16上搭建ceph分散式檔案系統(四節點)實測有效!

在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是我新建的使用者) 

執行:

ssh [email protected]

再執行:

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監控節點

第十四步: 分散式檔案系統的掛載