极客时间运维进阶训练营第十周作业

1、熟练管理存储池(创建存储池、删除存储池)、掌握 pg 与 pgp 的基本分配方法

### 列出存储池
ceph osd pool ls
ceph osd lspools
### 查看pool状态
ceph osd pool stats myrbd1
### 重命名存储池
ceph osd pool rename myrbd1 myrbd2
### 查看存储池的用量信息
rados df
### 创建存储池
ceph osd pool create mypool 32 32
ceph osd pool create mypool2 32 32
ceph osd pool create mypool3 32 32
### 查看存储池是否禁止删除
ceph osd pool get mypool2 nodelete
### 设置存储池禁止删除
ceph osd pool set mypool2 nodelete true
### 删除存储池
ceph tell mon.* injectargs --mon-allow-pool-delete=true

ceph osd pool set mypool2 nodelete false
ceph osd pool rm mypool2 mypool2 --mon-allow-pool-delete=false --yes-i-really-really-mean-it

ceph tell mon.* injectargs --mon-allow-pool-delete=false

### 存储池配额
#默认没有配额
ceph osd pool get-quota mypool
ceph osd pool set-quota mypool max_bytes 10737418230
ceph osd pool get-quota mypool
### 设置存储池默认副本数,默认3
ceph osd pool get mypool size
ceph osd pool get mypool min_size
ceph osd pool set mypool min_size 1
ceph osd pool get mypool min_size

### 查看当前pg的数量
ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num
### 是否可以更改存储池的pg 数量
ceph osd pool get mypool nopgchange
### pg数量设置为64,要避免业务高峰期修改
ceph osd pool set mypool pg_num 64
ceph osd pool set mypool pgp_num 64
### 禁止修改pg数量
ceph osd pool set mypool nopgchange true
### 允许修改pg数量
ceph osd pool set mypool nopgchange false
### 控制是否可以更改存储池的大小,默认允许修改
ceph osd pool get mypool nosizechange
### 查看存储池配额
ceph osd pool get-quota mypool
### 是否启用轻量扫描,默认启用
ceph osd pool get mypool noscrub
### ceph 负载特别高的时候可以临时关闭轻量扫描
ceph osd pool set mypool noscrub true
### 查看是否进行深度扫描
ceph osd pool get mypool nodeep-scrub
### 临时关闭深度扫描
ceph osd pool set mypool nodeep-scrub true
### 查看轻量扫描的间隔时间
ceph osd pool get mypool scrub_min_interval
ceph daemon osd.3 config show |grep scrub
#osd_deep_scrub_interval:"604800.000000" # 深度扫描每7天进行一次
#"osd_max_scrubs":"1" #定义osd daamon同时进行scrubing的操作数
#"osd_scrub_max_interval":"604800.000000" #定义浅扫描最大执行scrub间隔,7天
#"osd_scrub_min_interval":"86400.000000" #定义浅扫描最小间隔1天

### 存储池快照
#用于将存储池中的数据进行备份和还原
### 创建快照
ceph osd pool ls
#方法1
ceph osd pool mksnap mypool mypool-snap
#方法2
rados -p mypool mksnap mypool-snap2
### 查看快照
rados lssnap -p mypool
### 还原快照
#放入测试数据
rados -p mypool put testfile /etc/hosts
#查看数据
 rados ls -p mypool
#创建快照
ceph osd pool mksnap mypool mypool-snap001
#删除测试数据
rados -p mypool rm testfile
#通过快照还原文件
rados rollback -p mypool testfile mypool-snap001
### 删除存储池快照
#查看快照
rados lssnap -p mypool
ceph osd pool rmsnap mypool mypool-snap

## 数据压缩-不建议开启
如果使用bluestore存储,支持数据压缩,开启数据研究可以节约磁盘空间,但消耗cpu多,默认不开启
设置在seph.conf 文件中进行生效

2、熟练 ceph 的用户管理及授权

