Ceph学习全过程
1.安装ceph
1.1 ceph概述
ceph monitor
客户端从monitor进程获取整个集群得信息,一般确保是奇数个就好,所以要确保它得高可用性。
osd进程
存储数据得地方,osd会定期把状态上报给monitor,monitor也会定期检测osd。
monitor map 记录集群得状况
osd map 对象得副本
pg map 类似一个目录数据放在pg,pg再把数据放到osd
crush map 数据可以存放在磁盘上面
1.2 ceph安装
环境配置
主机名 | public IP | cluster IP | 数据盘 |
---|---|---|---|
node1 | 192.168.1.2 | 172.16.1.2 | /dev/sdb、/dev/sdc |
node2 | 192.168.1.3 | 172.16.1.3 | /dev/sdb、/dev/sdc |
node3 | 192.168.1.4 | 172.16.1.4 | /dev/sdb、/dev/sdc |
hosts文件
cat>>/etc/hosts<<EOF
192.168.1.2 node1
192.168.1.3 node2
192.168.1.4 node3
EOF
-
配置ssh相互免密
-
关闭防火墙
-
关闭selinux
-
关闭NetworkManager
很简单不做笔记。
1.2.1 先同步时间
ntpdate ntp1.aliyun.com
1.2.2 更改yum源
cat>/etc/yum.repos.d/ceph.repo<<EOF
[ceph]
name=Ceph packages for \$basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
EOF
# 装不上,执行下yum clean all
1.2.3 安装ceph-deploy工具
# 在任意节点安装,只是个安装ceph集群的工具。它会通过ssh的方式来控制节点。
yum -y install ceph-deploy python-setuptools
# 后面的操作都在这个文件目录里面操作
mkdir my-cluster && cd my-cluster
1.2.4 创建monitor
# 将node1变为monitor
ceph-deploy new --public-network 192.168.1.0/24 --cluster-network 172.16.1.0/24 node1
--public-network # 用户访问ceph
--cluster-network #集群内数据同步
# 实际上是生成一个ceph.conf的配置文件。
1.2.5 安装ceph组件
# 如果直接使用ceph-deploy install hostname 会更改成为官方的yum源,导致安装超时而报错。
# 在三个高可用的节点安装.我选择的是node1、2、3
yum -y install ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
ceph 是核心组件在集群中要在所有的节点中安装。
1.2.6 初始化monitor
# 初始化监控节点
ceph-deploy mon create-initial
# 实际执行了
systemctl start ceph-mon@node1
1.2.7 分发集群管理密钥
ceph-deploy admin node1 node2 node3
1.2.8 创建管理节点
ceph-deploy mgr create node1
# 执行了这个
systemctl start ceph-mgr@node1
1.2.9 添加osd
# 添加osd
ceph-deploy osd create node1 --data /dev/sdb
ceph-deploy osd create node2 --data /dev/sdb
ceph-deploy osd create node3 --data /dev/sdb
1.2.10 查看osd
[root@node1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.11691 root default
-3 0.03897 host node1
0 hdd 0.01949 osd.0 up 1.00000 1.00000
-5 0.03897 host node2
1 hdd 0.01949 osd.1 up 1.00000 1.00000
-7 0.03897 host node3
2 hdd 0.01949 osd.2 up 1.00000 1.00000
ceph -s
# 正常状态是HEALTH_OK
2.ceph集群管理
2.1 扩展monitor节点
ceph-deploy mon add node2
# 实际执行了
systemctl start ceph-mon@node3
2.2 查看monitor选举状态
# 三个可以保障高可用性
mon: 3 daemons, quorum node1,node2,node3 (age 11m)
# 查看状态
ceph quorum_status --format json-pretty
ceph mon stat
ceph mon dump
2.3 扩展mgr
ceph-deploy mgr create node3
# 实际执行了这步骤
systemctl start ceph-mgr@node2
因为其投票机制,三个能保障高可用性,只有一个是active状态
mgr: node1(active, since 24m), standbys: node2, node3
2.4 创建资源池
ceph osd lspools
ceph osd pool create ceph-demo 64 64
2.5 查看pg
# 查看pg数量
ceph osd pool get ceph-demo pg_num
pg_num: 64
# 查看pgp数量
ceph osd pool get ceph-demo pgp_num
pgp_num: 64
2.6 设置副本数量
# 查看副本数
ceph osd pool get ceph-demo size
# 设置副本数量为2
ceph osd pool set ceph-demo size 2
3.RBD块设备管理
3.1 创建块设备
在pool1池中创建一个10G大小的镜像
rbd create -p pool1 --image rbd-demo.img --size 10G
或者
rbd create pool1/rbd-demo1.img --size 5G
3.2 查看块设备文件
# 查看块设备文件
rbd info pool1/rbd-demo.img
或者
rbd info -p pool1 --image rbd-demo.img
rbd info pool1/rbd-demo.img
rbd image 'rbd-demo.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 12217a4473f9
block_name_prefix: rbd_data.12217a4473f9
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Thu Feb 4 17:35:44 2021
access_timestamp: Thu Feb 4 17:35:44 2021
modify_timestamp: Thu Feb 4 17:35:44 2021
注意: CentOS7 内核只支持这种特性 layering
3.2 删除镜像
rbd rm -p pool1 rbd-demo1.img
3.3 查看资源池里面的块设备
rbd -p pool1 ls
3.4 映射块设备到本地
rbd map pool1/rbd-demo.img
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable pool1/rbd-demo.img object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
因为有的特性内核不支持。
根据提示执行命令
rbd feature disable pool1/rbd-demo.img object-map fast-diff deep-flatten
3.5 查看映射关系
rbd device list
3.6 查看块设备的 对象object
block_name_prefix: rbd_data.12217a4473f9
rados -p pool1 ls |grep rbd_data.12217a4473f9
3.7 查看odject的详细信息
rados -p pool1 stat rbd_data.12217a4473f9.00000000000008c0
pool1/rbd_data.12217a4473f9.00000000000008c0 mtime 2021-02-04 17:56:25.000000, size 16384
3.8 块设备扩容
resize2fs 块设备 ext4 文件系统
xfs_growfs 挂载点 xfs文件系统
3.9 设置资源池的类型
ceph osd pool application enable pool1 rbd
3.10 获取资源池信息
ceph osd pool application get pool1
4.告警处理
告警状态1:
2 daemons hava recently crashed (两个守护进程坠毁了)
1.先查看坠毁的日志
ceph crash ls
2.得到crash的id,查看它的详细信息
> ceph crash info id
3.使用命令查看进程是否存在。如果存在可能是误报
> systemctl status ceph-mgr@node1
ceph -s
将报错信息打包
ceph crash archive id
再次ceph -s查看,没有报错信息了
5.RGW对象存储
5.1 需要安装包
yum -y install ceph-radowgw
5.2 创建rgw进程
ceph-deploy rgw create
执行了 systemctl start ceph-radosgw@rgw.node1
# 开放端口 7480
netstat -lntup|grep 7480
5.3 访问测试
curl node1:7580
结果
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName></DisplayName>
</Owner><Buckets>
</Buckets>
</ListAllMyBucketsResult>
5.4 更改rgw的默认端口
- 在my-cluster目录中更改配置文件
vi ceph.conf
......末尾追加......
[client.rgw.node1]
rgw_frontends = "civetweb port=80"
- 将配置文件分发到节点
ceph-deploy --overwrite-conf config push node1 node2 node3
-
重启服务
systemctl restart ceph-radosgw.target
5.5 创建s3风格rgw的认证
radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo"
{
"user_id": "ceph-s3-user",
"display_name": "Ceph S3 User Demo",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "ceph-s3-user",
"access_key": "J99IN8Z2GQZUGPBBHGP4",
"secret_key": "NzEBgJYkkbPHBYCSM1RG1bDWF1cO36hOvWNnqreD"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
5.6 查看方法
radosgw-admin user info --uid ceph-s3-user
5.7 访问方法
省略
5.8 swift风格
创建用户
radosgw-admin subuser create --uid ceph-s3-user --subuser=ceph-s3-user:swift --access=full
{
"user_id": "ceph-s3-user",
"display_name": "Ceph S3 User Demo",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "ceph-s3-user:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "ceph-s3-user",
"access_key": "J99IN8Z2GQZUGPBBHGP4",
"secret_key": "NzEBgJYkkbPHBYCSM1RG1bDWF1cO36hOvWNnqreD"
}
],
"swift_keys": [
{
"user": "ceph-s3-user:swift",
"secret_key": "NoOKd6rqIcL0266zlYqJwko2tM21g7pT9BR50HoZ"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
###########################################
radosgw-admin subuser create --uid ceph-s3-user --subuser=ceph-s3-user:swift --key-type=swift --gen-secret
{
"user_id": "ceph-s3-user",
"display_name": "Ceph S3 User Demo",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [
{
"id": "ceph-s3-user:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "ceph-s3-user",
"access_key": "J99IN8Z2GQZUGPBBHGP4",
"secret_key": "NzEBgJYkkbPHBYCSM1RG1bDWF1cO36hOvWNnqreD"
}
],
"swift_keys": [
{
"user": "ceph-s3-user:swift",
"secret_key": "JjWAwZMLbwr9ncGMmX6WRD7FFYCoOreAhc9r7cxy"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
5.9 swift客户端访问
yum -y install python-pip
pip install python-swiftclient
测试命令
swift -V 1 -A http://{IP ADDRESS}:{port}/auth -U testuser:swift -K '{swift_secret_key}' list
swift -A http://192.168.1.2/auth -U ceph-s3-user:swift -K JjWAwZMLbwr9ncGMmX6WRD7FFYCoOreAhc9r7cxy list
swift list 出来帮助命令
不使用这些参数
export ST_AUTH="http://192.168.1.2/auth"
export ST_USER="ceph-s3-user:swift"
export ST_KEY="JjWAwZMLbwr9ncGMmX6WRD7FFYCoOreAhc9r7cxy"
5.10 创建一个bucket
swift post swift-demo
5.11 上传一个文件
swift upload swift-demo /etc/passwd
6.ceph-fs文件系统
6.1 安装组件
至少需要一个mds(metadata server),为了保障高可靠性部署三台。
# 创建一个元数据服务器
如果启动了三个mds服务,在没有文件系统的情况下,三个都会是standby状态。
ceph-deploy mds create node1
systemctl start ceph-mds@node1
6.2 创建两个资源池
ceph osd pool create cephfs_data 16 16
ceph osd pool create cephfs_metadata 16 16
6.3 创建文件系统
ceph fs new cephfs-demo cephfs_metadata cephfs_data
cephfs-demo 文件系统名称
# 查看详情
ceph fs ls
6.4 挂载文件系统
# 挂载文件系统内核态
mount -t ceph node1:6789:/ /mnt/cephfs -o name=admin
#用户态方式挂载
ceph-fuse -m node1:6789,node2:6789,node3:6789 /opt
使用三个节点的话,在其中一个节点挂了,业务不受影响。
7.CEPH集群运维
7.1 集群扩容
横向扩容
增加更多的节点
osd纵向扩容
在单节点增加更多的磁盘
# 查看磁盘
ceph-deploy disk list node1
# 这个命令会把指定的设备的分区表给删除掉。
ceph-deploy disk zap [node] [disk]
# 在纵向扩展的时候,pg会重新填充osd,这样可能会降低集群的性能,可以把下面两个功能临时的关闭。
ceph osd set nobackfill
ceph osd set(unset) norebalance
ceph df
7.2 osd坏盘更换
ceph osd perf
# 查看磁盘的延迟,如果延迟很大,可能是有坏道了,但是还没有坏。
1.先踢出盘
ceph osd out osd.3
权重变为0
2.删除crush的缓存
ceph osd crush rm osd.3
3.删除盘
ceph osd rm osd.3
4.删除设备的认证信息
ceph auth rm osd.3
7.3 进程管理
# 这个服务器名会把所有的ceph服务给启动起来,停止的话会把所有的服务给停止。
systemctl start ceph.target
根据服务类型
systemctl start ceph-osd.target # 如果这台节点上有多个osd会把全部的osd停掉
systemctl start ceph-mon.target
systemctl start ceph-mds.target
systemctl start ceph-osd@{id} # 停掉某一个osd
7.4 日志分析
默认的ceph日志存放路径 /var/log/ceph/
7.5 集群状态
ceph osd stat
ceph osd tree
ceph -s
ceph osd df
ceph df
ceph mon stat
ceph mon dump
ceph quorum_status
#
ceph --admin-daemon /var/run/ceph/ceph-mon.node1.asok config show
ceph --admin-daemon /var/run/ceph/ceph-mon.node1.asok help
7.6 资源池管理
资源池的分类
ceph osd pool application get pool1
# 设置资源池
ceph osd pool application enable pool1 rbd
# 设置最大刻印obj
ceph osd pool get-quota pool1
ceph osd pool set-quota pool1 max_objects 100
统计
rados df
PG
对象存储在pg上;pg通过crash算法把数据存放在osd上面。
总的pg = osd * 100 / 资源池副本数
然后取2的次方的最近的那个值。
官方说明每个osd最多承受250个pg
7.6.1 删除资源池
ceph osd pool rm pool1 pool1 --yes-i-really-really-mean-it
# 临时调整
ceph --admin-daemon /var/run/ceph/ceph-mon.node1.asok config set mon_allow_pool_delete True
# 永久生效
1.编辑配置文件
[root@node1 ~/my-cluster]# vi ceph.conf
[global]
fsid = 634074c2-c593-4d68-896d-3a8a11151bf7
public_network = 192.168.1.0/24
cluster_network = 172.16.1.0/24
mon_initial_members = node1
mon_host = 192.168.1.2
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
rgw_multipart_part_upload_limit = 100000
mon_max_pg_per_osd = 1000
mon_allow_pool_delete = true
[client.rgw.node1]
rgw_frontends = "civetweb port=80"
2.发送配置文件
ceph-deploy --overwrite-conf config push node1 node2 node3
3.重启各个节点的mon服务
for i in {1..3};do ssh node${i} systemctl restart ceph-mon.target;done
8.crush Map 规则
规定了数据怎样存储在集群中,以主机为单位,以osd为单位,以机柜为单位,数据中心,区域。
8.1 更改crash map规则
# 导出crush规则,是二进制文件
ceph osd getcrushmap -o crushmao.bin
# 转换成txt文件
crushtool -d crushmap.bin -o crushmap.txt
cat crushmap1.txt
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54
# devices
# 标记了每一块osd是什么类型
device 0 osd.0 class ssd
device 1 osd.1 class ssd
device 2 osd.2 class ssd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd
# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 zone
type 10 region
type 11 root
# buckets
# 主机
host node1 {
id -3 # do not change unnecessarily
# 标记个类型
id -4 class hdd # do not change unnecessarily
# weight 0.039
alg straw2
hash 0 # rjenkins1
# osd.3的权重
item osd.3 weight 0.019
}
host node2 {
id -5 # do not change unnecessarily
id -6 class hdd # do not change unnecessarily
# weight 0.039
alg straw2
hash 0 # rjenkins1
item osd.4 weight 0.019
}
host node3 {
id -7 # do not change unnecessarily
id -8 class hdd # do not change unnecessarily
# weight 0.039
alg straw2
hash 0 # rjenkins1
item osd.5 weight 0.019
}
host node1-ssd {
# weight 0.039
alg straw2
hash 0 # rjenkins1
item osd.0 weight 0.019
}
host node2-ssd {
# weight 0.039
alg straw2
hash 0 # rjenkins1
item osd.1 weight 0.019
}
host node3-ssd {
# weight 0.039
alg straw2
hash 0 # rjenkins1
item osd.2 weight 0.019
}
root default {
id -1 # do not change unnecessarily
id -2 class hdd # do not change unnecessarily
# weight 0.117
alg straw2
hash 0 # rjenkins1
item node1 weight 0.019
item node2 weight 0.019
item node3 weight 0.019
}
# 指定规则
root ssd {
# weight 0.117
alg straw2
hash 0 # rjenkins1
# 引用上面的主机
item node1-ssd weight 0.019
item node2-ssd weight 0.019
item node3-ssd weight 0.019
}
# rules
rule replicated_rule {
id 0
type replicated
min_size 1
max_size 10
step take default
step chooseleaf firstn 0 type host
step emit
}
# 制定规则
rule ssd_rule {
id 1
type replicated
min_size 1
max_size 10
# 引用上面的规则
step take ssd
step chooseleaf firstn 0 type host
step emit
}
# end crush map
# 把crushmaptxt转换成bin格式
crushtool -c crushmap.txt -o crushmap-new.bin
# 设置定义的规则
ceph osd setcrushmap -i crushmap-new.bin
# 查看资源池绑定的的crush规则
ceph osd pool get ceph-demo crush_rule
# 查看有哪些规则
ceph osd crush rule ls
# 给资源池设置crush_map
ceph osd pool set ceph-demo crush_rule demo_rule
# 这样设置可以实现,不同的资源池把数据放置到不同的osd上面去。在没有数据的时候做,有数据的时候有风险。
8.2 手动更改规则
# 创建一个bucket
类型root;名称ssd
ceph osd crush add-bucket ssd root
#
类型是host
ceph osd crush add-bucket node1-ssd host
ceph osd crush add-bucket node2-ssd host
ceph osd crush add-bucket node3-ssd host
# 把host加入root
ceph osd crush move node1-ssd root=ssd
ceph osd crush move node2-ssd root=ssd
ceph osd crush move node3-ssd root=ssd
# 把osd移动到host
ceph osd crush move osd.0 host=node1-ssd root=ssd
ceph osd crush move osd.1 host=node2-ssd root=ssd
ceph osd crush move osd.2 host=node3-ssd root=ssd
效果
[root@node1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-9 0.05846 root ssd
-10 0.01949 host node1-ssd
0 hdd 0.01949 osd.0 up 1.00000 1.00000
-11 0.01949 host node2-ssd
1 hdd 0.01949 osd.1 up 1.00000 1.00000
-12 0.01949 host node3-ssd
2 hdd 0.01949 osd.2 up 1.00000 1.00000
-1 0.05846 root default
-3 0.01949 host node1
3 hdd 0.01949 osd.3 up 1.00000 1.00000
-5 0.01949 host node2
4 hdd 0.01949 osd.4 up 1.00000 1.00000
-7 0.01949 host node3
5 hdd 0.01949 osd.5 up 1.00000 1.00000
# 定义规则
ceph osd crush rule create-replicated ssd-demo ssd host hdd
# 查看
[root@node1 ~]# ceph osd crush rule ls
replicated_rule
ssd-demo
# 注意事项
1.在更改的时候,做好配置文件备份。
2.调整crush map的时候最好是在集群初始的时候,有数据的时候容易造成数据丢失。
3.手动更改crushMap需要更改配置,保证集群在增加或者减少osd的话会自动更改crushmap规则。更改规则会造成数据大量迁移。
......
[osd]
osd_crush_update_on_start = false
# 然后推送出去
ceph-deploy --overwrite-conf config push node1 node2 node3
systemctl restart ceph-osd.target
# 查看是否生效
ceph daemon /var/run/ceph/ceph-osd.0.asok config show|grep on_start
9.RBD高级功能
9.1 回收站
# 创建一个 镜像
rbd create volumes/ceph-trash.img --size 10G
# 删除镜像
这样删除在回收站里面也看不到
rbd rm volumes/ceph-trash.img
# 把一个镜像放入回收站
rbd trash move volumes/ceph-trash.img --expires-at 20210306
facf28ce8a57 ceph-trash.img # 指定的镜像
facf28ce8a57 ceph-trash.img # 到了这个时间就会把这个删除
# 查看回收站的内容
rbd trash -p volumes ls
facf28ce8a57 ceph-trash.img
# 把镜像恢复回来。
rbd trash restore -p volumes facf28ce8a57
9.2 rbd制作快照
它针对的是块设备级别的,如果文件系统是损坏的那么,制作出来的快照也是坏的。
# 创建一个5G的块设备
rbd create volumes/rbd-test.img --image-feature layering --size 5G
rbd info volumes/rbd-test.img
# 映射到本地
rbd device map volumes/rbd-test.img
# 格式化
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /mnt/
cd /mnt
touch filetxt-1
# 创建快照
rbd snap create volumes/rbd-test.img@snap_20210308
# 查看快照
rbd snap ls volumes/rbd-test.img
# 恢复快照
rbd snap rollback volumes/rbd-test.img@snap_20210308
注意:需要把挂在上的设备卸载再挂载。
# 删除快照
rbd snap rm volumes/rbd-test.img@snap_20210308
9.3 快照的高级特性copy-on-write
快照的高级特性copy-on-write
创建新的镜像时候,创建了一个链接指向父镜像,父镜像只读,创建出来的新镜像,可以写入数据。这样新建镜像的速度
就变得快速了。父镜像不能够删除,删除之后就会出问题(有一个镜像保护机制)。还可以节省空间。
# 示例过程
rbd snap create volumes/rbd-test.img@snap_2021
# 保护镜像
rbd snap protect volumes/rbd-test.img@snap_2021
# 克隆镜像
rbd clone volumes/rbd-test.img@snap_2021 volumes/vm1-clone
# 查看克隆过的信息
rbd -p volumes info vm1-clone
# 根据模板镜像创建出来的镜像内容都是和模板镜像一样的。
# 把克隆出来的镜像取消父子关系
会占用独立的空间。
查看快照克隆出来的镜像
rbd children volumes/rbd-test.img@snap_2021
# 把克隆出来的子镜像独立出来
rbd flatten volumes/vm1-clone
# 查看映射到本地的块设备
rbd device ls
9.4 rbd快照的导出。
rbd export volumes/rbd-test.img@snap-demo /root/snap-demo
导出的名称 snap-demo
# rbd的导入
rbd import /root/snap-demo volumes/rbd-test-new.img
rbd device map volumes/rbd-test-new.img
rbd feature disable volumes/rbd-test-new.img object-map fast-diff deep-flatten
rbd device map volumes/rbd-test-new.img
mount /dev/rbd1 /mnt/
# 数据就回来了
[root@node1 ~]# ls /mnt/
filetxt-1 lost+found
9.5 数据的增量备份
# 创建快照
[root@node1 ~]# rbd device ls
id pool namespace image snap device
0 volumes rbd-test.img - /dev/rbd0
1 volumes rbd-test-new.img - /dev/rbd1
# df -h
/dev/rbd1 4.8G 20M 4.6G 1% /mnt
[root@node1 /mnt]# ls
filetxt-1 lost+found
[root@node1 /mnt]# echo 123 > filetxt-2
[root@node1 /mnt]# ls
filetxt-1 filetxt-2 lost+found
# 导出增加的部分
rbd snap create volumes/rbd-test-new.img@s1
rbd export-diff volumes/rbd-test-new.img@s1 /root/diff-s2
# 导入数据(恢复)
rbd import-diff s2 volumes/rbd-test-new.img
10.RGW高可用
10.1 安装radosgw
yum -y install ceph-radosgw
[root@node1 ~/my-cluster]# ceph-deploy rgw create node1 node2
10.1 更改rgw的端口
vi ~/my-cluster/ceph.conf
......
[client.rgw.node1]
rgw_frontends = "civetweb port=81"
[client.rgw.node2]
rgw_frontends = "civetweb port=81"
......
ceph-deploy --overwrite-conf config push node1 node2
node1和node2
systemctl restart ceph-radosgw.target
10.2 安装keepalived
yum -y install keepalived
10.2.1 Master的配置文件
[root@node1 ~]# cat /etc/keepalived/keepalived.conf
global_defs { #全局配置
router_id node1 #就是一个身份标识(用主机名也可以用其它的)
}
vrrp_script check_haproxy {
script "killall -0 haproxy" #要执行的脚本或者命令,如果返回的结果是非0就会weight -20
interval 2 #每隔两秒执行一次上面script的内容
weight -20 #权重-20,减的是priority,它的优先级小了自然就成了backup
}
vrrp_instance rgw { #rgw实例的名称
state MASTER #标识角色状态
interface eth0 #网卡绑定接口
virtual_router_id 50 #虚拟路由id,同一个实例保持一致
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
192.168.1.10 #虚拟的VIP地址
}
track_script {
check_haproxy # 调用上面的脚本执行
}
}
10.2.2 Backup的配置文件
[root@node2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id node2
}
vrrp_instance rgw {
state BACKUP
interface eth0
virtual_router_id 50
priority 140
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.10
}
}
11.Ceph集群测试
11.1 mon高可用测试
3个mon只允许挂掉一个。
在生产环境中一般三个mon节点是没问题的。当挂掉两个的时候集群就会出现问题。5个mon只允许挂掉两个。
systemctl status ceph-mon
11.2 mds高可用
ceph-fs的组件
ceph-fs的高可用只有一个服务在就行,但是集群因为没有高可用之后,会有一个warnning的告警。
systemctl status ceph-mds
11.3 rgw高可用
对象存储网关
使用haproxy和keepalived来进行高可用。
systemctl status ceph-radosgw
mgr 是用来管理的一般不会对集群产生影响
11.4 OSD坏盘测试
单个节点或者是单盘出现问题,因为有副本所以不会产生影响。
11.5 fio性能压测评估
ceph osd perf # 可以查看磁盘的状况
fio -filename=/mnt/test.img -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=100M -numjobs=2 -runtime= -group_reporting -name=rand_100write_4k
吞吐量可以把bs调大一点
-numjobs=2 # 调整为CPU核心的2^n
rbd bench压力测试
rbd help bench
rbd bench volumes/rbd-test.img --io-size 4K --io-threads 4 --io-total 200M --io-pattern rand --io-type write
rbd bench volumes/rbd-test.img --io-size 4K --io-threads 4 --io-total 200M --io-pattern rand --io-type read