CentOS 7.3 環境下詳細部署安裝分佈式存儲系統Ceph

1、前言linux

     近期公司須要部署一套完整的openstack ha集羣環境,在選擇後端存儲方案上踏入了十字路口。json

通過幾個月的搜索整理與研究,發現網上介紹ceph部署沒一個完整詳細的!因而本身苦戰多日整理了一套完整的ceph分佈式集羣存儲系統解決方案。vim

   關於爲什麼最終選擇ceph,期間也是各類搜索baidu、google。這裏有點感慨;baidu你讓我拿什麼來愛你?因而FQ勢在必行了。後端

   直接正題,乾貨整理以下:方便往後忘記......centos

2、補腦bash

   ceph的介紹這裏就不在重複了,ceph是加州大學聖克魯茲分校的Sage weil攻讀博士時開發的分佈式文件系統。並使用ceph完成了他的論文。ceph最先誕生於2004年,通過多年完善與修復,第一個穩定ceph版本發佈於2012年。感興趣的能夠去看他的介紹 https://en.wikipedia.org/wiki/Sage_Weil
服務器

3、選擇
網絡

   根據業務特性選擇Ceph 、 GlusterFS 、Swift 三款系統來比較,選擇是一件很痛苦的事情!ssh

1. Ceph:tcp

一、支持POSIX接口
二、開源
三、文件被分片,每一個數據塊是一塊對象,對象保存子不一樣的存儲服務器上。
四、冗餘保護多副本
五、由數據的多副本提供高可靠性
六、當節點故障時,自動遷移數據,重現複製副本。
七、易擴展

2. GlusteFS:

