ceph分布式存储实验环境搭建文档

 

ceph分布式存储

一、初识ceph

    1.1 ceph功能介绍

    直接进入主题,ceph 目前提供对象存储(RADOSGW)、块存储RDB以及 CephFS 文件系统这 3 种功能。对于这3种功能介绍,分别如下:
      1.对象存储,也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
    2.块存储,这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
  3.文件存储,通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;

     1.2 ceph组件介绍    

    下大概简单介绍一下ceph的组件架构:

 

           Monitor, 负责监视整个集群的运行状况,信息由维护集群成员的守护程序来提供,各节点之间的状态、集群配置信息。Ceph monitor map主要包括OSD map、PG map、MDS map 和 CRUSH 等,这些 map 被统称       为 集群Map。ceph monitor 不存储任何数据。下面分别开始介绍这些map的功能:

 

  • Monitor map:包括有关monitor 节点端到端的信息,其中包括 Ceph 集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump" 查看 monitor map。
  • OSD map:包括一些常用的信息,如集群ID、创建OSD map的 版本信息和最后修改信息,以及pool相关信息,主要包括pool 名字、pool的ID、类型,副本数目以及PGP等,还包括数量、状态、权重、最新的清洁间隔和OSD主机信息。通过命令 "ceph osd dump" 查看。
  • PG map:包括当前PG版本、时间戳、最新的OSD Map的版本信息、空间使用比例,以及接近占满比例信息,同事,也包括每个PG ID、对象数目、状态、OSD 的状态以及深度清理的详细信息。通过命令 "ceph pg dump" 可以查看相关状态。
  • CRUSH map: CRUSH map 包括集群存储设备信息,故障域层次结构和存储数据时定义失败域规则信息。通过 命令 "ceph osd crush map" 查看。
  • MDS map:MDS Map 包括存储当前 MDS map 的版本信息、创建当前的Map的信息、修改时间、数据和元数据POOL ID、集群MDS数目和MDS状态,可通过"ceph mds dump"查看。

 

OSD,Ceph OSD 是由物理磁盘驱动器、在其之上的 Linux 文件系统以及 Ceph OSD 服务组成。Ceph OSD 将数据以对象的形式存储到集群中的每个节点的物理磁盘上,完成存储数据的工作绝大多数是由 OSD daemon 进程实现。在构建 Ceph OSD的时候,建议采用SSD 磁盘以及xfs文件系统来格式化分区。BTRFS 虽然有较好的性能,但是目前不建议使用到生产中,目前建议还是处于围观状态。

Ceph 元数据,MDS。ceph 块设备和RDB并不需要MDS,MDS只为 CephFS服务。

RADOS,Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致。

librados,librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。

ADOS块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。
RADOSGW,网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3 和 Swift 兼容的RESTful API接口。
CephFS,Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。

简单说下CRUSH,Controlled Replication Under Scalable Hashing,它表示数据存储的分布式选择算法, ceph 的高性能/高可用就是采用这种算法实现。CRUSH 算法取代了在元数据表中为每个客户端请求进行查找,它通过计算系统中数据应该被写入或读出的位置。CRUSH能够感知基础架构,能够理解基础设施各个部件之间的关系。并且CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH 算是使得 ceph 实现了自我管理和自我修复。

RADOS 分布式存储相较于传统分布式存储的优势在于:

    1. 将文件映射到object后,利用Cluster Map 通过CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和Block MAp的管理。
  2. RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展。

 1.3 ceph数据读写流程

Pool存储池、分区,存储池的大小取决于底层的存储空间。

PG(placement group)一个 pool 内部可以有多个 PG 存在,pool PG 都是抽象的逻辑概 念,一个 pool 中有多少个 PG 可以通过公式计算。

OSD(Object Storage Daemon,对象存储设备):每一块磁盘都是一个 osd,一个主机由一个或 多个 osd 组成.
ceph 集群部署好之后,要先创建存储池才能向 ceph 写入数据,文件在向 ceph 保存之前要 先进行一致性 hash 计算,计算后会把文件保存在某个对应的 PG 的,此文件一定属于某个 pool 的一个 PG,在通过 PG 保存在 OSD 上。 数据对象在写到主 OSD 之后再同步对从 OSD 以实现数据的高可用

 

 注:存储文件过程:

第一步: 计算文件到对象的映射: 计算文件到对象的映射,假如 file 为客户端要读写的文件,得到 oid(object id) = ino + ono ino:inode number (INO)File 的元数据序列号,File 的唯一 idono:object number (ONO)File 切分产生的某个 object 的序号,默认以 4M 切分一个块大 小。
第二步:通过 hash 算法计算出文件对应的 pool 中的 PG: 通过一致性 HASH 计算 Object PGObject -> PG 映射 hash(oid) & mask-> pgid
第三步: 通过 CRUSH 把对象映射到 PG 中的 OSD 通过 CRUSH 算法计算 PG OSDPG -> OSD 映射:[CRUSH(pgid)->(osd1,osd2,osd3)]
第四步:PG 中的主 OSD 将对象写入到硬盘
第五步: OSD 将数据同步给备份 OSD,并等待备份 OSD 返回确认
第六步: OSD 将写入完成返回给客户端

二、安装ceph

一、系统环境准备
Wareware workstation 部署三台ubuntu-18.04操作系统
双网卡:public IP(eth0)桥接网络,cluster IP(eth1)net转发
安装openssh-server
每个虚拟机增加三个5G硬盘
二、初始化系统环境
##配置hosts解析
root@ubuntu:~# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.1.10 ceph-deploy ceph-node1 ceph-mon1
192.168.1.20  ceph-node2  ceph-mon2
192.168.1.30  ceph-node3 ceph-mon3

Hostname          public IP (eth0)        cluster IP (eth1)    操作系统                    硬盘
ceph-node1       192.168.2.10/24      192.168.1.10/24     ubuntu 18.04           3块5G
ceph-node2       192.168.2.20/24      192.168.1.20/24     ubuntu 18.04           3块5G
ceph-node3       192.168.2.30/24      192.168.1.30/24     ubuntu 18.04           3块5G
##配置双网卡
root@ubuntu:~# cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        [192.168.2.10/24]
        # gateway4: 192.168.2.254   ##服务器只能配一个网关
      # nameservers:
      # addresses:
      #   [8.8.8.8]
    eth1:
      dhcp4: no
      addresses:
        [192.168.1.10/24] 
      gateway4: 192.168.1.2
      nameservers:
        addresses:
          [114.114.114.114]

##检查外网连通性(ping www.baidu.com)

##配置ubuntu-18.04 的国内源(我用的清华源)
cat << EOF > /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
EOF

##导入key文件
root@ubuntu:~# wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
OK 

##添加ceph源
sudo apt-add-repository 'deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main'
root@ubuntu:~# cat /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main

sudo apt update

##安装系统常用命令
apt purge ufw lxd lxd-client lxcfs lxc-common -y
apt install iproute2  ntpdate  tcpdump telnet traceroute nfs-kernel-server nfs-common  lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute  gcc openssh-server lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip

###时钟同步
dpkg-reconfigure tzdata  #系统时区设置成上海
sudo apt install chrony -y
sudo vim /etc/chrony/chrony.conf

# 修改为阿里云时钟同步服务器
# 公网
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp7.aliyun.com minpoll 4 maxpoll 10 iburst

# 重启chrony服务
sudo systemctl restart chrony
sudo systemctl status chrony
sudo systemctl enable chrony
# 查看是否激活
sudo chronyc activity
# 查看时钟同步状态
sudo timedatectl status
# 写入系统时钟
sudo hwclock -w

##hostname设置
hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3


# 重启服务器
sudo reboot

三、开始部署ceph:

##创建ceph用户
groupadd -r -g 2022 ceph && useradd -r -m -d "/var/lib/ceph" -s /bin/bash -u 2022 -g 2022 ceph && echo ceph:123123|chpasswd

##各节点配置ceph用户可以执行sudo权限
echo "ceph ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers

##配置ssh免密登录
root@ceph-node1:/home/long# su - ceph  ##node1就是ceph-deploy节点,生产中应该将和ceph-node1分开部署
ceph@ceph-node1:~$ pwd
/var/lib/ceph