# ceph 认证
ceph 默认使用cephx协议对客户端进行身份认证。
cephx 用于对ceph保持的数据进行认证访问和授权,用于对访问ceph的请求进行认证和授权检测,与mon通讯的请求都要经过ceph认证通过。
## 授权流程
每个mon节点都可以对客户端进行身份认证并分发秘钥,因此多个mon节点就不存在单节点故障和认证性能瓶颈。
mon 节点会返回用于身份认证的数据结构,包括session key。
session key 通过客户端秘钥进行加密传输,而秘钥是在客户端提前配置好,保存在/etc/ceph/ceph.client.xxx.keyring中
客户端使用session key 向mon请求所需要的服务,mon向客户端体用一个tiket 用于想实际处理数据库的osd等服务验证客户端身份,mon和osd共享同一个secret,因此osd会信任所有mon发放的tiket。
tiket 存在有效期,过期后重新发放
## ceph 用户
个人(ceph管理者)需手工创建
系统参与者(mon/osd/mds) 自动创建
## 用户的常见操作
### 列出所有用户
ceph auth list
### 查看指定用户
ceph auth get osd.11
ceph auth get client.admin
### ceph 授权和权限
#权限参数
r: 读取
w:写入
x:调用类方法包括读取和写入,已经在mon中执行auth操作
*:授予用户对特定守护进程/存储池的读取、写入、执行权限,以及执行管理命令的能力。
class-read:类读取方法能力,属于 x能力的子集
class-write:类写入方法的能力,属于x能力的子集
profile osd:授予用户以某个osd身份连接到其他osd或监视器的权限,搜于osd权限,使osd能够处理复制检测信号流量和状态报告(获取osd的状态信息)
profile mds: 授予用户以某个mds身份连接到其他mds或监视器的权限
profile bootstrap-osd: 授予用户引导osd的权限(初始化osd并将osd加入到ceph集群),授权给部署工具,使其在引导osd时有权添加秘钥
profile bootstrap-mds:授予用户引导元数据服务器的权限,授权部署工具权限,使其在引导元数据服务器时有权添加秘钥
mon
我们日常接触到的权限就是rwx和allow profile cap
eg:
mon 'allow rwx'
mon 'allow profile osd'

osd
包括 r w x class-read class-write profile osd
eg:
osd 'allow capability' [poo=poolname] [namespace=namespace-name]

mds
只需要 allow 或空都表示允许
mds 'allow'
## 用户管理
### 列出所有用户
ceph auth list
#注:现有用户都不要改动
### 创建用户-方法1
ceph auth add client.tom mon 'allow r' osd 'allow rwx pool=mypool'
#创建用户tom,mon只读,只能对存储池mypool有读写权限,
### 导出用户
ceph auth get client.tom >> ceph.client.tom.keyring
### 创建用户-方法2
ceph auth get-or-create client.jack mon 'allow r' osd 'allow rwx pool=mypool'
#验证用户
ceph auth get client.jack
### 创建用户-方法3仅返回key
ceph auth get-or-create-key client.jack mon 'allow r' osd 'allow rwx pool=mypool'
### 查看用户信息
ceph auth get client.jack
ceph auth print-key client.jack
### 修改用户权限
#新的权限会完全覆盖当前的权限
ceph auth caps client.jack mon 'allow r' osd 'allow rw pool=mypool'
### 删除用户
ceph auth del client.tom
ceph auth get client.tom

### 备份还原用户
#创建用户
ceph auth get-or-create client.user1 mon 'allow r' osd 'allow * pool=mypool'
#验证权限
ceph auth get client.user1
#创建kering文件,touch也可
ceph-authtool --create-keyring ceph.client.user1.keyring
#导出key
ceph auth get client.user1 -o ceph.client.user1.keyring
#删除用户
ceph auth del client.user1
#导入用户
ceph auth import -i ceph.client.user1.keyring
#验证权限
ceph auth get client.user1
### 使用普通用户执行命令
sudo  cp ceph.client.user1.keyring  /etc/ceph/
sudo setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.user1.keyring
ceph --id user1 -s
### 将多用户导出到秘钥环
#创建空文件
ceph-authtool --create-keyring ceph.client.user.keyring
#把指定的admin用户导入到文件
ceph-authtool ./ceph.client.user.keyring --import-keyring ./ceph.client.admin.keyring
#验证权限
ceph-authtool -l ./ceph.client.user.keyring
#导入第二个用户
ceph-authtool ./ceph.client.user.keyring --import-keyring ./ceph.client.user1.keyring
#验证权限
ceph-authtool -l ./ceph.client.user.keyring

3、使用普通客户挂载块存储