一、開源
二、不存在單點故障
三、支持POSIT接口
四、Cluster Translators(GlusterFS集羣存儲的核心)包括AFR、DHT(和Stripe三種類型。
五、冗餘機制:鏡像  數據有鏡像提供可靠性。
六、當節點、硬件、磁盤、網絡發生故障時,系統會自動處理這些故障,管理員不需介入。
七、支持回收站
八、易擴展

3. Swift:

一、開源
二、最終一致性
三、支持POSIT接口
四、當一個集羣硬件環境發生故障時,Swift會回退以提供高利用率的數據訪問。
五、穩定
六、Swift是作對象存儲最佳選擇

結論:根據應用場景須要包含 "塊存儲需求"  綜合選擇Ceph比較合適。(若是場景是對象存儲選擇Swift比較合適)。


4、硬件環境

+-----------+--------------+------+----------+--------+---------------------------+-------------------+--------------+
| Hostname  | IP Address   | Role |   CPU    | Memory | System Disk               | Ceph Storage Disk | Journal Disk |
+-----------+--------------+------+----------+--------+---------------------------+-------------------+--------------+
|  ceph-adm | 192.168.0.59 |  adm |  4 cores |   4GB  | 2*300GB SAS 15.7k(raid 1) | -                 | -            |
| ceph-mon1 | 192.168.0.60 |  mon | 32 cores |  64GB  | 2*600GB SAS 15.7k(raid 1) | -                 | -            |
| ceph-mon2 | 192.168.0.61 |  mon | 32 cores |  64GB  | 2*600GB SAS 15.7k(raid 1) | -                 | -            |
| ceph-mon3 | 192.168.0.62 |  mon | 32 cores |  64GB  | 2*600GB SAS 15.7k(raid 1) | -                 | -            |
| ceph-osd1 | 192.168.0.63 |  osd | 24 cores |  64GB  | 2*240GB SSD (raid 1)      | 10*4TB SAS         | 2*480GB SSD  |
| ceph-osd2 | 192.168.0.64 |  osd | 24 cores |  64GB  | 2*240GB SSD (raid 1)      | 10*4TB SAS         | 2*480GB SSD  |
+-----------+--------------+------+----------+--------+---------------------------+-------------------+--------------+


說明:
Ceph 要求必須是奇數個監控節點,並且最少3個。
    adm 服務器2塊300GB SAS硬盤作成 RAID1,安裝操做系統,用來操做和管理 Ceph;
    mon 服務器2塊600GB SAS硬盤作成 RAID1,安裝操做系統,用來監控 Ceph;
    osd 服務器2塊240GB SSD硬盤作成 RAID1,安裝操做系統.10塊4TB硬盤作Ceph存儲,每一個osd 對應1塊硬盤,

每一個osd 須要1個Journal,因此10塊硬盤須要10個。Journal咱們用2塊480GB SSD 硬盤作journal,每一個SSD等分紅5個區,這樣每一個區分別對應一個 osd 硬盤的 journal。

5、軟件環境

 operating system:CentOS-7-x86_64-1611

        ceph:Jewel版本


6、基本配置(1-6所有節點配置

1. 禁用selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
reboot

2. 時間同步
yum -y install ntp ntpdate vim  wget
vim /etc/ntp.conf

server 192.168.0.20 iburst
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

systemctl stop ntpd
ntpdate 192.168.0.20
hwclock -w
systemctl restart ntpd
ntpq -p

注:192.168.0.20 是本地搭建ntp服務器,後面我會把搭建ntp服務器詳細日記呈現出來。

3. 修改hostname
vim /etc/hosts

192.168.0.59  ceph-adm
192.168.0.60  ceph-mon1
192.168.0.61  ceph-mon2
192.168.0.62  ceph-mon3
192.168.0.63  ceph-osd1
192.168.0.64  ceph-osd2
4. 安裝配置Firewalld (默認系統沒安裝firewalld)
yum -y install firewalld firewall-config
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --zone=public --add-port=6789/tcp --permanent
firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all
5. 準備ceph源
yum clean all
rm -rf /etc/yum.repos.d/*.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
vim /etc/yum.repos.d/ceph.repo

[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
6. 更新系統
yum update -y
reboot
7. 無密碼訪問(在ceph-adm上配置)
ssh-keygen
ssh-copy-id root@ceph-mon1
ssh-copy-id root@ceph-mon2
ssh-copy-id root@ceph-mon3
ssh-copy-id root@ceph-osd1
ssh-copy-id root@ceph-osd2

7、配置Ceph集羣(在ceph-adm上操做1-6)

1. 安裝ceph-deploy
yum -y install ceph-deploy
2. 建立ceph工做目錄
mkdir /etc/ceph
cd /etc/ceph
3. 初始化集羣,讓ceph-deploy判斷哪些節點是監控節點。
ceph-deploy new ceph-mon1 ceph-mon2 ceph-mon3
4. 在每個ceph節點都安裝ceph二進制軟件包
ceph-deploy install --no-adjust-repos  ceph-adm ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
5. 修改ceph配置文件,在ceph.conf文件下添加 public network = 192.168.0.0/24
cat ceph.conf
[global]
fsid = 1017c790-f1f0-497e-9935-7c726f56396d
mon_initial_members = ceph-mon1, ceph-mon2, ceph-mon3
mon_host = 192.168.0.60,192.168.0.61,192.168.0.62
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.0.0/24


6. 建立第一個監控節點
ceph-deploy mon create-initial
7. 在ceph-osd一、cephosd2查看2個osd硬盤信息(模擬實驗選擇10塊SAS 100G的和240GB SAS )
ceph-deploy disk list ceph-osd1 ceph-osd2
lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
fd0      2:0    1     4K  0 disk
sda      8:0    0   300G  0 disk
├─sda1   8:1    0   500M  0 part /boot
├─sda2   8:2    0   100G  0 part /var
├─sda3   8:3    0    16G  0 part [SWAP]
├─sda4   8:4    0     1K  0 part
└─sda5   8:5    0 183.5G  0 part /
sdb      8:16   0   100G  0 disk
sdc      8:32   0   100G  0 disk
sdd      8:48   0   100G  0 disk
sde      8:64   0   100G  0 disk
sdf      8:80   0   100G  0 disk
sdg      8:96   0   100G  0 disk
sdh      8:112  0   100G  0 disk
sdi      8:128  0   100G  0 disk
sdj      8:144  0   100G  0 disk
sdk      8:160  0   100G  0 disk
sdl      8:176  0   240G  0 disk
sdm      8:192  0   240G  0 disk
sr0     11:0    1  1024M  0 rom  
8. 在ceph-osd1上建立一個批量建立xfs文件系統腳本(對於存儲海量的小文件,或者超大規模的文件,文件大小也偏大的話,咱們使用xfs)。
建立腳本名稱爲 parted.sh
vim parted.sh

#!/bin/bash

set -e
if [ ! -x "/sbin/parted" ]; then
   echo "This script requires /sbin/parted to run!" >&2
   exit 1
fi

DISKS="b c d e f g h i j k"
for i in ${DISKS}; do
   echo "Creating partitions on /dev/sd${i} ..."
   parted -a optimal --script /dev/sd${i} -- mktable gpt
   parted -a optimal --script /dev/sd${i} -- mkpart primary xfs 0% 100%
   sleep 1
   #echo "Formatting /dev/sd${i}1 ..."
   mkfs.xfs -f /dev/sd${i}1 &
done

DISKS="l m"
for i in ${DISKS}; do
   parted -s /dev/sd${i} mklabel gpt
   parted -s /dev/sd${i} mkpart primary 0% 20%
   parted -s /dev/sd${i} mkpart primary 21% 40%
   parted -s /dev/sd${i} mkpart primary 41% 60%
   parted -s /dev/sd${i} mkpart primary 61% 80%
   parted -s /dev/sd${i} mkpart primary 81% 100%
done
9. 在ceph-osd1上把腳本設置爲可執行權限 
chmod -R 755 /root/parted.sh
10. 在ceph-osd1上把腳本parted.sh 複製到ceph-osd2上
scp -p /root/parted.sh ceph-osd2:/root/parted.sh
11. 分別在ceph-osd1和ceph-osd2節點執行./parted.sh 
./parted.sh
12. 在ceph-adm節點查看ceph-osd一、ceph-osd2上硬盤是否成功建立xfs文件系統
ceph-deploy disk list ceph-osd1 ceph-osd2
#正常顯示以下(ceph-osd2 就不粘貼了):
[ceph-osd1][INFO  ] Running command: /usr/sbin/ceph-disk list
[ceph-osd1][DEBUG ] /dev/sda :
[ceph-osd1][DEBUG ]  /dev/sda4 other, 0x5
[ceph-osd1][DEBUG ]  /dev/sda3 swap, swap
[ceph-osd1][DEBUG ]  /dev/sda5 other, xfs, mounted on /
[ceph-osd1][DEBUG ]  /dev/sda1 other, xfs, mounted on /boot
[ceph-osd1][DEBUG ]  /dev/sda2 other, xfs, mounted on /var
[ceph-osd1][DEBUG ] /dev/sdb :
[ceph-osd1][DEBUG ]  /dev/sdb1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdc :
[ceph-osd1][DEBUG ]  /dev/sdc1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdd :
[ceph-osd1][DEBUG ]  /dev/sdd1 other, xfs
[ceph-osd1][DEBUG ] /dev/sde :
[ceph-osd1][DEBUG ]  /dev/sde1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdf :
[ceph-osd1][DEBUG ]  /dev/sdf1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdg :
[ceph-osd1][DEBUG ]  /dev/sdg1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdh :
[ceph-osd1][DEBUG ]  /dev/sdh1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdi :
[ceph-osd1][DEBUG ]  /dev/sdi1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdj :
[ceph-osd1][DEBUG ]  /dev/sdj1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdk :
[ceph-osd1][DEBUG ]  /dev/sdk1 other, xfs
[ceph-osd1][DEBUG ] /dev/sdl :
[ceph-osd1][DEBUG ]  /dev/sdl1 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdl2 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdl3 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdl4 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdl5 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ] /dev/sdm :
[ceph-osd1][DEBUG ]  /dev/sdm1 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdm2 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdm3 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdm4 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ]  /dev/sdm5 other, ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
[ceph-osd1][DEBUG ] /dev/sr0 other, unknown

8、 建立存儲節點

1. 在ceph-adm上建立ceph-osd一、ceph-osd2存儲節點
ceph-osd1執行以下:
ceph-deploy disk zap ceph-osd1:sdb ceph-osd1:sdc ceph-osd1:sdd ceph-osd1:sde ceph-osd1:sdf ceph-osd1:sdg ceph-osd1:sdh ceph-osd1:sdi ceph-osd1:sdj ceph-osd1:sdk
ceph-deploy osd create ceph-osd1:sdb ceph-osd1:sdc ceph-osd1:sdd ceph-osd1:sde ceph-osd1:sdf ceph-osd1:sdg ceph-osd1:sdh ceph-osd1:sdi ceph-osd1:sdj ceph-osd1:sdk

ceph-osd2執行以下:
ceph-deploy disk zap ceph-osd2:sdb ceph-osd2:sdc ceph-osd2:sdd ceph-osd2:sde ceph-osd2:sdf ceph-osd2:sdg ceph-osd2:sdh ceph-osd2:sdi ceph-osd2:sdj ceph-osd2:sdk
ceph-deploy osd create ceph-osd2:sdb ceph-osd2:sdc ceph-osd2:sdd ceph-osd2:sde ceph-osd2:sdf ceph-osd2:sdg ceph-osd2:sdh ceph-osd2:sdi ceph-osd2:sdj ceph-osd2:sdk

2. 在ceph-adm上把配置文件同步部署到其它節點,讓每一個節點ceph配置保持一致性。
ceph-deploy --overwrite-conf admin ceph-adm ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2


9、 測試

1. 查看Ceph的狀態
[root@ceph-adm ceph]# ceph -s
   cluster 0659c156-c46a-4c83-bcc1-786219991e81
    health HEALTH_OK
    monmap e1: 3 mons at {ceph-mon1=192.168.0.60:6789/0,ceph-mon2=192.168.0.61:6789/0,ceph-mon3=192.168.0.62:6789/0}
           election epoch 8, quorum 0,1,2 ceph-mon1,ceph-mon2,ceph-mon3
    osdmap e108: 20 osds: 20 up, 20 in
           flags sortbitwise,require_jewel_osds
     pgmap v338: 512 pgs, 1 pools, 0 bytes data, 0 objects
           715 MB used, 1898 GB / 1899 GB avail
                512 active+clean
2. 查看ceph版本
[root@ceph-adm ceph]# ceph -v
ceph version 10.2.9 (2ee413f77150c0f375ff6f10edd6c8f9c7d060d0)
3. 查看集羣使用狀態
[root@ceph-adm ceph]# ceph df
GLOBAL:
   SIZE      AVAIL     RAW USED     %RAW USED
   1899G     1898G         715M          0.04
POOLS:
   NAME     ID     USED     %USED     MAX AVAIL     OBJECTS
   rbd      0         0         0          949G           0
4. 查看ceph mon 狀態
[root@ceph-adm ceph]# ceph mon stat
e1: 3 mons at {ceph-mon1=192.168.0.60:6789/0,ceph-mon2=192.168.0.61:6789/0,ceph-mon3=192.168.0.62:6789/0}, election epoch 8, quorum 0,1,2 ceph-mon1,ceph-mon2,ceph-mon3
5. 查看osd的crush map
[root@ceph-adm ceph]# ceph osd tree
ID WEIGHT  TYPE NAME          UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 1.85394 root default                                        
-2 0.92697     host ceph-osd1                                  
0 0.09270         osd.0           up  1.00000          1.00000
1 0.09270         osd.1           up  1.00000          1.00000
2 0.09270         osd.2           up  1.00000          1.00000
3 0.09270         osd.3           up  1.00000          1.00000
4 0.09270         osd.4           up  1.00000          1.00000
5 0.09270         osd.5           up  1.00000          1.00000
6 0.09270         osd.6           up  1.00000          1.00000
7 0.09270         osd.7           up  1.00000          1.00000
8 0.09270         osd.8           up  1.00000          1.00000
9 0.09270         osd.9           up  1.00000          1.00000
-3 0.92697     host ceph-osd2                                  
10 0.09270         osd.10          up  1.00000          1.00000
11 0.09270         osd.11          up  1.00000          1.00000
12 0.09270         osd.12          up  1.00000          1.00000
13 0.09270         osd.13          up  1.00000          1.00000
14 0.09270         osd.14          up  1.00000          1.00000
15 0.09270         osd.15          up  1.00000          1.00000
16 0.09270         osd.16          up  1.00000          1.00000
17 0.09270         osd.17          up  1.00000          1.00000
18 0.09270         osd.18          up  1.00000          1.00000
19 0.09270         osd.19          up  1.00000          1.00000
6. 導出ceph mon 的信息
[root@ceph-adm ceph]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 0659c156-c46a-4c83-bcc1-786219991e81
last_changed 2017-07-20 13:17:49.202587
created 2017-07-20 13:17:49.202587
0: 192.168.0.60:6789/0 mon.ceph-mon1
1: 192.168.0.61:6789/0 mon.ceph-mon2
2: 192.168.0.62:6789/0 mon.ceph-mon3
7. 查看mon仲裁狀態
[root@ceph-adm ceph]# ceph quorum_status --format json-pretty

{
   "election_epoch": 8,
   "quorum": [
       0,
       1,
       2
   ],
   "quorum_names": [
       "ceph-mon1",
       "ceph-mon2",
       "ceph-mon3"
   ],
   "quorum_leader_name": "ceph-mon1",
   "monmap": {
       "epoch": 1,
       "fsid": "0659c156-c46a-4c83-bcc1-786219991e81",
       "modified": "2017-07-20 13:17:49.202587",
       "created": "2017-07-20 13:17:49.202587",
       "mons": [
           {
               "rank": 0,
               "name": "ceph-mon1",
               "addr": "192.168.0.60:6789\/0"
           },
           {
               "rank": 1,
               "name": "ceph-mon2",
               "addr": "192.168.0.61:6789\/0"
           },
           {
               "rank": 2,
               "name": "ceph-mon3",
               "addr": "192.168.0.62:6789\/0"
           }
       ]
   }
}
八、查看ceph pg狀態
[root@ceph-adm ceph]# ceph pg stat
v338: 512 pgs: 512 active+clean; 0 bytes data, 715 MB used, 1898 GB / 1899 GB avail


就此ceph集羣已完成,下面如何配置 Nova,Glance、Cinder 基於Ceph的統一存儲方案。


10、 Openstack後端存儲Ceph解決方案


1. 配置glance鏡像服務的後端存儲基於ceph集羣








持續更新中.......


學習交流請加qq 337972603



參考

https://yq.aliyun.com/articles/72357?spm=5176.100239.blogcont72372.12.nBvAu8

http://www.vpsee.com/2015/07/install-ceph-on-centos-7/

相關文章
相關標籤/搜索