极客时间运维进阶训练营第十周作业
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服务