ssh-keygen
ceph@ceph-deploy:~$ ssh-copy-id ceph@192.168.1.10
ceph@ceph-deploy:~$ ssh-copy-id ceph@192.168.1.20
ceph@ceph-deploy:~$ ssh-copy-id ceph@192.168.1.30

##查看deplpy能安装的版本,然后安装deploy
ceph@ceph-node1:~$ apt-cache madison ceph-deploy
ceph@ceph-node1:~$ sudo apt install ceph-deploy -y

##初始化mon
ceph@ceph-node1:~$ mkdir ceph-cluste
ceph@ceph-node1:~$ cd ceph-cluste/
Ubuntu 各服务器需要单独安装Python2:
ceph@ceph-node1:~/ceph-cluste$ sudo apt install python2.7 -y
ceph@ceph-node1:~/ceph-cluste$  sudo ln -sv /usr/bin/python2.7 /usr/bin/python2
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy new --cluster-network 192.168.2.0/24 --public-network 192.168.1.0/24 ceph-node2

##验证初始化结果
ceph@ceph-node1:~/ceph-cluste$ ls -l
total 12
-rw-rw-r-- 1 ceph ceph  265 Aug 20 10:37 ceph.conf   ##自动生成配置文件
-rw-rw-r-- 1 ceph ceph 3365 Aug 20 10:37 ceph-deploy-ceph.log  ##自动生成配置文件
-rw------- 1 ceph ceph   73 Aug 20 10:37 ceph.mon.keyring  ##用于ceph-mon节点内部通讯的密钥环文件

##每个mon节点安装mon组件
ceph@ceph-node1:~$ sudo apt install ceph-mon  -y 
ceph@ceph-node2:~$ sudo apt install ceph-mon  -y
ceph@ceph-node3:~$ sudo apt install ceph-mon  -y

##初始化mon节点
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy mon create-initial

##验证mon节点
ceph@ceph-node2:~$ ps -ef | grep ceph-mon
ceph       4434      1  0 10:50 ?        00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-node2 --setuser ceph --setgroup ceph
ceph       4956   1293  0 10:51 pts/0    00:00:00 grep --color=auto ceph-mon

##管理集群的节点或客户端安装ceph-common组件
ceph@ceph-node1:~/ceph-cluste$  sudo apt install ceph-common -y
ceph@ceph-node2:~/ceph-cluste$  sudo apt install ceph-common -y
ceph@ceph-node3:~/ceph-cluste$  sudo apt install ceph-common -y

##分发admin密钥
ceph-deploy admin  ceph-node1 ceph-node2 ceph-node3

##node节点验证密钥
ceph@ceph-node1:~/ceph-cluste$ ll /etc/ceph/
ceph@ceph-node2:~$  ll /etc/ceph/
ceph@ceph-node3:~$  ll /etc/ceph/

ceph@ceph-node2:~$  ll /etc/ceph/
total 20
drwxr-xr-x   2 root root 4096 Aug 20 10:55 ./
drwxr-xr-x 102 root root 4096 Aug 20 10:48 ../
-rw-------   1 root root  151 Aug 20 10:55 ceph.client.admin.keyring
-rw-r--r--   1 root root  265 Aug 20 10:55 ceph.conf
-rw-r--r--   1 root root   92 Jul  8 22:17 rbdmap
-rw-------   1 root root    0 Aug 20 10:50 tmpOSVV3G

#认证文件的属主和属组为了安全考虑,默认设置为了 root用户和 root组,如果需要 ceph 用户也能执行ceph命令,那么就需要对ceph用户进行授权
ceph@ceph-node1:~/ceph-cluste$ sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
ceph@ceph-node2:~$ sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
ceph@ceph-node3:~$ sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring

##查看集群状态
ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
 
  services:
    mon: 1 daemons, quorum ceph-node2 (age 11m)
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

##配置mgr节点(测试环境由ceph-node2和ceph-node3当作mgr节点,生产环境mgr节点至少需要两台做高可用,必须分开部署)
ceph@ceph-node2:~$  sudo apt install ceph-mgr -y
ceph@ceph-node3:~$  sudo apt install ceph-mgr -y

##将mgr节点加入集群
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy mgr create ceph-node3

