Ceph学习---环境搭建
Ceph操作1、准备机器CentOS7四台虚拟机(4C/4G/50G/50G)这个配置是我练习用的,生产请根据实际情况使用2、虚拟机分配如下主机名角色ipNATCephAdminceph-deploy+client192.168.3.189192.168.122.189ceph01mon+osd192.168.3.190192.168.122.190ceph02mon+osd192.168.3.1
Ceph操作
1、准备机器
- CentOS7
- 四台虚拟机(4C/4G/50G/50G)这个配置是我练习用的,生产请根据实际情况使用
2、虚拟机分配如下
主机名 | 角色 | ip | NAT |
---|---|---|---|
CephAdmin | ceph-deploy+client | 192.168.3.189 | 192.168.122.189 |
ceph01 | mon+osd | 192.168.3.190 | 192.168.122.190 |
ceph02 | mon+osd | 192.168.3.191 | 192.168.122.191 |
ceph03 | mon+osd | 192.168.3.192 | 192.168.122.192 |
3、修改yum源
有时候CentOS默认的yum源不一定是国内镜像,导致yum在线安装及更新速度不是很理想,这时候需要yum源设置为国内镜像站点
yum install wget -y
阿里云
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
4、CentOS7 内核升级
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml.x86_64 -y
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-ml-tools.x86_64 -y
awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-editenv list
grub2-set-default 0
reboot
uname -r
5、安装epel仓库
yum update -y && yum install epel-release -y
6、设置主机名
hostnamectl set-hostname cephadmin
hostnamectl set-hostname ceph01
hostnamectl set-hostname ceph02
hostnamectl set-hostname ceph03
7、设置hosts文件
sudo vim /etc/hosts
# 内容如下
192.168.3.189 cephadmin
192.168.3.190 ceph01
192.168.3.191 ceph02
192.168.3.192 ceph03
8、创建用户并设置免密登录
-
创建用户(四台机器上都运行)
useradd -d /home/admin -m admin echo "123456" | passwd admin --stdin echo "admin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/admin sudo chmod 0440 /etc/sudoers.d/admin
-
设置免密登录 (只在cephadmin节点运行)
su - admin ssh-keygen ssh-copy-id admin@ceph01 ssh-copy-id admin@ceph02 ssh-copy-id admin@ceph03
9、修改同步时区(四台机器上都运行)
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo yum install ntp -y
sudo systemctl enable ntpd
sudo systemctl start ntpd
sudo ntpstat
10、安装ceph-deploy并安装ceph软件包
-
配置ceph清华源
cat > /etc/yum.repos.d/ceph.repo<<'EOF' [Ceph] name=Ceph packages for $basearch baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 EOF
-
安装ceph-deploy(只在cephadmin上执行)
sudo yum install ceph-deploy -y
-
所有节点安装 epel-release
sudo yum install epel-release -y
11、初始化mon点(只在cephadmin上执行)
# 进入admin用户
su - admin
mkdir my-cluster
cd my-cluster
-
创建集群
ceph-deploy new {initial-monitor-node(s)}
如:
ceph-deploy new cephadmin ceph01 ceph02 ceph03
情况如下:
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/admin/.cephdeploy.conf [ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy new cephadmin ceph01 ceph02 ceph03 [ceph_deploy.cli][INFO ] ceph-deploy options: [ceph_deploy.cli][INFO ] username : None [ceph_deploy.cli][INFO ] func : <function new at 0x7f8a22d452a8> [ceph_deploy.cli][INFO ] verbose : False [ceph_deploy.cli][INFO ] overwrite_conf : False [ceph_deploy.cli][INFO ] quiet : False [ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f8a22d60ef0> [ceph_deploy.cli][INFO ] cluster : ceph [ceph_deploy.cli][INFO ] ssh_copykey : True [ceph_deploy.cli][INFO ] mon : ['cephadmin', 'ceph01', 'ceph02', 'ceph03'] [ceph_deploy.cli][INFO ] public_network : None [ceph_deploy.cli][INFO ] ceph_conf : None [ceph_deploy.cli][INFO ] cluster_network : None [ceph_deploy.cli][INFO ] default_release : False [ceph_deploy.cli][INFO ] fsid : None [ceph_deploy.new][DEBUG ] Creating new cluster named ceph [ceph_deploy.new][INFO ] making sure passwordless SSH succeeds [cephadmin][DEBUG ] connection detected need for sudo [cephadmin][DEBUG ] connected to host: cephadmin [cephadmin][DEBUG ] detect platform information from remote host [cephadmin][DEBUG ] detect machine type [cephadmin][DEBUG ] find the location of an executable [cephadmin][INFO ] Running command: sudo /usr/sbin/ip link show [cephadmin][INFO ] Running command: sudo /usr/sbin/ip addr show [cephadmin][DEBUG ] IP addresses found: [u'192.168.124.1', u'192.168.3.189', u'192.168.122.189'] [ceph_deploy.new][DEBUG ] Resolving host cephadmin [ceph_deploy.new][DEBUG ] Monitor cephadmin at 192.168.3.189 [ceph_deploy.new][INFO ] making sure passwordless SSH succeeds [ceph01][DEBUG ] connected to host: cephadmin [ceph01][INFO ] Running command: ssh -CT -o BatchMode=yes ceph01 [ceph01][DEBUG ] connection detected need for sudo [ceph01][DEBUG ] connected to host: ceph01 [ceph01][DEBUG ] detect platform information from remote host [ceph01][DEBUG ] detect machine type [ceph01][DEBUG ] find the location of an executable [ceph01][INFO ] Running command: sudo /usr/sbin/ip link show [ceph01][INFO ] Running command: sudo /usr/sbin/ip addr show [ceph01][DEBUG ] IP addresses found: [u'192.168.122.190', u'192.168.124.1', u'192.168.3.190'] [ceph_deploy.new][DEBUG ] Resolving host ceph01 [ceph_deploy.new][DEBUG ] Monitor ceph01 at 192.168.3.190 [ceph_deploy.new][INFO ] making sure passwordless SSH succeeds [ceph02][DEBUG ] connected to host: cephadmin [ceph02][INFO ] Running command: ssh -CT -o BatchMode=yes ceph02 [ceph02][DEBUG ] connection detected need for sudo [ceph02][DEBUG ] connected to host: ceph02 [ceph02][DEBUG ] detect platform information from remote host [ceph02][DEBUG ] detect machine type [ceph02][DEBUG ] find the location of an executable [ceph02][INFO ] Running command: sudo /usr/sbin/ip link show [ceph02][INFO ] Running command: sudo /usr/sbin/ip addr show [ceph02][DEBUG ] IP addresses found: [u'192.168.122.191', u'192.168.3.191', u'192.168.124.1'] [ceph_deploy.new][DEBUG ] Resolving host ceph02 [ceph_deploy.new][DEBUG ] Monitor ceph02 at 192.168.3.191 [ceph_deploy.new][INFO ] making sure passwordless SSH succeeds [ceph03][DEBUG ] connected to host: cephadmin [ceph03][INFO ] Running command: ssh -CT -o BatchMode=yes ceph03 [ceph03][DEBUG ] connection detected need for sudo [ceph03][DEBUG ] connected to host: ceph03 [ceph03][DEBUG ] detect platform information from remote host [ceph03][DEBUG ] detect machine type [ceph03][DEBUG ] find the location of an executable [ceph03][INFO ] Running command: sudo /usr/sbin/ip link show [ceph03][INFO ] Running command: sudo /usr/sbin/ip addr show [ceph03][DEBUG ] IP addresses found: [u'192.168.3.192', u'192.168.124.1', u'192.168.122.192'] [ceph_deploy.new][DEBUG ] Resolving host ceph03 [ceph_deploy.new][DEBUG ] Monitor ceph03 at 192.168.3.192 [ceph_deploy.new][DEBUG ] Monitor initial members are ['cephadmin', 'ceph01', 'ceph02', 'ceph03'] [ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.3.189', '192.168.3.190', '192.168.3.191', '192.168.3.192'] [ceph_deploy.new][DEBUG ] Creating a random mon key... [ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring... [ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...
-
修改
ceph.conf
vim /home/admin/my-cluster/ceph.conf # 添加如下内容 public network = 192.168.3.0/24 cluster network = 192.168.122.0/24 osd pool default size = 3 osd pool default min size = 2 osd pool default pg num = 128 osd pool default pgp num = 128 osd pool default crush rule = 0 osd crush chooseleaf type = 1 max open files = 131072 ms bing ipv6 = false [mon] mon clock drift allowed = 10 mon clock drift warn backoff = 30 mon osd full ratio = .95 mon osd nearfull ratio = .85 mon osd down out interval = 600 mon osd report timeout = 300 mon allow pool delete = true [osd] osd recovery max active = 3 osd max backfills = 5 osd max scrubs = 2 osd mkfs type = xfs osd mkfs options xfs = -f -i size=1024 osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog filestore max sync interval = 5 osd op threads = 2
12、安装Ceph软件到指定节点
ceph-deploy install --no-adjust-repos cephadmin ceph01 ceph02 ceph03
–no-adjust-repos是直接使用本地源,不生成官方源
部署初始的monitors,并获得keys
ceph-deploy mon create-initial
做完这一步,在当前目录下就会看到有如下的keyrings:
ls -al /home/cephadmin/my-cluster
drwxrwxr-x 2 admin admin 4096 10月 27 10:46 .
drwx------ 7 admin admin 177 10月 27 10:36 ..
-rw------- 1 admin admin 113 10月 27 10:46 ceph.bootstrap-mds.keyring
-rw------- 1 admin admin 113 10月 27 10:46 ceph.bootstrap-mgr.keyring
-rw------- 1 admin admin 113 10月 27 10:46 ceph.bootstrap-osd.keyring
-rw------- 1 admin admin 113 10月 27 10:46 ceph.bootstrap-rgw.keyring
-rw------- 1 admin admin 151 10月 27 10:46 ceph.client.admin.keyring
-rw-rw-r-- 1 admin admin 1107 10月 27 10:36 ceph.conf
-rw-rw-r-- 1 admin admin 237600 10月 27 10:46 ceph-deploy-ceph.log
-rw------- 1 admin admin 73 10月 27 10:20 ceph.mon.keyring
将配置文件和密钥复制到集群各节点
配置文件就是生成的ceph.conf,而密钥是ceph.client.admin.keyring,当使用ceph客户端连接至ceph集群时需要使用的密默认密钥,这里我们所有节点都要复制,命令如下
ceph-deploy admin cephadmin ceph01 ceph02 ceph03
13、部署ceph-mgr
#在L版本的`Ceph`中新增了`manager daemon`,如下命令部署一个`Manager`守护进程
[admin@node1 my-cluster]$ ceph-deploy mgr create cephadmin
14、创建OSD
在cephadmin
上执行以下命令
#用法:ceph-deploy osd create –data {device} {ceph-node}
ceph-deploy osd create --data /dev/sdb cephadmin
ceph-deploy osd create --data /dev/sdb ceph01
ceph-deploy osd create --data /dev/sdb ceph02
ceph-deploy osd create --data /dev/sdb ceph03
15、检查osd状态
sudo ceph health
sudo ceph -s
默认情况下ceph.client.admin.keyring文件的权限为600,属主和属组为root,如果在集群内节点使用cephadmin用户直接直接ceph命令,将会提示无法找到/etc/ceph/ceph.client.admin.keyring
文件,因为权限不足
如果使用sudo ceph
不存在此问题,为方便直接使用ceph
命令,可将权限设置为644。在集群节点上面cephadmin
节点上admin
用户下执行下面命令
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
ceph -s
16、查看osds
sudo ceph osd tree
17、开启MGR监控模块
安装ceph-mgr-dashboard
,在mgr的节点上安装(四台机器)
yum install ceph-mgr-dashboard -y
-
方式一:命令操作
ceph mgr module enable dashboard
-
方式二:配置文件
vim /home/cephadmin/my-cluster/ceph.conf # 内容如下 [mon] mgr initial modules = dashboard # 推送配置 ceph-deploy --overwrite-conf config push cephadmin ceph01 ceph02 ceph03 # 重启mgr systemctl restart ceph-mgr@cephadmin ceph-mgr@ceph01 ceph-mgr@ceph02 ceph-mgr@ceph03
18、Web登录配置
默认情况下,仪表板的所有HTTP连接均使用SSL/TLS进行保护
-
方法一
#要快速启动并运行仪表板,可以使用以下内置命令生成并安装自签名证书: 用root权限 [root@node1 my-cluster]# ceph dashboard create-self-signed-cert #创建具有管理员角色的用户: [root@node1 my-cluster]# ceph dashboard set-login-credentials admin Xuexi123 #查看ceph-mgr服务: [root@node1 my-cluster]# ceph mgr services { "dashboard": "https://cephadmin:8443/" }
-
方法二
ceph config-key set mgr/dashboard/server_port 8080 # 设置端口为8080 ceph config-key set mgr/dashboard/server_addr 192.168.3.189 # 设置绑定ip ceph config set mgr mgr/dashboard/ssl false # 因为是内网使用,所以关闭ssl # 重启一下dashboard ceph mgr module disable dashboard ceph mgr module enable dashboard ceph dashboard set-login-credentials admin Xuexi123 # 设置用户名密码
19、把 CEPH 当服务运行
如果你是用 ceph-deploy
部署 Argonaut 或 Bobtail 的,那么 Ceph 可以作为服务运行(还可以用 sysvinit )
启动所有守护进程
要启动你的 Ceph 集群,执行 ceph
时加上 start
命令,语法:
sudo service ceph [options] [start|restart] [daemonType|daemonID]
如:
sudo service ceph -a start
20、监控集群
集群运行起来后,你可以用 ceph
工具来监控,典型的监控包括检查 OSD 状态、监视器状态、归置组状态和元数据服务器状态。
-
交互模式
要在交互模式下运行ceph,不要带参数运行 ceph
ceph ceph> health ceph> status ceph> quorum_status ceph> mon_status
-
检查集群健康状况
启动集群后、读写数据前,先检查下集群的健康状态。你可以用下面的命令检查
ceph health
集群起来的时候,你也许会碰到像
HEALTH_WARN XXX num placement groups stale
这样的健康告警,等一会再检查下。集群准备好的话ceph health
会给出像HEALTH_OK
一样的消息,这时候就可以开始使用集群了 -
观察集群
要观察集群内正发生的事件,打开一个新终端,然后输入
ceph -w
Ceph 会打印各种事件。例如一个包括 1 个监视器、和 2 个 OSD 的小型 Ceph 集群可能会打印出这些
21、常用用法
# 检查集群状态
ceph status
ceph -s
ceph> status
# 检查OSD状态
ceph osd stat
ceph osd dup
ceph osd tree
# 检查监视器状态
ceph mon stat
ceph mon dump
ceph quorum_status
# 检查MDS状态
ceph mds stat
ceph mds dump
22、创建存储池
创建存储池时,它会创建指定数量的归置组。 Ceph 在创建一或多个归置组时会显示 creating
;创建完后,在其归置组的 Acting Set 里的 OSD 将建立互联;一旦互联完成,归置组状态应该变为 active+clean
,意思是 Ceph 客户端可以向归置组写入数据了
# 列出存储池
ceph osd lspools
# 创建存储池
osd pool default pg num = 100
osd pool default pgp num = 100
# 创建存储此
ceph osd pool create test 2
#################
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
少于 5 个 OSD 时可把 pg_num 设置为 128
OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
自己计算 pg_num 取值时可借助 pgcalc 工具
#######################
# 删除存储池
ceph osd pool delete test test --yes-i-really-really-mean-it
# 重命名存储池
ceph osd pool rename {current-pool-name} {new-pool-name}
# 查看存储池统计信息
rados df # 要查看某存储池的使用统计信息
# 拍下存储池的快照
ceph osd pool mksnap {pool-name} {snap-name}
# 删除存储池的快照
ceph osd pool rmsnap {pool-name} {snap-name}
# 调整存储池选项值
cph osd pool set {pool-name} {key} {value} # http://docs.ceph.org.cn/rados/operations/pools/
23、Ceph扩容
原来
主机名 | 角色 | ip | NAT |
---|---|---|---|
CephAdmin | ceph-deploy+client | 192.168.3.189 | 192.168.122.189 |
ceph01 | mon+osd | 192.168.3.190 | 192.168.122.190 |
ceph02 | mon+osd | 192.168.3.191 | 192.168.122.191 |
ceph03 | mon+osd | 192.168.3.192 | 192.168.122.192 |
新增
主机名 | 角色 | ip | NAT |
---|---|---|---|
CephAdmin | ceph-deploy+client | 192.168.3.189 | 192.168.122.189 |
ceph01 | mon+osd | 192.168.3.190 | 192.168.122.190 |
ceph02 | mon+osd | 192.168.3.191 | 192.168.122.191 |
ceph03 | mon+osd | 192.168.3.192 | 192.168.122.192 |
ceph04 | mon+osd | 192.168.3.193 | 192.168.122.193 |
生产环境中,一般不会在新节点加入ceph集群后,立即开始数据回填,这样会影响集群性能。所以我们需要设置一些标志位,来完成这个目的
ceph osd set noin # 设置标志位
ceph osd set nobackfill # 设置不回填数据标志
在用户访问的非高峰时,取消这些标志位,集群开始在平衡任务
ceph osd unset noin # 取消设置标志位
ceph osd unset nobackfill # 取消不回填数据标志
-
修改所有节点hosts文件,添加新增节点192.168.3.193 ceph04
vim /etc/hosts # 内容如下 192.168.3.189 cephadmin 192.168.3.190 ceph01 192.168.3.191 ceph02 192.168.3.192 ceph03 192.168.3.193 ceph04
-
修改ceph04的主机名和hosts
hostnamectl set-hostname ceph04
-
创建用户
useradd -d /home/admin -m admin echo "123456" | passwd admin --stdin echo "admin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/admin sudo chmod 0440 /etc/sudoers.d/admin
-
设置免密登录 (只在cephadmin节点运行)
su - admin ssh-copy-id admin@ceph04
-
修改同步时区(新增的机器上运行)
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime sudo yum install ntp -y sudo systemctl enable ntpd sudo systemctl start ntpd sudo ntpstat
-
配置ceph清华源
cat > /etc/yum.repos.d/ceph.repo<<'EOF' [Ceph] name=Ceph packages for $basearch baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=https://mirror.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirror.tuna.tsinghua.edu.cn/ceph/keys/release.asc priority=1 EOF
-
ceph04节点安装ceph和ceph-radosgw
yum install ceph ceph-radosgw -y
-
在**cephadmin**节点上修改
ceph.conf
文件vim /home/admin/my-cluster # 修改内容如下 mon_initial_members = cephadmin, ceph01, ceph02, ceph03, ceph04 # 添加了ceph04
-
将监视器添加到现有集群
ceph-deploy --overwrite-conf mon add ceph04 --address 192.168.3.193
-
扩展rgw
ceph-deploy --overwrite-conf rgw create ceph04
-
扩展mgr
ceph-deploy --overwrite-conf mgr create ceph04
-
查看
ceph.conf
cat /home/admin/my-cluster/ceph.conf # 内容如下 [global] fsid = 7218408f-9951-49d7-9acc-857f63369a84 mon_initial_members = cephadmin, ceph01, ceph02, ceph03, ceph04 mon_host = 192.168.3.189,192.168.3.190,192.168.3.191,192.168.3.192,192.168.3.193 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public network = 192.168.3.0/24 cluster network = 192.168.122.0/24
-
在管理节点把配置文件和 admin 密钥拷贝到Ceph 节点
ceph-deploy --overwrite-conf admin ceph01 ceph02 ceph03 ceph04
-
创建osd,添加新节点
ceph04
的sdb到存储池中ceph-deploy osd create --data /dev/sdb ceph04
24、Ceph 文件存储系统
Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据。 Ceph 文件系统与 Ceph 块设备、同时提供 S3 和 Swift API 的 Ceph 对象存储、或者原生库( librados )一样,都使用着相同的 Ceph 存储集群系统。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLOCJ9vP-1646786989987)(D:\gaowen\最新工作\Ceph\Ceph_new\图片\微信截图_20211102102731.png)]
25、Ceph块设备
块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软盘、甚至传统的 9 磁道磁带。无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选
Ceph 块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。 Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互
26、Ceph块存储使用
部署完Ceph集群之后,如何在Ceph集群中存储文件呢?ceph提供了三种接口供用户使用,分别是:
- rbd,块存储,以块的方式使用,通常适用于和虚拟化如KVM结合,用于给虚拟化提供块存储设备
- object storage,对象存储,通过radosgw提供对象存储api,供用户上传put和get下载对象文件
- cephfs文件存储,以cephfs挂载文件系统的方式使用ceph
在Ceph集群中创建一个RBD块文件供用户进行使用,要使用Ceph,首先需要一个资源池pool,pool是Ceph中数据存储抽象的概念,其由多个pg(Placegroup)和pgp组成,创建的时候可以指定pg的数量,pg的大小一般为2^n次方,如下先创建一个pool
1、创建pool,其名字为test,包含128个PG/PGP
```shell
ceph osd pool create test 128 128
```
2、可以查看pool的信息,如查看当前集群的pool列表——lspools,查看pg_num和pgp_num,副本数size大小
# 查看pool列表
ceph osd lspools
# 查看pg和pgp数量
ceph osd pool get test pg_num
ceph osd pool get test pgp_num
# 查看size大小,默认为三副本
ceph osd pool get test size
3、此时pool已经创建好,可以在pool中创建RBD块,通过rbd命令来实现RBD块的创建,如创建一个10G的块存储
rbd create -p test --image ceph-rbd-demo.img --size 10G
如上创建了一个ceph-rbd-demo.img的RBD块文件,大小为10G,可以通过ls和info查看RBD镜像的列表和详情信息
# 查看RBD镜像列表
rbd -p test ls
# 查看RBD详情,可以看到镜像包含2560个objects,每个ojbect大小为4M,对象以rbd_data.10b96b8b4567开头
rbd -p test info ceph-rbd-demo.img
4、RBD存储块已经创建起来,如果已经和虚拟环境结合,创建好虚拟机,然后在磁盘中写入数据即可,rbd提供了一个map的工具,可以将一个RBD块映射到本地进行使用,大大简化了使用过程,rbd map的时候,exclusive-lock object-map fast-diff deep-flatten的features不支持,因此需要先disable,负责会提示RBD的报错
# 关闭默认的featrues
rbd -p test --image ceph-rbd-demo.img feature disable deep-flatten && \
rbd -p test --image ceph-rbd-demo.img feature disable fast-diff && \
rbd -p test --image ceph-rbd-demo.img feature disable object-map && \
rbd -p test --image ceph-rbd-demo.img feature disable exclusive-lock
# 查看校验feature信息
rbd -p test info ceph-rbd-demo.img
# 将RBD块map到本地,此时map后,可以看到RBD块设备映射到了本地的一个/dev/rbd0设备上
rbd map -p test --image ceph-rbd-demo.img
ls -l /dev/rbd0
5、RBD块设备已映射到本地的/dev/rbd0设备上,因此可以对设备进行格式化操作使用
通过device list可以查看到当前机器RBD块设备的映射情况
[root@node-1 ~]# ls -l /dev/rbd0
该设备可以像本地的一个盘来使用,因此可以对其进行格式化操作
[root@node-1 ~]# mkfs.xfs /dev/rbd0
[root@node-1 ~]# blkid /dev/rbd0
挂载磁盘到系统中
mkdir /mnt/test-rbd
mount /dev/rbd0 /mnt/test-rbd
df -h /mnt/test-rbd
cd /mnt/test-rbd
echo "testfile for ceph rbd" > rbd.log
6、块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软盘、甚至传统的 9 磁道磁带。无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选
Ceph 块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。 Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互。
Ceph 块设备靠无限伸缩性提供了高性能,如向内核模块、或向 abbr:KVM (kernel virtual machines) (如 Qemu 、 OpenStack 和 CloudStack 等云计算系统通过 libvirt 和 Qemu 可与 Ceph 块设备集成)。你可以用同一个集群同时运行 Ceph RADOS 网关、 Ceph FS 文件系统、和 Ceph 块设备。
-
常用的块设备命令
rbd
命令可用于创建、罗列、内省和删除块设备映像,也可以克隆映像、创建快照、回滚快照、查看快照等,rbd
命令用法详情见RBD-管理RADOS块设备映像# 创建块设备映像 要想把块设备加入某节点,得先在Ceph集群中创建一个映像 rbd create --size {megabytes} {pool-name}/{image-name} # 例如,要在 test 这个存储池中创建一个名为 foo 、大小为 1GB 的映像 rbd create --size 1024 test/foo
# 罗列块设备映像 要列出rbd存储池中得块设备,可以使用下列命令 rbd ls {poolname} # 如: rbd ls test
# 检索映像信息 用下列命令检索某个特定映像得信息,用映像名字替换{image-name} rbd info {pool-name}/{image-name} # 如 rbd info test/foo
# 调整块设备映像大小 Ceph 块设备映像是精简配置,只有在你开始写入数据时它们才会占用物理空间。然而,它们都有最大容量,就是你设置的 --size 选项。如果你想增加(或减小) Ceph 块设备映像的最大尺寸,执行下列命令: rbd resize --size 2048 foo (to increase) rbd resize --size 2048 foo --allow-shrink (to decrease)
# 删除块设备映像 可用下列命令删除块设备,用映像名字替换 {image-name} rbd rm {image-name} # 如 rbd rm foo
27、块设备命令
# 创建块设备映像--要想把块设备加入某节点,你得先在 Ceph 存储集群中创建一个映像,使用下列命令:
rbd create --size {megabytes} {pool-name}/{image-name}
# 例如,要在 swimmingpool 这个存储池中创建一个名为 bar 、大小为 1GB 的映像,执行
rbd create --size 1024 swimmingpool/bar
# 罗列块设备映像--要列出 rbd 存储池中的块设备,可以用下列命令(即 rbd 是默认存储池名字):
rbd ls {poolname}
# 例如
rbd ls test
# 检索映像信息--用下列命令检索某个特定映像的信息,用映像名字替换 {image-name} :
rbd info {image-name}
rbd info {pool-name}/{image-name}
# 调整块设备映像大小--Ceph 块设备映像是精简配置,只有在你开始写入数据时它们才会占用物理空间。然而,它们都有最大容量,就是你设置的 --size 选项。如果你想增加(或减小) Ceph 块设备映像的最大尺寸,执行下列命令
rbd resize --size 2048 foo (to increase)
rbd resize --size 2048 foo --allow-shrink (to decrease)
# 删除块设备映像--可用下列命令删除块设备,用映像名字替换 {image-name} :
rbd rm {pool-name}/{image-name}
rbd rm swimmingpool/bar
28、内核模块操作
# 获取映像列表--要挂载块设备映像,先罗列出所有的映像
rbd list {pool-name}
# 映射块设备,用 rbd 把映像名映射为内核模块。必须指定映像名、存储池名、和用户名。若 RBD 内核模块尚未加载, rbd 命令会自动加载
sudo rbd map {pool-name}/{image-name} --id {user-name}
# 例如
sudo rbd map rbd/myimage --id admin
# 如果你启用了 cephx 认证,还必须提供密钥,可以用密钥环或密钥文件指定密钥
sudo rbd map rbd/myimage --id admin --keyring /path/to/keyring
sudo rbd map rbd/myimage --id admin --keyfile /path/to/file
# 查看已映射块设备--可以用 rbd 命令的 showmapped 选项查看映射为内核模块的块设备映像
rbd showmapped
# 取消块设备映射--要取消块设备映射,用 rbd 命令、指定 unmap 选项和设备名,即为方便起见使用的同名块设备映像。
sudo rbd unmap /dev/rbd/{poolname}/{imagename}
sudo rbd unmap /dev/rbd/rbd/foo
29、RBD的快照
快照是映像在某个特定时间点的一份只读副本。 Ceph 块设备的一个高级特性就是你可以为映像创建快照来保留其历史。 Ceph 还支持分层快照,让你快速、简便地克隆映像(如 VM 映像)。 Ceph 的快照功能支持 rbd
命令和多种高级接口,包括 QEMU 、 libvirt 、 OpenStack 和 CloudStack 。
要使用 RBD 快照功能,你必须有一个在运行的 Ceph 集群。
Note
如果在做快照时映像仍在进行 I/O 操作,快照可能就获取不到该映像准确的或最新的数据,并且该快照可能不得不被克隆到一个新的可挂载的映像中。所以,我们建议在做快照前先停止 I/O 操作。如果映像内包含文件系统,在做快照前请确保文件系统处于一致的状态。要停止 I/O 操作可以使用 fsfreeze 命令。详情可参考 fsfreeze(8) 手册页。对于虚拟机,qemu-guest-agent 被用来在做快照时自动冻结文件系统。
启用了 cephx 时(默认的),你必须指定用户名或 ID 、及其对应的密钥文件,详情见用户管理。你也可以用 CEPH_ARGS
环境变量来避免重复输入下列参数
rbd --id {user-ID} --keyring=/path/to/secret [commands]
rbd --name {username} --keyring=/path/to/secret [commands]
# 例如
rbd --id admin --keyring=/etc/ceph/ceph.keyring [commands]
rbd --name client.admin --keyring=/etc/ceph/ceph.keyring [commands]
# 创建快照--用 rbd 命令创建快照,要指定 snap create 选项、存储池名和映像名
rbd snap create {pool-name}/{image-name}@{snap-name}
# 例如
rbd snap create test/test@test1
# 罗列快照--列出某个映像的快照,需要指定存储池名和映像名
rbd snap ls {pool-name}/{image-name}
# 例如
rbd snap ls rbd/foo
# 回滚快照--用 rbd 命令回滚到某一快照,指定 snap rollback 选项、存储池名、映像名和快照名
rbd snap rollback {pool-name}/{image-name}@{snap-name}
# 例如
rbd snap rollback rbd/foo@snapname
Note
把映像回滚到某一快照的意思是,用快照中的数据覆盖映像的当前版本,映像越大,此过程花费的时间就越长。从快照克隆要快于回滚到某快照,这也是回到先前状态的首选方法。
# 删除快照--要用 rbd 删除一快照,指定 snap rm 选项、存储池名、映像名和快照名
rbd snap rm {pool-name}/{image-name}@{snap-name}
# 例如
rbd snap rm rbd/foo@snapname
Note
Ceph OSDs 异步地删除数据,所以删除快照后不会立即释放磁盘空间。
# 清除快照--要用 rbd 删除某个映像的所有快照,指定 snap purge 选项、存储池名和映像名
rbd snap purge {pool-name}/{image-name}
# 例如
rbd snap purge test/test
30、RBD镜像
可以在两个 Ceph 集群中异步备份 RBD images。该能力利用了 RBD image 的日志特性,以确保集群间的副本崩溃一致性。镜像功能需要在同伴集群( peer clusters )中的每一个对应的 pool 上进行配置,可设定自动备份某个存储池内的所有 images 或仅备份 images 的一个特定子集。用 rbd
命令来配置镜像功能。 rbd-mirror
守护进程负责从远端集群拉取 image 的更新,并写入本地集群的对应 image 中
# 存储池配置--下面的程序说明了如何执行一些基本的管理工作,来用 rbd 命令配置镜像功能。镜像功能是在 Ceph 集群内的存储池级别上配置的 配置存储池的步骤需要在 2 个同伴集群内都执行一遍。为清楚起见,下面的步骤假定这两个集群分别叫做“本地(local)”和“远端(remote)”,而且单主机对这 2 个集群都拥有访问权
# 启用镜像功能--使用 rbd 启用某个存储池的镜像功能,需要指定 mirror pool enable 命令,存储池名和镜像模式
rbd mirror pool enable {pool-name} {mode}
镜像模式可以是 pool
或 image
:
- pool:当设定为
pool
模式,存储池中所有开启了日志特性的 images 都会被备份。 - image:当设定为
image
模式,需要对每个 image 显式启用镜像功能
例如
rbd --cluster local mirror pool enable test pool
rbd --cluster remote mirror pool enable test pool
# 禁用镜像功能--使用 rbd 禁用某个存储池的镜像功能,需要指定 mirror pool disable 命令和存储池名:
rbd mirror pool disable {pool-name}
# 例如
rbd --cluster local mirror pool disable test
rbd --cluster remote mirror pool disable test-gw
# 添加同伴集群--为了使 rbd-mirror 守护进程发现它的同伴集群,需要向存储池注册。使用 rbd 添加同伴 Ceph 集群,需要指定 mirror pool peer add 命令、存储池名和集群说明
rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}
# 例如
rbd --cluster local mirror pool peer add test client.remote@remote
rbd --cluster remote mirror pool peer add test client.local@local
# 移除同伴集群--使用 rbd 移除同伴 Ceph 集群,指定 mirror pool peer remove 命令、存储池名和同伴的 UUID(可通过 rbd mirror pool info 命令获取)
rbd mirror pool peer remove {pool-name} {peer-uuid}
# 例如
rbd --cluster local mirror pool peer remove image-pool 55672766-c02b-4729-8567-f13a66893445
rbd --cluster remote mirror pool peer remove image-pool 60c0e299-b38f-4234-91f6-eed0a367be08
-
IMAGE配置
不同于存储池配置,image 配置只需针对单个 Ceph 集群操作
镜像 RBD image 被指定为主镜像或者副镜像。这是 image 而非存储池的特性。被指定为副镜像的 image 不能被修改
当一个 image 首次启用镜像功能时(存储池的镜像模式设为 pool 且启用了该 image 的日志特性,或者通过
rbd
命令显式启用),它会自动晋升为主镜像
启用IMAGE的日志支持
RBD 镜像功能使用了 RBD 日志特性,来保证 image 副本间的崩溃一致性。在备份 image 到另一个同伴集群前,必须启用日志特性。该特性可在使用 rbd
命令创建 image 时通过指定 --image-feature exclusive-lock,journaling
选项来启用。
或者,可以动态启用已有 image 的日志特性。使用 rbd
开启日志特性,需要指定 feature enable
命令,存储池名,image 名和特性名:
rbd feature enable {pool-name}/{image-name} {feature-name}
# 例如
rbd --cluster local feature enable image-pool/image-1 journaling
# 启用 IMAGE 镜像功能--如果把某个存储池的镜像功能配置为 image 模式,还需要对存储池中的每一个 image ,明确启用镜像功能。通过 rbd 启用某个特定 image 的镜像功能,要指定 mirror image enable 命令、存储池名和 image 名
rbd mirror image enable {pool-name}/{image-name}
# 禁用 IMAGE 镜像功能--通过 rbd 禁用某个特定 image 的镜像功能,要指定 mirror image disable 命令、存储池名和 image 名
rbd mirror image disable {pool-name}/{image-name}
# 例如
rbd --cluster local mirror image disable test/image-1
31、QEMU与块设备
Ceph 块设备最常见的用法之一是作为虚拟机的块设备映像。例如,用户可创建一个安装、配置好了操作系统和相关软件的“黄金标准”映像,然后对此映像做快照,最后再克隆此快照(通常很多次)。详情参见快照。能制作快照的写时复制克隆意味着 Ceph 可以快速地为虚拟机提供块设备映像,因为客户端每次启动一个新虚拟机时不必下载整个映像。
Ceph 块设备可以和 QEMU 虚拟机集成到一起,关于 QEMU 可参考 QEMU 开源处理器仿真器,其文档可参考 QEMU 手册。关于如何安装见安装
-
用法
QEMU 命令行要求你指定 存储池名和映像名,还可以指定快照名。
QEMU 会假设 Ceph 配置文件位于默认位置(如
/etc/ceph/$cluster.conf
),并且你是以默认的client.admin
用户执行命令,除非你另外指定了其它 Ceph 配置文件路径或用户。指定用户时, QEMU 只需要ID
部分,无需完整地指定TYPE:ID
,详情见用户管理——用户
_。不要在用户ID
前面加客户端类型(即client.
),否则会认证失败。还应该把admin
用户、或者你用:id={user}
选项所指定用户的密钥文件保存到默认路径(即/etc/ceph
)或本地目录内,并修正密钥环文件的所有权和权限。命令格式如下qemu-img {command} [options] rbd:{pool-name}/{image-name}[@snapshot-name][:option1=value1][:option2=value2...] # 例如,应该这样指定 id 和 conf 选项: qemu-img {command} [options] rbd:test/ceph-rbd-demo.img:id=glance:conf=/etc/ceph/ceph.conf # Tip 配置中的值如果包含这些字符: : 、 @ 、 = ,可在此符号前加反斜线 \ 转义。
-
用QEMU创建映像
你可以用 QEMU 创建块设备映像。必须指定
rbd
、存储池名、要创建的映像名以及映像尺寸qemu-img create -f raw rbd:{pool-name}/{image-name} {size} # 如 qemu-img create -f raw rbd:test/vm-test 10G # raw 数据格式是使用 RBD 时的唯一可用 format 选项。从技术上讲,你可以使用 QEMU 支持的其他格式(例如 qcow2 或 vmdk),但是这样做可能会带来额外开销,而且在开启缓存(见下)模式下进行虚拟机的热迁移时会导致卷的不安全性。
-
用QEMU更改映像尺寸
你可以通过QEMU调整块设备大小。必须指定rbd、存储池名、要调整的映像名,还有映像尺寸
qemu-img resize rbd:{pool-name}/{image-name} {size} # 例如 qemu-img resize rbd:test/vm-test 12G
-
用QEMU检索映像信息
你可以用 QEMU 检索块设备映像信息。必须指定
rbd
、存储池名和映像名qemu-img info rbd:{pool-name}/{image-name} # 例如 qemu-img info rbd:test/vm-test
-
通过RBD运行QEMU
QEMU能把一主机上的块设备传递给客户机,但从QEMU 0.15起,不需要在主机上把映像映射为块设备了,QEMU现在能通过librbd直接把映像作为虚拟块设备访问。这样性能更好,因为它避免了额外的上下文切换,而且能例用开启RBD缓存带来的好处
你可以用
qemu-img
把已有的虚拟机映像转换为Ceph块设备映像qemu-img convert -f qcow2 -O raw debian_squeeze.qcow2 rbd:data/squeeze
要从那个映像启动虚拟机,执行
qemu-system-x86_64 -m 1024 -drive format=raw,file=rbd:test/vm-test
32、通过libvirt使用Ceph RBD
libvirt
库是管理程序和软件应用间的一个虚拟机抽象层。通过 libvirt
,开发者和系统管理员只需要关注这些管理器的一个通用管理框架、通用 API 、和通用 shell 接口(即 virsh
)即可,包括:
- QEMU/KVM
- XEN
- LXC
- VirtualBox
- 等等
Ceph 块设备支持 QEMU/KVM ,所以你可以通过能与 libvirt
交互的软件来使用 Ceph 块设备。下面的堆栈图解释了 libvirt
和 QEMU 如何通过 librbd
使用 Ceph 块设备
要创建使用 Ceph 块设备的虚拟机,请参照下文中的步骤。在示范性实施例中,我们用 test
作为存储池名、 client.libvirt
作为用户名、 new-libvirt-image
作为映像名。你可以任意命名,但请确保在后续过程中用自己的名字替换掉对应名字。
1、配置Ceph
配置Ceph用于libvirt,执行下列步骤
# 1、创建——存储池(或者用默认的)。本例用 test-gw 作存储池名,设定了 128 个归置组
ceph osd pool create test-gw 128 128
# 验证存储池是否存在
ceph osd lspools
# 2、创建--Ceph用户 本例用client.libvirt,且权限限制到test-gw
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=test-gw'
# 验证名字是否存在
ceph auth list
# 注: libvirt 访问 Ceph 时将用 libvirt 作为 ID ,而不是 client.libvirt 。关于 ID 和名字不同之处的详细解释请参考用户管理——用户和用户管理——命令行界面。
# 3、用 QEMU 在 RBD 存储池中创建映像。本例中映像名为 test-gw-img 、存储池为 test-gw
qemu-img create -f rbd rbd:test/vm-test-1 10G
# 验证映像是否存在
rbd -p test ls
-
准备虚拟机管理器
即使没有 VM 管理器你也可以用
libvirt
,但是用virt-manager
创建域更简单-
安装虚拟机管理器
yum install qemu-kvm libvirt virt-manager libguestfs-tools virt-install.noarch -y
-
下载iso映像
-
启动虚拟机管理器
virt-manager
-
33、CEPH文件系统
Ceph 文件系统( Ceph FS )是个 POSIX 兼容的文件系统,它使用 Ceph 存储集群来存储数据。 Ceph 文件系统与 Ceph 块设备、同时提供 S3 和 Swift API 的 Ceph 对象存储、或者原生库( librados )一样,都使用着相同的 Ceph 存储集群系统
Ceph 文件系统要求 Ceph 存储集群内至少有一个 Ceph 元数据服务器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r659RjXV-1646786989988)(C:\Users\gaowen\AppData\Roaming\Typora\typora-user-images\image-20211108140625151.png)]
34、增加/删除元数据服务器
用 ceph-deploy
增加和拆除元数据服务器很简单,只要一个命令就可以增加或拆除一或多个元数据服务器
-
增加一元数据服务器
部署完监视器和 OSD 后,还可以部署元数据服务器
ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] ...]
# 例如
ceph-deploy --overwrite-conf mds create cephadmin ceph01 ceph02 ceph03 ceph04
- 创建CEPH文件系统
一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池时需考虑:
- 为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效
- 为元数据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时
关于存储池的管理请参考 存储池 。例如,要用默认设置为文件系统创建两个存储池,你可以用下列命令:
ceph osd pool create cephfs_data <pg_num>
ceph osd pool create cephfs_metadata <pg_num>
# 例如
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
创建好存储池后,你就可以用 fs new
命令创建文件系统了:
ceph fs new <fs_name> <metadata> <data>
# 例如
ceph fs new cephfs cephfs_metadata cephfs_data
ceph fs ls
文件系统创建完毕后, MDS 服务器就能达到 active 状态了,比如在一个单 MDS 系统中
ceph mds stat
e5: 1/1/1 up {0=a=up:active}
建好文件系统且 MDS 活跃后,你就可以挂载此文件系统了
- 用内核驱动挂载CEPH文件系统
要挂载 Ceph 文件系统,如果你知道监视器 IP 地址可以用 mount
命令、或者用 mount.ceph
工具来自动解析监视器 IP 地址。例如
mkdir /mnt/mycephfs
mount -t ceph 192.168.3.189:6789:/ /mnt/mycephfs
要挂载启用了 cephx
认证的 Ceph 文件系统,你必须指定用户名、密钥
sudo mount -t ceph 192.168.3.189:6789:/ /mnt/mycephfs -o name=admin,secret=AQD6vHhhQUDvJRAAX1BL9kwEX0qtjsFDW1wSMA==
- 用户空间挂载CEPH文件系统
Ceph v0.55 及后续版本默认开启了 cephx
认证。从用户空间( FUSE )挂载一 Ceph 文件系统前,确保客户端主机有一份 Ceph 配置副本、和具备 Ceph 元数据服务器能力的密钥环
1、在客户端主机上,把监视器主机上的 Ceph 配置文件拷贝到 /etc/ceph/
目录下
mkdir -p /etc/ceph
scp {user}@{server-machine}:/etc/ceph/ceph.conf /etc/ceph/ceph.conf
chmod -R 644 /etc/ceph
要把 Ceph 文件系统挂载为用户空间文件系统,可以用 ceph-fuse
命令,例如
mkdir /home/gw/cephfs && \
yum install ceph-fuse -y && \
ceph-fuse -m 192.168.3.189:6789 /home/gw/cephfs
mds状态
查看mds状态
ceph mds stat
更多推荐
所有评论(0)