天天看點

ceph安裝配置

簡介

ceph是一個開源分布式存儲系統,支援PB級别的存儲,支援對象存儲,塊存儲和檔案存儲,高性能,高可用,可擴充。

部署網絡建議架構圖

部署

部署架構圖,本次實驗部署jewel版本

實驗環境的

Vagrantfile

lab1節點既作admin節點又作node節點,lab2,lab3隻作為node節點,lab4作為作測試使用ceph的節點
# -*- mode: ruby -*-
# vi: set ft=ruby :

ENV["LC_ALL"] = "en_US.UTF-8"

Vagrant.configure("2") do |config|
    (..).each do |i|
      config.vm.define "lab#{i}" do |node|
        node.vm.box = "centos-7.4-docker-17"
        node.ssh.insert_key = false
        node.vm.hostname = "lab#{i}"
        node.vm.network "private_network", ip: "11.11.11.11#{i}"
        node.vm.provision "shell",
          inline: "echo hello from node #{i}"
        node.vm.provider "virtualbox" do |v|
          v.cpus = 
          v.customize ["modifyvm", :id, "--name", "lab#{i}", "--memory", "3096"]
          file_to_disk = "lab#{i}_vdb.vdi"
          unless File.exist?(file_to_disk)
            # 50GB
            v.customize ['createhd', '--filename', file_to_disk, '--size',  * ]
          end
          v.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', , '--device', , '--type', 'hdd', '--medium', file_to_disk]
        end
      end
    end
end
複制代碼
           

配置阿裡ceph源

在所有節點執行如下操作
cat >/etc/yum.repos.d/ceph.repo<<EOF
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1
EOF
yum makecache
複制代碼
           

在admin節點安裝ceph-deploy

lab1 節點
# 官方源
# 如果已經配置了上面的阿裡源,不需要再配置如下的源
# 推薦使用阿裡源,因為官方源速度太慢
cat >/etc/yum.repos.d/ceph.repo<<EOF
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

# 更新系統軟體
# 此操作可省略
# yum update -y

# 安裝 ceph-deploy
yum install -y ceph-deploy
複制代碼
           

配置admin節點連接配接node節點

安裝之後需要配置admin節點可以ssh無密碼登入每個node節點和測試節點,使用者需要有sudo權限
# 在每一個node節點執行
useradd ceph
echo 'ceph' | passwd --stdin ceph
echo "ceph ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/ceph
chmod 0440 /etc/sudoers.d/ceph
# 配置sshd可以使用password登入
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl reload sshd
# 配置sudo不需要tty
sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers

# 在所有節點配置hosts
# 包括要進行ceph測試的機器
# 使用vagrant實驗時注意
# 由于vagrant會自動把主機名解析為 127.0.0.1
# 是以在實驗時如果在ceph叢集内任意一台機器進行實驗時
# 注意把本機名解析為 127.0.0.1 的行注釋,如下所示
# 127.0.0.1	lab1	lab1
cat >>/etc/hosts<<EOF
11.11.11.111 lab1
11.11.11.112 lab2
11.11.11.113 lab3
11.11.11.113 lab4
EOF

# 在admin節點執行
# 建立ceph使用者,配置sshkey登入
# 由于lab1節點作為node節點時已經建立過ceph使用者
# 第一條指令可能會出錯,忽略即可
useradd ceph
su - ceph
ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
複制代碼
           

在admin節點建立叢集

在lab1節點執行如下操作,node的主機名一定要設定正确 lab1, lab2, lab3。否則可能會無法實驗成功
# 不要使用sudo也不要使用root使用者運作如下的指令
su - ceph
mkdir my-cluster
cd my-cluster
# 建立lab1為monitor
ceph-deploy new lab1

# 檢視配置檔案
ls -l

# 配置ceph.conf
[global]
...
# 如果有多個網卡,應該配置如下選項,
# public network是公共網絡,負責叢集對外提供服務的流量
# cluster network是叢集網絡,負載叢集中資料複制傳輸通信等
# 本次實驗使用同一塊網卡,生境環境建議分别使用一塊網卡
public network = 11.11.11.0/24
cluster network = 11.11.11.0/24

# 安裝 ceph 包
# 如果按照官方文檔安裝方法 會重新配置安裝官方ceph源
# 由于網絡問題,安裝可能會出錯,需要多次執行
# ceph-deploy install 其實隻是會安裝 ceph ceph-radosgw 兩個包
# ceph-deploy install lab1 lab2 lab3
# 推薦使用阿裡源安裝,因為使用ceph-deploy安裝會很慢
# 使用如下指令手動安裝包,替代官方的 ceph-deploy install 指令
# 如下操作在所有node節點上執行
yum install -y ceph ceph-radosgw

# 部署monitor和生成keys
ceph-deploy mon create-initial
ls -l *.keyring

# 複制檔案到node節點
ceph-deploy admin lab1 lab2 lab3

# 部署manager (luminous+)12及以後的版本需要部署
# 本次部署 jewel 版本 ,不需要執行如下指令
# ceph-deploy mgr create lab1