##查看状态
ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-node2 (age 22m)  ##初始化mon节点加入的mon节点
    mgr: ceph-node3(active, since 63s)   ##刚刚加入的mgr节点
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:    
 
##在mgr节点也就是node3上验证mgr服务起来了没有
ceph@ceph-node3:~$ ps -ef | grep ceph-mgr
ceph       9922      1  3 11:12 ?        00:00:05 /usr/bin/ceph-mgr -f --cluster ceph --id ceph-node3 --setuser ceph --setgroup ceph
ceph      10093   1169  0 11:14 pts/0    00:00:00 grep --color=auto ceph-mgr

##集群健康状关闭insecure global_id reclaim
ceph@ceph-node1:~/ceph-cluste$  ceph config set mon auth_allow_insecure_global_id_reclaim false

##准备OSD节点
##擦除磁盘之前通过deploy节点对node节点执行安装ceph基本运行环境
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy install --release pacific ceph-node1
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy install --release pacific ceph-node2
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy install --release pacific ceph-node3

##列出远端node节点上的磁盘信息
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy disk list ceph-node1

##使用ceph-deploy disk zap擦除各ceph node的ceph数据磁盘

ceph-deploy disk zap ceph-node1 /dev/sdb
ceph-deploy disk zap ceph-node1 /dev/sdc
ceph-deploy disk zap ceph-node1 /dev/sdd

 

ceph-deploy disk zap ceph-node2 /dev/sdb
ceph-deploy disk zap ceph-node2 /dev/sdc
ceph-deploy disk zap ceph-node2 /dev/sdd

 

ceph-deploy disk zap ceph-node3 /dev/sdb
ceph-deploy disk zap ceph-node3 /dev/sdc
ceph-deploy disk zap ceph-node3 /dev/sdd


##添加OSD

 ceph-deploy osd create ceph-node1 --data /dev/sdb
 ceph-deploy osd create ceph-node1 --data /dev/sdc
 ceph-deploy osd create ceph-node1 --data /dev/sdd

 ceph-deploy osd create ceph-node2 --data /dev/sdb
 ceph-deploy osd create ceph-node2 --data /dev/sdc
 ceph-deploy osd create ceph-node2 --data /dev/sdd

 ceph-deploy osd create ceph-node3 --data /dev/sdb
 ceph-deploy osd create ceph-node3 --data /dev/sdc
 ceph-deploy osd create ceph-node3 --data /dev/sdd

##设置OSD服务自启动:
默认就已经为自启动,node节点添加完成后,开源测试node服务器重启后,OSD是否会自动启动。
ceph@ceph-node1:~$ ps -ef | grep ceph-osd
ceph@ceph-node2:~$ ps -ef | grep ceph-osd
ceph@ceph-node3:~$ ps -ef | grep ceph-osd


##验证ceph集群
ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_OK   ##集群部署正常
 
  services:
    mon: 1 daemons, quorum ceph-node2 (age 8m)
    mgr: ceph-node3(active, since 8m)
    osd: 9 osds: 9 up (since 73s), 9 in (since 81s)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   52 MiB used, 45 GiB / 45 GiB avail
    pgs:     1 active+clean

ceph@ceph-node1:~/ceph-cluste$  ceph health
HEALTH_OK


##测试上传与下载数据

ceph osd pool create mypool 32 32  ##创建pool资源池
ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}'  ##验证PG与PGP组合


##上传文件:
sudo rados put msg1 /var/log/syslog --pool=mypool  #把messages 文件上传到mypool 并指定对象id为msg1


##列出文件:
rados ls --pool=mypool

##文件信息:
cephosdmap命令可以获取到存储池中数据对象的具体位置信息:

ceph@ceph-node1:~/ceph-cluste$  ceph osd map mypool msg1
osdmap e55 pool 'mypool' (2) object 'msg1' -> pg 2.c833d430 (2.10) -> up ([8,1,5], p8) acting ([8,1,5], p8)
#表示文件放在了存储池id为2的c833d430 的PG上,10为当前PG的id,2.10表示数据是 在id为2的存储池当中id为10的PG中存储,在线的OSD编号 8,1,5,主OSD为5,
 活动的OSD8,1,5,三个OSD表示数据放一共3个副本, PG中的OSD是ceph的crush 算法计算出三份数据保存在哪些OSD