# 块存储
## 创建块存储
ceph osd pool create rbd-data1 32 32
ceph osd pool application enable rbd-data1 rbd
rbd pool init -p rbd-data1
#创建镜像
rbd create data-img1 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
rbd create data-img2 --size 5G --pool rbd-data1 --image-format 2 --image-feature layering
rbd create data-img3 --size 5G --pool rbd-data1 --image-format 2
#注:默认特性比较多,当linux内核版本低的时候后会不兼容,无法挂载
#检查镜像
rbd ls --pool rbd-data1
rbd ls --pool rbd-data1 -l
rbd --image data-img2 --pool rbd-data1 info
rbd ls --pool rbd-data1 -l --format json --pretty-format
#调整特性,开启新特性
rbd feature enable exclusive-lock --pool rbd-data1 --image data-img1
rbd --image data-img1 --pool rbd-data1 info
rbd feature enable object-map --pool rbd-data1 --image data-img1
#关闭特性
rbd feature disable object-map --pool rbd-data1 --image data-img1
rbd feature disable exclusive-lock  --pool rbd-data1 --image data-img1
rbd --image data-img1 --pool rbd-data1 info
## 客户端挂载
#centos安装ceph工具
yum install -y epel-release
yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
yum makecache fast
yum install -y ceph-common
#copy认证文件
scp ceph.conf ceph.client.admin.keyring root@172.31.6.202:/etc/ceph
ceph -s --id admin
#挂载
rbd -p rbd-data1 map data-img1
rbd -p rbd-data1 map data-img3
lsblk
mkfs.xfs /dev/rbd0
mkdir /data/mysql -p
mount /dev/rbd0 /data/mysql
## 使用普通用户挂载rbd块设备
#创建普通用户
ceph auth add client.john mon 'allow r' osd 'allow rwx pool=rbd-data1'
#验证用户
ceph auth get client.john
#导出配置文件
ceph-authtool --create-keyring ceph.client.john.keyring
ceph auth get client.john -o ceph.client.john.keyring
#安装ceph工具
apt install -y apt-transport-https ca-certificates curl software-properties-common
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | apt-key add
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
apt update
apt install -y ceph-common
#copy 配置文件
scp ceph.conf ceph.client.john.keyring root@172.31.6.203:/etc/ceph
#验证
ceph -s --id john
#注意 容器宿主机必须安装ceph工具
#挂载卷
rbd --user john -p rbd-data1 map data-img2
lsblk
mkfs.ext4 /dev/rbd0
mkdir /data/mysql -p
mount /dev/rbd0 /data/mysql
#使用挂在的卷
docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD="123456" -v /data/mysql:/var/lib/mysql mysql:5.6.46
#mysql连接测试
yum install -y mysql
mysql -h 172.31.6.203 -uroot -p123456
## rbd 镜像空间拉伸扩展
rbd ls  rbd-data1 -l
rbd resize --pool rbd-data1 --image data-img2 --size 10G
rbd ls rbd-data1 -l
#注意不要缩小空间
resize2fs /dev/rbd0
xfs_growfs /data/mysql
#设置开机挂在
echo "rbd --user john -p rbd-data1 map data-img2" >> /etc/rc.d/rc.local
echo "mount /dev/rbd0 /data/mysql" >> /etc/rc.d/rc.local

## 卸载rbd
umount /data/mysql
rbd --user john -p rbd-data1 unmap data-img2

## 删除rbd
rbd ls -p rbd-data1 -l
rbd rm --pool rbd-data1 --image data-img1

## 删除镜像回收站机制
#查看帮助
rbd help trash
#查看镜像状态
rbd status --pool rbd-data1 --image data-img2
#移动镜像到回收站
rbd trash move --pool rbd-data1 --image data-img2
#查看回收站镜像
rbd trash list --pool rbd-data1
#从回收站还原镜像
rbd  ls -p rbd-data1 -l
rbd trash restore --pool rbd-data1 --image data-img2 --image-id 612f764debc5
rbd  ls -p rbd-data1 -l
#从回收站彻底删除rbd
rbd trash remove --pool rbd-data1 612f764debc5

