ceph安装配置

简介

ceph是一个开源分布式存储系统,支持PB级别的存储,支持对象存储,块存储和文件存储,高性能,高可用,可扩展。html

部署网络建议架构图node

部署

部署架构图,本次实验部署jewel版本web

实验环境的Vagrantfile

lab1节点既做admin节点又做node节点,lab2,lab3只做为node节点,lab4做为做测试使用ceph的节点docker

# -*- mode: ruby -*-
# vi: set ft=ruby :

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

Vagrant.configure("2") do |config|
    (1..4).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 = 3
          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', 50 * 1024]
          end
          v.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk]
        end
      end
    end
end
复制代码

配置阿里ceph源

在全部节点执行以下操做shell

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 节点json

# 官方源
# 若是已经配置了上面的阿里源,不须要再配置以下的源
# 推荐使用阿里源,由于官方源速度太慢
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权限swift

# 在每个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 ceph@lab1
ssh-copy-id ceph@lab2
ssh-copy-id ceph@lab3
ssh-copy-id ceph@lab4
复制代码

在admin节点建立集群

在lab1节点执行以下操做,node的主机名必定要设置正确 lab1, lab2, lab3。不然可能会没法实验成功vim

# 不要使用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来使用cephcentos

# 启动 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 ceph-radosgw@rgw.lab1

# 访问测试
curl -I http://11.11.11.111/
复制代码

使用ceph存储

应用存储使用架构图ruby

对象存储

# 安装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=foo@foo.com

# 建立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 ceph-mds@lab1
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 ceph-mds@lab1
复制代码

参考文档

相关文章
相关标签/搜索