##下载文件
sudo rados get msg1 --pool=mypool /opt/my.txt
 ll /opt/

##修改文件
 sudo rados put msg1 /etc/passwd --pool=mypool
 sudo rados get msg1 --pool=mypool /opt/2.txt
tail /opt/2.txt

##删除文件
sudo rados rm msg1 --pool=mypool
rados ls --pool=mypool

##扩展 ceph集群实现高可用
ceph@ceph-node1:~/ceph-cluste$  ceph-deploy mon add ceph-node1
ceph@ceph-node1:~/ceph-cluste$  ceph-deploy mon add ceph-node3##mon节点高可用


##验证ceph-mon状态:
ceph quorum_status --format json-pretty

##扩展mgr节点
ceph@ceph-node1:~/ceph-cluste$ ceph-deploy mgr create ceph-node2

ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_WARN
            1 pool(s) do not have an application enabled
 
  services:
    mon: 3 daemons, quorum ceph-node2,ceph-node1,ceph-node3 (age 5m)##mon3个
    mgr: ceph-node3(active, since 30m), standbys: ceph-node2##mgr2个
    osd: 9 osds: 9 up (since 23m), 9 in (since 23m)##osd9个
 
  data:
    pools:   2 pools, 33 pgs##2个资源池
    objects: 1 objects, 1.8 MiB
    usage:   64 MiB used, 45 GiB / 45 GiB avail
    pgs:     33 active+clean
 

##解决时间同步问题:
 添加参数
 mon clock drift allowed = 5
 mon clock drift warn backoff = 60


##创建RBD
ceph@ceph-node1:~/ceph-cluste$ ceph osd pool create myrbd1 64 64
ceph@ceph-node1:~/ceph-cluste$  ceph osd pool application enable myrbd1 rbd
ceph@ceph-node1:~/ceph-cluste$  rbd pool init -p myrbd1 ##初始化

##创建并验证img:
ceph@ceph-node1:~/ceph-cluste$ rbd create myimg1 --size 5G --pool myrbd1
ceph@ceph-node1:~/ceph-cluste$ rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering
#后续步骤会使用myimg2 ,由于centos系统内核较低无法挂载使用,因此只开启部分特性。
ceph@ceph-node1:~/ceph-cluste$  rbd ls --pool myrbd
ceph@ceph-node1:~/ceph-cluste$ rbd --image myimg1 --pool myrbd1 info


##当前 ceph状态
ceph@ceph-node1:~/ceph-cluste$ ceph df
ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_WARN 
            1 pool(s) do not have an application enabled  
 
  services:
    mon: 3 daemons, quorum ceph-node2,ceph-node1,ceph-node3 (age 20m)
    mgr: ceph-node3(active, since 45m), standbys: ceph-node2
    osd: 9 osds: 9 up (since 38m), 9 in (since 38m)
 https://www.cnblogs.com/cculin/articles/15150559.html

##在客户端安装 ceph-common: 
yum install epel-release -y
yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
 yum install ceph-common -y

#从部署服务器同步认证文件:
ceph@ceph-deploy:~/ceph-cluste$ scp ceph.conf ceph.client.admin.keyring root@192.168.1.132:/etc/ceph/

#客户端映射 img
 rbd -p myrbd1 map myimg2

#客户端验证 RBD:
lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   60G  0 disk
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   59G  0 part
  ├─VolGroup-root 253:0    0   55G  0 lvm  /
  └─VolGroup-swap 253:1    0    4G  0 lvm  [SWAP]
sr0                11:0    1 1024M  0 rom
rbd0              252:0    0    3G  0 disk

 fdisk -l /dev/rbd0

##客户端格式化磁盘并挂载使用:
 mkfs.xfs /dev/rbd
 mount /dev/rbd0 /mnt/
 cp /etc/passwd /mnt