# 添加osd 以磁盤方式
# 本次實驗采用此種方法
# sdb 為虛拟機添加的磁盤設定名
ceph-deploy osd create lab1:sdb lab2:sdb lab3:sdb

# 在node節點建立目錄
rm -rf /data/osd1
mkdir -pv /data/osd1
chmod 777 -R /data/osd1
chown ceph.ceph -R /data/osd1

# 添加osd 以檔案目錄方式
ceph-deploy osd prepare lab1:/data/osd1 lab2:/data/osd1 lab3:/data/osd1
ceph-deploy osd activate lab1:/data/osd1 lab2:/data/osd1 lab3:/data/osd1

# 檢視狀态
ssh lab1 sudo ceph health
ssh lab1 sudo ceph -s
複制代碼
           

清理叢集

# 如果安裝過程出錯,使用如下指令清理之後重新開始
ceph-deploy purge lab1 lab2 lab3
ceph-deploy purgedata lab1 lab2 lab3
ceph-deploy forgetkeys
rm ceph.*
複制代碼
           

擴充叢集

提高可用性

  • 在lab1上運作metadata server 為後續使用cephfs
  • 在lab2,lab3運作monitor和manager提高叢集可用性
# 為了使用CephFS,必須啟動 metadata server
ceph-deploy mds create lab1

# 添加monitor
ceph-deploy mon add lab2
ceph-deploy mon add lab3
ssh lab1 sudo ceph -s

# 在monitor節點檢視狀态(需要以root使用者或者sudo檢視)
ceph quorum_status --format json-pretty

# 添加manager (luminous+)12及以後的版本需要部署
# 本次部署 jewel 版本 ,不需要執行如下指令
# ceph-deploy mgr create lab2 lab3
複制代碼
           

部署RGW使用Ceph Object Gateway

提供S3/Swift存儲功能,實作S3和Swift相容的接口,可以使用S3或Swift的指令行工具或SDK來使用ceph
# 啟動 rgw
ceph-deploy rgw create lab1

# 修改配置 /etc/ceph/ceph.conf
# 使用 rgw 監聽在 80 端口
# lab1 為啟動 rgw 的主機名
[client.rgw.lab1]
rgw_frontends = "civetweb port=80"

# 重新開機 rgw
systemctl restart [email protected]

# 通路測試
curl -I http://11.11.11.111/
複制代碼
           

使用ceph存儲

應用存儲使用架構圖

對象存儲

# 安裝ceph
yum install -y ceph

# 複制相關檔案到要使用ceph-client的機器
ceph-deploy admin lab4

# 測試
# 存儲檔案
echo 'hello ceph oject storage' > testfile.txt
ceph osd pool create mytest 8
rados put test-object-1 testfile.txt --pool=mytest

# 檢視讀取檔案
rados -p mytest ls
rados get test-object-1 testfile.txt.1 --pool=mytest
cat testfile.txt.1

# 檢視檔案位置
ceph osd map mytest test-object-1

# 删除檔案
rados rm test-object-1 --pool=mytest

# 删除pool
ceph osd pool rm mytest mytest --yes-i-really-really-mean-it
複制代碼
           

塊存儲

# 安裝ceph
yum install -y ceph

# 複制相關檔案到要使用ceph-client的機器
ceph-deploy admin lab4

# 建立塊裝置鏡像
rbd create foo --size 4096 --image-feature layering
rbd info foo
rados -p rbd ls

# 映射鏡像到塊裝置
sudo rbd map foo --name client.admin

# 使用塊裝置建立檔案系統
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo

# 挂載使用
sudo mkdir /mnt/ceph-block-device
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
cd /mnt/ceph-block-device
echo 'hello ceph block storage' > testfile.txt

# 清理
cd ~
sudo umount -lf /mnt/ceph-block-device
sudo rbd unmap foo
rbd remove foo
rados -p rbd ls
複制代碼
           

S3對象存儲

11.11.11.111 為安裝了 RGW 的機器
# 安裝
yum install -y ceph ceph-radosgw

# 複制相關檔案到要使用ceph-client的機器
ceph-deploy admin lab4

# 建立S3所需要的pool
ceph osd pool create .rgw 128 128
ceph osd pool create .rgw.root 128 128
ceph osd pool create .rgw.control 128 128
ceph osd pool create .rgw.gc 128 128
ceph osd pool create .rgw.buckets 128 128
ceph osd pool create .rgw.buckets.index 128 128
ceph osd pool create .rgw.buckets.extra 128 128
ceph osd pool create .log 128 128
ceph osd pool create .intent-log 128 128
ceph osd pool create .usage 128 128
ceph osd pool create .users 128 128
ceph osd pool create .users.email 128 128
ceph osd pool create .users.swift 128 128
ceph osd pool create .users.uid 128 128

# 檢視
rados lspools

# 通路測試
curl -I http://11.11.11.111/

# 建立S3使用者
# 儲存如下指令傳回的 user access_key secret_key
radosgw-admin user create --uid=foo --display-name=foo [email protected]