## 镜像快照
#不常用
#查看帮助
rbd help snap
#创建一个rbd
rbd create data-img1 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
#centos7挂载
rbd --user admin -p rbd-data1 map data-img1
mkfs.ext4 /dev/rbd0
install -d /data/mysql
mount /dev/rbd0 /data/mysql
cp /var/log/messages /data/mysql
cp /var/log/boot.log /data/mysql
cp /etc/hosts /data/mysql
#创建快照
rbd snap create --pool rbd-data1 --image data-img1 --snap img1-snap-20230101
rbd snap create --pool rbd-data1 --image data-img1 --snap img1-snap-20230101-v2
#验证快照
rbd snap list --pool rbd-data1 --image data-img1
#删除数据
rm -fr /data/mysql/messages
#恢复数据
umount /data/mysql
rbd unmap /dev/rbd0
lsblk
#deploy回滚数据
rbd snap rollback --pool rbd-data1 --image data-img1 --snap img1-snap-20230101-v2
#验证数据
rbd --user admin -p rbd-data1 map data-img1
mount /dev/rbd0  /data/mysql/
ll /data/mysql/
#删除快照
rbd snap remove --pool rbd-data1 --image data-img1 --snap img1-snap-20230101
rbd snap list --pool rbd-data1 --image data-img1

4、使用普通用户挂载 cephfs(可以通过 secret 或者 secretfile 的形式多主机同时挂载)

# CephFS
实现文件级别的共享,实现类似nfs的功能
Ceph FS需要运行 Meta Data Services(MDS)其守护进程为ceph-mds,ceph-mds进程管理与cephfs上存储的文件相关的元数据,并协调对ceph存储集群的访问
#####
MDS只是缓存数据,mds的损坏不会丢失数据
#查看ceph fs
 ceph fs ls
#查看ceph fs状态
ceph fs status mycephfs
#查看mds状态
ceph mds stat
## 通过普通用户使用cephfs
#创建普通用户
ceph auth add client.yanyan mon 'allow r' mds 'allow rw' osd 'allow rwx pool=cephfs-data'
ceph auth get client.yanyan
ceph auth get client.yanyan -o ceph.client.yanyan.keyring
cat ceph.client.yanyan.keyring
ceph auth print-key client.yanyan > yanyan.key
cat yanyan.key
#挂在cephfs
apt install -y apt-transport-https ca-certificates curl software-properties-common
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | apt-key add
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list
apt update
apt install -y ceph-common

scp ceph.conf ceph.client.yanyan.keyring yanyan.key root@172.31.6.204:/etc/ceph
mkdir /data
mount -t ceph 172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ /data -o name=yanyan,secretfile=/etc/ceph/yanyan.key
mount -t ceph 172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ /data -o name=yanyan,secret=AQAegLFjcIqTKBAAD0YBwDgneii0kTUDckacjg==
#开机挂载
echo "172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789:/ /data ceph defaults,name=yanyan,secretfile=/etc/ceph/yanyan.key,_netdev 0 0" >> /etc/fstab
## ceph-fuse
使用在linux内核版本低而没有ceph模块的场景下
性能不高,不建议使用,
#centos 安装客户端
yum install -y epel-release

yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
yum install -y ceph-fuse
scp ceph.conf ceph.client.yanyan.keyring yanyan.key root@172.31.6.201:/etc/ceph
#挂载
mkdir /data
ceph-fuse --name client.yanyan -m 172.31.6.101:6789,172.31.6.102:6789,172.31.6.103:6789 /data
df -TH

5、实现 MDS 服务的多主一备高可用架构

 

## Ceph MDS 高可用
################
### 添加mds节点,默认均为备份节点
ceph-deploy --overwrite-conf mds create ceph-mgr2
ceph-deploy --overwrite-conf mds create ceph-mon2
ceph-deploy --overwrite-conf mds create ceph-mon3

ceph mds stat
ceph fs status
### 配置高可用
ceph fs get mycephfs
#设置2主2从
ceph fs set mycephfs max_mds 2
ceph fs status
#设置4主0从
ceph fs set mycephfs max_mds 4
ceph fs status
#设置3主1从-推荐
ceph fs set mycephfs max_mds 3
ceph fs status
#设置2主2从,绑定关系,实时同步数据-性能损耗较大,不建议
ceph fs set mycephfs max_mds 2
ceph fs status
tee -a ceph.conf << "EOF"
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2
mds_standby_replay = true

[mds.ceph-mgr2]
mds_standby_for_name = ceph-mgr1
mds_standby_replay = true

[mds.ceph-mon3]
mds_standby_for_name = ceph-mon2
mds_standby_replay = true

[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3
mds_standby_replay = true
EOF

ceph-deploy --overwrite-conf config push ceph-mgr1 ceph-mgr2 ceph-mon2 ceph-mon3

ceph -s
ceph fs status
#依次重启mds服务

  

posted @ 2022-12-28 10:20  john221100  阅读(34)  评论(0编辑  收藏  举报