ll /mnt
[root@node01 ceph]# ll /mnt
total 4
-rw-r--r--. 1 root root 2463 Aug 19 23:20 passwd
 

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
devtmpfs                  devtmpfs  898M     0  898M   0% /dev
tmpfs                     tmpfs     910M     0  910M   0% /dev/shm
tmpfs                     tmpfs     910M  9.6M  901M   2% /run
tmpfs                     tmpfs     910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/VolGroup-root xfs        55G  3.5G   52G   7% /
/dev/sda1                 xfs      1014M  153M  862M  15% /boot
tmpfs                     tmpfs     182M     0  182M   0% /run/user/0
/dev/rbd0                 xfs       3.0G   33M  3.0G   2% /mnt

#客户端验证:
 dd if=/dev/zero of=/mnt/ceph-test-file bs=1MB count=300
300+0 records in
300+0 records out
300000000 bytes (300 MB) copied, 24.9416 s, 12.0 MB/s
 file /mnt/ceph-test-file[root@node01 ceph]#  ll -h /mnt/ceph-test-file
-rw-r--r--. 1 root root 287M Aug 19 23:21 /mnt/ceph-test-file


##ceph验证:

ceph@ceph-node1:~/ceph-cluste$ ceph df
--- RAW STORAGE ---
CLASS    SIZE   AVAIL     USED  RAW USED  %RAW USED
hdd    45 GiB  43 GiB  1.9 GiB   1.9 GiB       4.20
TOTAL  45 GiB  43 GiB  1.9 GiB   1.9 GiB       4.20
 
--- POOLS ---
POOL                   ID  PGS   STORED  OBJECTS     USED  %USED  MAX AVAIL
device_health_metrics   1    1      0 B        0      0 B      0     14 GiB
mypool                  2   32  1.8 MiB        1  5.5 MiB   0.01     14 GiB
myrbd1                  3   64  296 MiB       91  890 MiB   2.10     14 GiB
.rgw.root               4   32  1.3 KiB        4   48 KiB      0     14 GiB
default.rgw.log         5   32  3.6 KiB      177  408 KiB      0     14 GiB
default.rgw.control     6   32      0 B        8      0 B      0     14 GiB
default.rgw.meta        7    8      0 B        0      0 B      0     14 GiB


##ceph radosgw(RGW)对象存储:
 RGW提供的是REST接口,客户端通过http与其进行交互,完成数据的增删改查等管理操 作。 radosgw用在需要使用RESTfulAPI接口访问ceph数据的场合,因此在使用RBD即块存 储得场合或者使用cephFS的场合可以不用启用radosgw功能。
 部署radosgw服务
 如果是在使用radosgw的场合,则以下命令将ceph-mgr1服务器部署为RGW主机:
 sudo apt install radosgw=16.2.5-1bionic
 ceph-deploy --overwrite-conf rgw create ceph-node3

##验证radosgw服务
 ps -aux |grep radosgw
ceph      21730  1.1  1.4 6236196 57588 ?       Ssl  00:46   0:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr1 --setuser ceph --setgroup ceph
ceph      22388  0.0  0.0   8920   788 pts/1    S+   00:47   0:00 grep --color=auto radosgw
或者访问http://192.168.1.65:7480

#验证ceph状态:

 ceph@ceph-node1:~/ceph-cluste$ ceph -s
  cluster:
    id:     9794f4ef-1914-431b-b775-e85038312e18
    health: HEALTH_WARN
            1 pool(s) do not have an application enabled
 
  services:
    mon: 3 daemons, quorum ceph-node2,ceph-node1,ceph-node3 (age 69m)
    mgr: ceph-node3(active, since 95m), standbys: ceph-node2
    osd: 9 osds: 9 up (since 87m), 9 in (since 88m)
    rgw: 1 daemon active (1 hosts, 1 zones)
 
  data:
    pools:   7 pools, 201 pgs
    objects: 281 objects, 302 MiB
    usage:   1.9 GiB used, 43 GiB / 45 GiB avail
    pgs:     201 active+clean

  
##验证radosgw存储池:
 初始化完成radosgw之后,会初始化默认的存储池如下
ceph@ceph-deploy:~/ceph-cluste$ ceph osd pool ls
device_health_metrics
mypool
myrbd1
.rgw.root
default.rgw.log
default.rgw.control
default.rgw.meta

 

posted @   joyjack  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示