# 建立admin使用者
radosgw-admin user create --uid=admin --display-name=admin

# 允許admin讀寫users資訊
radosgw-admin caps add --uid=admin --caps="users=*"

# 允許admin讀寫所有的usage資訊
radosgw-admin caps add --uid=admin --caps="usage=read,write"

# 安裝s3測試工具
yum install -y s3cmd

# 配置s3cmd, 隻需指定Access Key和Secret Key,其他預設即可
s3cmd --configure

# 修該生成的配置檔案
vim $HOME/.s3cfg
host_base = 11.11.11.111
host_bucket = 11.11.11.111/%(bucket)
use_https = False

# 建立Bucket
s3cmd mb s3://mybucket
s3cmd ls

# 上傳Object
echo 'hello ceph block storage s3' > hello.txt
s3cmd put hello.txt s3://mybucket

# 檢視Object
s3cmd ls s3://mybucket

# 下載下傳Object
cd /tmp
s3cmd get s3://mybucket/hello.txt
cd ~

# 删除bucket下所有對象
s3cmd del -rf s3://mybucket/
s3cmd ls -r s3://mybucket

# 删除Bucket
s3cmd mb s3://mybucket1
s3cmd rb s3://mybucket1

# 删除S3使用者
radosgw-admin user rm --uid=foo
radosgw-admin user rm --uid=admin

# 删除pool
ceph osd pool delete .rgw .rgw --yes-i-really-really-mean-it
ceph osd pool delete .rgw.root .rgw.root --yes-i-really-really-mean-it
ceph osd pool delete .rgw.control .rgw.control --yes-i-really-really-mean-it
ceph osd pool delete .rgw.gc .rgw.gc --yes-i-really-really-mean-it
ceph osd pool delete .rgw.buckets .rgw.buckets --yes-i-really-really-mean-it
ceph osd pool delete .rgw.buckets.index .rgw.buckets.index --yes-i-really-really-mean-it
ceph osd pool delete .rgw.buckets.extra .rgw.buckets.extra --yes-i-really-really-mean-it
ceph osd pool delete .log .log --yes-i-really-really-mean-it
ceph osd pool delete .intent-log .intent-log --yes-i-really-really-mean-it
ceph osd pool delete .usage .usage --yes-i-really-really-mean-it
ceph osd pool delete .users .users --yes-i-really-really-mean-it
ceph osd pool delete .users.email .users.email --yes-i-really-really-mean-it
ceph osd pool delete .users.swift .users.swift --yes-i-really-really-mean-it
ceph osd pool delete .users.uid .users.uid --yes-i-really-really-mean-it
複制代碼
           

CephFS存儲

# 安裝ceph
yum install -y ceph ceph-fuse

# 複制相關檔案到要使用ceph-client的機器
ceph-deploy admin lab4

# CephFS需要使用兩個Pool來分别存儲資料和中繼資料
ceph osd pool create fs_data 128
ceph osd pool create fs_metadata 128
ceph osd lspools

# 建立一個CephFS
ceph fs new cephfs fs_metadata fs_data

# 檢視
ceph fs ls

# 使用核心提供的功能 挂載CephFS
# 由于可能會有bug,建議使用 4.0 以上的核心
# 優點是性能比使用ceph-fuse更好
# name,secret 為 /etc/ceph/ceph.client.admin.keyring 裡的内容
mkdir /mnt/mycephfs
mount -t ceph lab1:6789,lab2:6789,lab3:6789:/ /mnt/mycephfs -o name=admin,secret=AQBoclRaiilZJBAACLjqg2OUOOB/FNa20UJXYA==
df -h
cd /mnt/mycephfs
echo 'hello ceph CephFS' > hello.txt
cd ~
umount -lf /mnt/mycephfs
rm -rf /mnt/mycephfs

# 使用 ceph-fuse 挂載CephFS
mkdir /mnt/mycephfs
ceph-fuse -m lab1:6789 /mnt/mycephfs
df -h
cd /mnt/mycephfs
echo 'hello ceph CephFS' > hello.txt
cd ~
umount -lf /mnt/mycephfs
rm -rf /mnt/mycephfs

# 清理
# 停止 metadata server
# 本次部署在lab1,去lab1停止服務
systemctl stop [email protected]
ceph fs rm cephfs --yes-i-really-mean-it
ceph osd pool delete fs_data fs_data --yes-i-really-really-mean-it
ceph osd pool delete fs_metadata fs_metadata --yes-i-really-really-mean-it

# 開啟 metadata server
# 友善以後使用 cephfs
systemctl start [email protected]
複制代碼
           

參考文檔

  • docs.ceph.com/docs/master…
  • docs.ceph.com/docs/master…
  • docs.ceph.org.cn/start/
  • docs.ceph.com/docs/master…
  • www.xuxiaopang.com/2016/10/13/…
  • docs.ceph.com/docs/master…
  • blog.frognew.com/tags/ceph.h…
  • www.centos.bz/2017/10/用ce…