当前位置: 首页 > news >正文

北京建设监理网站wordpress 改为中文字体

北京建设监理网站,wordpress 改为中文字体,百度搜索引擎排行榜,网站建设意见征求目录 一. 环境准备 二. 安装Docker 三. admin节点安装cephadm 四. admin节点给另外四个主机导入镜像 五. 向集群中添加节点 六. Ceph使用 列出可用设备 清除设备数据---针对有数据的设备 检查 OSD 状态 Ceph 集群中添加一个新的 OSD 查看集群的健康状态 指定MDS 列…目录 一. 环境准备 二. 安装Docker 三. admin节点安装cephadm 四. admin节点给另外四个主机导入镜像 五. 向集群中添加节点 六. Ceph使用 列出可用设备 清除设备数据---针对有数据的设备 检查 OSD 状态 Ceph 集群中添加一个新的 OSD 查看集群的健康状态 指定MDS 列出当前 Ceph 集群中的所有数据池的名称 创建ODS pool 扩展命令 为新的pool指定application CephFS的创建与删除 创建 查看监控  设置开机自动挂载 RBD相关操作 RBDRADOS Block Device概述 RBD 的主要特性 创建 客户端操作 部署RGW服务 创建RGW用户 配置客户端 ​编辑 测试 一. 环境准备 实际实验磁盘远用不了这么多自行按需给大小但是数量就按照配置来实验 节点主机名IP系统系统配置软件版本adminceph-storage01192.168.226.151rocky_linux9.4 2核4G内存根分区50G 两个各20G的空磁盘 ceph version 18.2.3 Docker version 27.1.1 ceph-storage02192.168.226.152rocky_linux9.4 2核4G内存根分区50G 两个各20G的空磁盘 Docker version 27.1.1ceph-storage03192.168.226.153rocky_linux9.4 2核4G内存根分区50G 两个各20G的空磁盘 Docker version 27.1.1ceph-storage04192.168.226.154rocky_linux9.4 2核4G内存根分区50G 两个各20G的空磁盘 Docker version 27.1.1ceph-storage05192.168.226.155 2核4G内存根分区50G 两个各20G的空磁盘 Docker version 27.1.1 都需要进行关闭防火墙和selinux进行时间同步分别使用固定IP下述为自动化脚本。 #!/bin/bash # 检查是否以 root 用户运行脚本 if [ $(id -u) -ne 0 ]; thentput boldtput setaf 1tput setaf 3echo 请以 root 用户运行此脚本。tput sgr0exit 1 fi# 启用网络接口 enable_network_interface() {local interface$1if ip link set $interface up; thentput boldtput setaf 2echo 网络接口 $interface 已启用。tput sgr0elsetput boldtput setaf 1echo 无法启用网络接口 $interface请检查接口名称。tput sgr0exit 1fi }# 配置 YUM 源 configure_yum_repos() {sed -e s|^mirrorlist|#mirrorlist|g \-e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \-i.bak \/etc/yum.repos.d/rocky*.repo tput boldtput setaf 2echo YUM 源配置已更新。tput sgr0dnf makecacheyum -y install epel-release }# 停止和禁用防火墙禁用 SELinux configure_security() {systemctl stop firewalld systemctl disable firewalldfirewall-cmd --reloadtput boldtput setaf 2echo 防火墙已停止并禁用。tput sgr0sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configtput boldtput setaf 2echo SELinux 已禁用。tput sgr0 }# 检查并安装chrony进行时间同步 function install_and_sync_time_with_chrony() {# 检查是否已经安装chronyif ! command -v chronyd /dev/null; thensudo dnf install -y chrony /dev/null# 检查安装是否成功if ! command -v chronyd /dev/null; thentput boldtput setaf 1echo 安装 chrony 失败。请检查您的包管理器并重试。tput sgr0exit 1elsetput boldtput setaf 2echo chrony 安装成功。tput sgr0fielsetput boldtput setaf 2echo chrony 已安装。tput sgr0fi # 配置windows的时间服务 echo server time.windows.com iburst | sudo tee -a /etc/chrony.conf# 确保安装其他必要的软件包sudo dnf install -y vim wget unzip tar lrzsz /dev/nullif [ $? -eq 0 ]; thentput boldtput setaf 2echo 其他软件包安装成功。tput sgr0elsetput boldtput setaf 1echo 安装其他软件包失败。tput sgr0exit 1fi# 启动 chronyd 服务并启用开机启动if sudo systemctl enable --now chronyd sudo systemctl restart chronyd; thentput boldtput setaf 2echo chronyd 服务已成功启动并设置为开机启动。tput sgr0elsetput boldtput setaf 1echo 启动或启用 chronyd 服务失败。请检查 systemctl 状态。tput sgr0exit 1fi# 强制同步时间sudo chronyc -a makesteptput boldtput setaf 2echo 时间同步已成功完成。tput sgr0 }# 自定义 IP 地址 configure_ip_address() {tput boldtput blinktput setaf 1read -p ******输入你要设置的IP : ip_atput sgr0tput boldtput blinktput setaf 6read -p ******输入你要设置的网关 : gattput sgr0tput boldtput blinktput setaf 3read -p ******输入你要设置的DNS : dnnstput sgr0# 判断当前连接的名字connection_name$(nmcli -t -f NAME,DEVICE con show --active | grep -E ens33|Wired connection 1 | cut -d: -f1)if [[ $connection_name ens33 ]]; then# 针对 ens33 连接进行配置nmcli con mod ens33 ipv4.method manual ipv4.addresses ${ip_a}/24 ipv4.gateway ${gat} ipv4.dns ${dnns} autoconnect yeselif [[ $connection_name Wired connection 1 ]]; then# 针对 Wired connection 1 连接进行配置nmcli con mod Wired connection 1 ipv4.method manual ipv4.addresses ${ip_a}/24 ipv4.gateway ${gat} ipv4.dns ${dnns} autoconnect yeselsetput boldtput setaf 1echo 无法识别的网络连接名称$connection_nametput sgr0return 1fitput setab 5tput setaf 15tput boldecho IP 地址配置成功即将重启系统。tput sgr0nmcli con up $connection_namereboot }# 主函数 main() {local interfaceens33enable_network_interface $interfaceconfigure_yum_reposconfigure_securityinstall_and_sync_time_with_chronyconfigure_ip_address $interface }# 调用主函数 main 修改主机名 # 192.168.226.151 [rootbogon ~]# nmcli g hostname ceph-storage01# 192.168.226.152 [rootbogon ~]# nmcli g hostname ceph-storage02# 192.168.226.153 [rootbogon ~]# nmcli g hostname ceph-storage03# 192.168.226.154 [rootbogon ~]# nmcli g hostname ceph-storage04# 192.168.226.155 [rootbogon ~]# nmcli g hostname ceph-storage05 给五台机器都配置本地解析 [rootceph-storage01 ~]# cat /etc/hosts EOF 192.168.226.151 ceph-storage01 192.168.226.152 ceph-storage02 192.168.226.153 ceph-storage03 192.168.226.154 ceph-storage04 192.168.226.155 ceph-storage05 EOF 配置五台机器SSH互信 # 只需在ceph-storage01操作即可,然后将生成的SSH拷贝到其它主机[rootceph-storage01 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa Your public key has been saved in /root/.ssh/id_rsa.pub The key fingerprint is: SHA256:J7aLJBfaWswFptu6rLr80BGhWxsjTp9TYmZfMTgA9tg rootceph-storage01 The keys randomart image is: ---[RSA 3072]---- | o.o. .o | |. .o o | | E .. | |o O Xo.. | | o *... S . | | . oB | | . . O . | |. .. B . . | |ooo.. . | ----[SHA256]----- [rootceph-storage01 ~]# ssh-copy-id ceph-storage01 [rootceph-storage01 ~]# scp -r .ssh ceph-storage02:/root/ [rootceph-storage01 ~]# scp -r .ssh ceph-storage03:/root/ [rootceph-storage01 ~]# scp -r .ssh ceph-storage04:/root/ [rootceph-storage01 ~]# scp -r .ssh ceph-storage05:/root/二. 安装Docker Docker五台服务器都需要安装 清理docker环境避免错误 [rootceph-storage01 ~]# sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine No match for argument: docker No match for argument: docker-client No match for argument: docker-client-latest No match for argument: docker-common No match for argument: docker-latest No match for argument: docker-latest-logrotate No match for argument: docker-logrotate No match for argument: docker-engine No packages marked for removal. Dependencies resolved. Nothing to do. Complete! [rootceph-storage01 ~]# rm -rf /etc/systemd/system/docker.service.d [rootceph-storage01 ~]# rm -rf /var/lib/docker [rootceph-storage01 ~]# rm -rf /var/run/docker [rootceph-storage01 ~]# rpm -qa | grep docker [rootceph-storage01 ~]# yum remove -y docker-* No match for argument: docker-* No packages marked for removal. Dependencies resolved. Nothing to do. Complete!安装 # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3 sudo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /etc/yum.repos.d/docker-ce.repo # Step 4: 更新并安装Docker-CE sudo yum makecache sudo yum -y install docker-ce # Step 4: 开启Docker服务 sudo service docker start 配置镜像加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF {registry-mirrors: [https://docker.rainbond.cc ,https://do.nark.eu.org,https://dc.j8.work,https://pilvpemn.mirror.aliyuncs.com,https://docker.m.daocloud.io,https://dockerproxy.com,https://docker.mirrors.ustc.edu.cn,https://docker.nju.edu.cn],exec-opts: [native.cgroupdriversystemd],log-driver: json-file,log-opts: {max-size: 100m},storage-driver: overlay2 } EOF sudo systemctl daemon-reload sudo systemctl restart docker 三. admin节点安装cephadm 选择第一台主机做admin节点安装cephadm [rootceph-storage01 ~]# dnf search release-ceph [rootceph-storage01 ~]# dnf install --assumeyes centos-release-ceph-reef [rootceph-storage01 ~]# dnf install --assumeyes cephadm # 通过运行以下命令来确认cephadm现在位于你的环境变量中: [rootceph-storage01 ~]# which cephadm /usr/sbin/cephadm 如果没有安装成功cephadm则执行本命令 sudo dnf clean all sudo dnf makecache sudo dnf install cephadm -y在admin节点主机初始化集群 [rootceph-storage01 ~]# cephadm bootstrap --mon-ip 192.168.226.151 --initial-dashboard-user admin --initial-dashboard-password 123456[rootceph-storage01 ~]# ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 5 192.168.226.151:8765 0.0.0.0:* users:((ceph-mgr,pid5378,fd45)) LISTEN 0 512 192.168.226.151:6789 0.0.0.0:* users:((ceph-mon,pid5186,fd28)) LISTEN 0 512 0.0.0.0:6800 0.0.0.0:* users:((ceph-mgr,pid5378,fd27)) LISTEN 0 512 0.0.0.0:6801 0.0.0.0:* users:((ceph-mgr,pid5378,fd28)) LISTEN 0 5 192.168.226.151:7150 0.0.0.0:* users:((ceph-mgr,pid5378,fd48)) LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid828,fd3)) LISTEN 0 4096 0.0.0.0:9926 0.0.0.0:* users:((ceph-exporter,pid13547,fd22)) LISTEN 0 512 192.168.226.151:3300 0.0.0.0:* users:((ceph-mon,pid5186,fd27)) LISTEN 0 4096 *:9094 *:* users:((alertmanager,pid14417,fd3)) LISTEN 0 4096 *:9093 *:* users:((alertmanager,pid14417,fd8)) LISTEN 0 4096 *:9100 *:* users:((node_exporter,pid14051,fd3)) LISTEN 0 5 *:8443 *:* users:((ceph-mgr,pid5378,fd58)) LISTEN 0 128 [::]:22 [::]:* users:((sshd,pid828,fd4)) [rootceph-storage01 ~]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/ceph/ceph v18 2bc0b0f4375d 2 weeks ago 1.25 GB quay.io/ceph/ceph-grafana 9.4.7 954c08fa6188 8 months ago 647 MB quay.io/prometheus/prometheus v2.43.0 a07b618ecd1d 16 months ago 235 MB quay.io/prometheus/alertmanager v0.25.0 c8568f914cd2 19 months ago 66.5 MB quay.io/prometheus/node-exporter v1.5.0 0da6a335fe13 20 months ago 23.9 MB日志目录位置/var/log/ceph/cephadm.log 浏览器访问https://IP8443端口 例如我这里访问https://192.168.226.151:8443/ 这里切记加上https://否则访问不到  用户名admin 密码123456 四. admin节点给另外四个主机导入镜像 将ceph-storage01主机上podman中下载好的五个镜像分别打包并导入另外四个集群的docker中。 这里我提供了三个脚本podman批量打包导入脚本批量远程用户拷贝目录脚本docker镜像的批量打包导入脚本 #!/bin/bash # podman镜像打包与导入脚本# 颜色和样式设置 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m BOLD\033[1m RESET\033[0m# 函数创建目录如果不存在的话 create_directory() {local dir$1if [ ! -d $dir ]; thenecho -e ${YELLOW}${BOLD}目录 $dir 不存在. 正在创建...${RESET}mkdir -p $dirfi }# 函数将字符 : 和 / 替换为 _以便创建有效的文件名 sanitize_filename() {echo $1 | sed s/:/_/g; s/\//_/g }# 函数打包所有镜像到指定目录 package_all_images() {local dest_dir$1create_directory $dest_direcho -e ${BLUE}${BOLD}正在列出所有镜像...${RESET}images$(podman images --format {{.Repository}}:{{.Tag}})for image in $images; dolocal filename$(sanitize_filename $image)local filepath$dest_dir/$filename.tarecho -e ${GREEN}${BOLD}正在保存 $image 到 $filepath...${RESET}podman save -o $filepath $imageif [ $? -eq 0 ]; thenecho -e ${GREEN}${BOLD}$image 已成功保存为 $filepath${RESET}elseecho -e ${RED}${BOLD}$image 保存失败${RESET}fidoneecho -e ${GREEN}${BOLD}所有镜像已打包到 $dest_dir。${RESET} }# 函数打包指定镜像到指定目录 package_specific_image() {local image$1local dest_dir$2create_directory $dest_dirlocal filename$(sanitize_filename $image)local filepath$dest_dir/$filename.tarecho -e ${GREEN}${BOLD}正在保存 $image 到 $filepath...${RESET}podman save -o $filepath $imageif [ $? -eq 0 ]; thenecho -e ${GREEN}${BOLD}镜像 $image 已打包到 $dest_dir。${RESET}elseecho -e ${RED}${BOLD}镜像 $image 打包失败${RESET}fi }# 函数从指定目录导入镜像 import_images() {local src_dir$1if [ ! -d $src_dir ]; thenecho -e ${RED}${BOLD}目录 $src_dir 不存在. 退出...${RESET}exit 1fiecho -e ${BLUE}${BOLD}正在从 $src_dir 导入镜像...${RESET}for tar_file in $src_dir/*.tar; doif [ -f $tar_file ]; thenecho -e ${GREEN}${BOLD}正在导入 $tar_file...${RESET}podman load -i $tar_fileif [ $? -eq 0 ]; thenecho -e ${GREEN}${BOLD}镜像 $tar_file 成功导入${RESET}elseecho -e ${RED}${BOLD}镜像 $tar_file 导入失败${RESET}fielseecho -e ${YELLOW}${BOLD}文件 $tar_file 不存在${RESET}fidoneecho -e ${GREEN}${BOLD}所有镜像已从 $src_dir 导入。${RESET} }# 主脚本逻辑 echo -e ${BLUE}${BOLD}请选择一个选项:${RESET} echo -e ${BLUE}1. 将所有镜像打包到指定目录${RESET} echo -e ${BLUE}2. 将指定镜像打包到指定目录${RESET} echo -e ${BLUE}3. 从指定目录导入镜像${RESET} read -r optioncase $option in1)echo -e ${BLUE}请输入目标目录:${RESET}read -r dest_dirpackage_all_images $dest_dir;;2)echo -e ${BLUE}请输入镜像名称例如 ubuntu:latest${RESET}read -r image_nameecho -e ${BLUE}请输入目标目录:${RESET}read -r dest_dirpackage_specific_image $image_name $dest_dir;;3)echo -e ${BLUE}请输入包含 tar 文件的源目录:${RESET}read -r src_dirimport_images $src_dir;;*)echo -e ${RED}${BOLD}无效的选项. 退出...${RESET}exit 1;; esac #!/bin/bash#一键传输脚本# 源目录路径 SOURCE_DIR/data# 目标目录路径在远程主机上 TARGET_DIR/data# 读取主机列表文件 HOSTS_FILEhosts.txt# SSH用户名 SSH_USERroot# 检查主机列表文件是否存在 if [ ! -f $HOSTS_FILE ]; thenecho 主机列表文件 $HOSTS_FILE 不存在exit 1 fi# 读取主机列表并拷贝目录 while IFS read -r host; doecho 拷贝目录到主机$hostscp -r -o StrictHostKeyCheckingno $SOURCE_DIR $SSH_USER$host:$TARGET_DIR done $HOSTS_FILE #!/bin/bash# docker镜像批量打包和导入脚本# 判断是否安装tar工具 if ! command -v tar /dev/null; thensudo yum install -y tar /dev/null fi# 存储目录 output_dir/data mkdir -p $output_dir# 打包镜像 save_image() {docker images --format {{.Repository}} {{.Tag}} | while read -r line; do# 分离出仓库和标签repository$(echo $line | awk {print $1} | awk -F / {print $NF})tag$(echo $line | awk {print $2})# 构建完整的镜像名称full_image_name$repository:$tag# 检查镜像是否为 none如果是则跳过if [ $repository none ]; thentput boldtput setaf 5echo 跳过 none repository: $tagtput sgr0continuefi# 打包镜像tar_file${output_dir}/${repository}_${tag}.tardocker save -o $tar_file $full_image_nameif [ $? -eq 0 ]; thentput boldtput setaf 2echo $full_image_name 成功保存tput sgr0elsetput boldtput setaf 1echo $full_image_name 保存失败tput sgr0fidone }# 导入镜像 load_image() {# 指定镜像包所在的目录image_dir$output_dir# 导入所有镜像包for image_file in ${image_dir}/*.tar; doif [ -f $image_file ]; then# 导入镜像docker load -i $image_fileif [ $? -eq 0 ]; thentput boldtput setaf 2echo 镜像 $(basename $image_file .tar) 成功导入tput sgr0elsetput boldtput setaf 1echo 镜像 $(basename $image_file .tar) 导入失败tput sgr0fielsetput boldtput setaf 5echo 镜像文件 $image_file 不存在tput sgr0fidone }# 提示用户选择操作直到输入正确 while true; dotput boldtput smultput setaf 3tput setab 0read -p 请选择操作$(tput setaf 6) 1. 打包镜像 $(tput setaf 4) 2. 导入镜像 $(tput setaf 2) q. 退出 selecttput sgr0case $select in1)save_imagebreak;;2)load_imagebreak;;q)exit;;*)tput boldtput setaf 5tput blinkecho 输入错误请输入 1 或 2tput sgr0;;esac done 五. 向集群中添加节点 本步骤仅在admin节点也就是ceph-storage01主机操作其他四条不用。 同步密钥 [rootceph-storage01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub rootceph-storage02 [rootceph-storage01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub rootceph-storage03 [rootceph-storage01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub rootceph-storage04 [rootceph-storage01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub rootceph-storage05 进入客户端工具 [rootceph-storage01 ~]# cephadm shell Inferring fsid 62a58a62-561e-11ef-9dc4-000c29a2177e Inferring config /var/lib/ceph/62a58a62-561e-11ef-9dc4-000c29a2177e/mon.ceph-storage01/config Using ceph image with id 2bc0b0f4375d and tag v18 created on 2024-07-23 22:19:35 0000 UTC quay.io/ceph/cephsha256:6ac7f923aa1d23b43248ce0ddec7e1388855ee3d00813b52c3172b0b23b37906 [ceph: rootceph-storage01 /]# # 查看当前集群中的节点 [ceph: rootceph-storage01 /]# ceph orch host ls HOST ADDR LABELS STATUS ceph-storage01 192.168.226.151 _admin 1 hosts in cluster [ceph: rootceph-storage01 /]# 添加节点 [ceph: rootceph-storage01 /]# ceph orch host add ceph-storage02 Added host ceph-storage02 with addr 192.168.226.152 [ceph: rootceph-storage01 /]# ceph orch host add ceph-storage03 Added host ceph-storage03 with addr 192.168.226.153 [ceph: rootceph-storage01 /]# ceph orch host add ceph-storage04 Added host ceph-storage04 with addr 192.168.226.154 [ceph: rootceph-storage01 /]# ceph orch host add ceph-storage05 Added host ceph-storage05 with addr 192.168.226.155# 查看当前集群中的节点 [ceph: rootceph-storage01 /]# ceph orch host ls HOST ADDR LABELS STATUS ceph-storage01 192.168.226.151 _admin ceph-storage02 192.168.226.152 ceph-storage03 192.168.226.153 ceph-storage04 192.168.226.154 ceph-storage05 192.168.226.155 5 hosts in cluster手动添加节点为mon [ceph: rootceph-storage01 /]# ceph orch apply mon --placementceph-storage01,ceph-storage02,ceph-storage03# 给 ceph-storage01 主机添加 mon 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage01 mon # 输出: Added label mon to host ceph-storage01# 给 ceph-storage02 主机添加 mon 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage02 mon # 输出: Added label mon to host ceph-storage02# 给 ceph-storage03 主机添加 mon 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage03 mon # 输出: Added label mon to host ceph-storage03# 给 ceph-storage01 主机添加 mgr 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage01 mgr # 输出: Added label mgr to host ceph-storage01# 给 ceph-storage02 主机添加 mgr 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage02 mgr # 输出: Added label mgr to host ceph-storage02# 给 ceph-storage01 主机添加 mds 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage01 mds # 输出: Added label mds to host ceph-storage01# 给 ceph-storage04 主机添加 mds 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage04 mds # 输出: Added label mds to host ceph-storage04# 给 ceph-storage05 主机添加 mds 标签 [ceph: rootceph-storage01 /]# ceph orch host label add ceph-storage05 mds # 输出: Added label mds to host ceph-storage05# 列出集群中所有主机及其标签和状态可以用来检查标签是否已成功添加到主机上并确认主机的角色分配是否符合预期。 [ceph: rootceph-storage01 /]# ceph orch host ls # 输出: # HOST ADDR LABELS STATUS # ceph-storage01 192.168.226.151 _admin,mon,mgr,mds # ceph-storage02 192.168.226.152 mon,mgr # ceph-storage03 192.168.226.153 mon # ceph-storage04 192.168.226.154 mds # ceph-storage05 192.168.226.155 mds # 5 hosts in cluster带有相同label的节点可以同时启动相同的服务比如mds 标签用于标识主机的角色或功能。例如mon 标签表示监视器Monitor角色mgr 表示管理器Manager角色mds 表示元数据服务器Metadata Server角色。  标签分配结果 ceph-storage01: 拥有所有标签 (mon, mgr, mds)表示它被配置为多个角色的主机。ceph-storage02: 具有 mon 和 mgr 标签表示它同时承担监视器和管理器角色。ceph-storage03: 仅有 mon 标签表示它是一个监视器主机。ceph-storage04: 只有 mds 标签表示它是一个元数据服务器主机。ceph-storage05: 也只有 mds 标签表示它也是一个元数据服务器主机。 六. Ceph使用 Ceph的使用仅在admin节点管理操作即可。 列出可用设备 # 列出 Ceph 集群中所有可用的存储设备及其状态。 [ceph: rootceph-storage01 /]# ceph orch device ls HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS ceph-storage01 /dev/sdb hdd 50.0G No 43s ago Has a FileSystem, Insufficient space (10 extents) on vgs, LVM detected ceph-storage01 /dev/sdc hdd 20.0G Yes 43s ago ceph-storage01 /dev/sdd hdd 20.0G Yes 43s ago ceph-storage01 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 43s ago Failed to determine if device is BlueStore, Insufficient space (5GB) ceph-storage02 /dev/sdb hdd 50.0G No 35s ago Has a FileSystem, Insufficient space (10 extents) on vgs, LVM detected ceph-storage02 /dev/sdc hdd 20.0G Yes 35s ago ceph-storage02 /dev/sdd hdd 20.0G Yes 35s ago ceph-storage02 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 35s ago Failed to determine if device is BlueStore, Insufficient space (5GB) ceph-storage03 /dev/sdb hdd 50.0G No 36s ago Has a FileSystem, Insufficient space (10 extents) on vgs, LVM detected ceph-storage03 /dev/sdc hdd 20.0G Yes 36s ago ceph-storage03 /dev/sdd hdd 20.0G Yes 36s ago ceph-storage03 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 36s ago Failed to determine if device is BlueStore, Insufficient space (5GB) ceph-storage04 /dev/sdb hdd 50.0G No 35s ago Has a FileSystem, Insufficient space (10 extents) on vgs, LVM detected ceph-storage04 /dev/sdc hdd 20.0G Yes 35s ago ceph-storage04 /dev/sdd hdd 20.0G Yes 35s ago ceph-storage04 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 35s ago Failed to determine if device is BlueStore, Insufficient space (5GB) ceph-storage05 /dev/sdb hdd 50.0G No 35s ago Has a FileSystem, Insufficient space (10 extents) on vgs, LVM detected ceph-storage05 /dev/sdc hdd 20.0G Yes 35s ago ceph-storage05 /dev/sdd hdd 20.0G Yes 35s ago ceph-storage05 /dev/sr0 hdd VMware_Virtual_SATA_CDRW_Drive_01000000000000000001 1023M No 35s ago Failed to determine if device is BlueStore, Insufficient space (5GB) 以下是各字段的说明HOST: 设备所在的主机名。 PATH: 设备的路径例如 /dev/sdb。 TYPE: 设备类型通常为 hdd 或 ssd。 DEVICE ID: 设备的标识符或名称。 SIZE: 设备的总容量。 AVAILABLE: 设备是否可用。Yes 表示可用No 表示不可用。 REFRESHED: 上次更新的时间。 REJECT REASONS: 设备不可用的原因如有文件系统、空间不足、检测到LVM等。 AVAILABLE 列的值应满足以下条件 没有分区设备上没有分区表。没有LVM配置设备未配置为LVM物理卷。没有被挂载设备未被挂载到任何目录。没有文件系统设备上没有现有的文件系统。没有ceph bluestore osd设备没有配置为Ceph BlueStore OSD。大于5G设备的总容量大于5GB。 在实际应用中即会自动识别每台机器上的空硬盘满足条件的会在AVAILABLE 列显示为yes 清除设备数据---针对有数据的设备 对于可以使用的硬盘如何里面有数据可以进行下述命令清楚数据 # 使用 Ceph orchestrator 对指定设备进行 zap 操作 # ceph orch device zap 命令用于清除zap指定 Ceph 存储设备上的所有数据。 # 选项 --force 强制执行操作即使设备上可能有数据。 # 在这个例子中/dev/sdc 是目标设备ceph-storage02 是执行操作的 Ceph 存储节点。[ceph: rootceph-storage01 /]# ceph orch device zap ceph-storage02 /dev/sdc --force zap successful for /dev/sdc on ceph-storage02 # 操作成功的提示信息# 表示设备 /dev/sdc 在节点 ceph-storage02 上的 zap 操作已经成功完成。 或者登录对应的机器执行 # sgdisk --zap-all /dev/sdd检查 OSD 状态 [ceph: rootceph-storage01 /]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0 root default Ceph 集群中添加一个新的 OSD # 方法一手动添加单个可用设备 [ceph: rootceph-storage01 /]# ceph orch daemon add osd ceph-storage01:/dev/sdc # 方法二一次性添加所有可用设备 [ceph: rootceph-storage01 /]# ceph orch apply osd --all-available-devices # 再次查看 OSD 状态 [ceph: rootceph-storage01 /]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF-1 0.19485 root default -3 0.03897 host ceph-storage01 0 hdd 0.01949 osd.0 up 1.00000 1.000001 hdd 0.01949 osd.1 up 1.00000 1.00000-9 0.03897 host ceph-storage02 5 hdd 0.01949 osd.5 up 1.00000 1.000009 hdd 0.01949 osd.9 up 1.00000 1.00000-5 0.03897 host ceph-storage03 3 hdd 0.01949 osd.3 up 1.00000 1.000007 hdd 0.01949 osd.7 up 1.00000 1.00000 -11 0.03897 host ceph-storage04 2 hdd 0.01949 osd.2 up 1.00000 1.000006 hdd 0.01949 osd.6 up 1.00000 1.00000-7 0.03897 host ceph-storage05 4 hdd 0.01949 osd.4 up 1.00000 1.000008 hdd 0.01949 osd.8 up 1.00000 1.00000查看集群的健康状态 [ceph: rootceph-storage01 /]# ceph -s cluster:id: 2091bd16-561f-11ef-85dc-000c29a2177ehealth: HEALTH_OKservices:mon: 3 daemons, quorum ceph-storage01,ceph-storage02,ceph-storage03 (age 5m)mgr: ceph-storage02.abqgll(active, since 5m), standbys: ceph-storage01.mhqcffosd: 10 osds: 10 up (since 74s), 10 in (since 94s)data:pools: 1 pools, 1 pgsobjects: 2 objects, 449 KiBusage: 267 MiB used, 200 GiB / 200 GiB availpgs: 1 activeclean[ceph: rootceph-storage01 /]# ceph statuscluster:id: 2091bd16-561f-11ef-85dc-000c29a2177ehealth: HEALTH_OKservices:mon: 3 daemons, quorum ceph-storage01,ceph-storage02,ceph-storage03 (age 21m)mgr: ceph-storage02.abqgll(active, since 21m), standbys: ceph-storage01.mhqcffosd: 10 osds: 10 up (since 17m), 10 in (since 17m)data:pools: 1 pools, 1 pgsobjects: 2 objects, 449 KiBusage: 267 MiB used, 200 GiB / 200 GiB availpgs: 1 activeclean 指定MDS MDSMetadata Server元数据服务器在 Ceph 集群中负责处理文件系统的元数据。元数据是指文件系统的结构信息例如文件的名称、权限、位置等与实际的文件数据即对象存储在 OSD 上不同。 # 部署mds进程 [ceph: rootceph-storage01 /]# ceph orch apply mds myfs --placementceph-storage01,ceph-storage02,ceph-storage03 Scheduled mds.myfs update...# 列出 Ceph 集群中所有的 MDSMetadata Server守护进程的信息的命令。它显示了当前正在运行的 MDS 实例及其状态。 [ceph: rootceph-storage01 /]# ceph orch ps --daemon_type mds NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID mds.myfs.ceph-storage01.weppfs ceph-storage01 running (8s) 6s ago 8s 12.9M - 18.2.4 2bc0b0f4375d a886ca09d667 mds.myfs.ceph-storage02.zsnsgl ceph-storage02 running (11s) 2s ago 11s 18.6M - 18.2.4 2bc0b0f4375d 16ca9dc7b79c mds.myfs.ceph-storage03.pavvry ceph-storage03 running (10s) 2s ago 10s 17.4M - 18.2.4 2bc0b0f4375d 015b2cc627fa 列出当前 Ceph 集群中的所有数据池的名称 [ceph: rootceph-storage01 /]# ceph osd pool ls .mgr创建ODS pool # 设置全局配置将所有新创建的池的默认副本数设置为 3 [ceph: rootceph-storage01 /]# ceph config set global osd_pool_default_size 3# 创建名为 rbds 的池设置 pg_num 和 pgp_num 都为 128 [ceph: rootceph-storage01 /]# ceph osd pool create rbds 128 128 pool rbds created# 创建名为 cephfs_data 的池设置 pg_num 和 pgp_num 都为 128 [ceph: rootceph-storage01 /]# ceph osd pool create cephfs_data 128 128 pool cephfs_data created# 创建名为 cephfs_metadata 的池设置 pg_num 和 pgp_num 都为 64 [ceph: rootceph-storage01 /]# ceph osd pool create cephfs_metadata 64 64 pool cephfs_metadata created# 列出所有池的简要信息 [ceph: rootceph-storage01 /]# ceph osd pool ls .mgr rbds cephfs_data cephfs_metadata# 列出所有池的详细信息 [ceph: rootceph-storage01 /]# ceph osd pool ls detail pool 1 .mgr replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 28 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr read_balance_score 10.00 pool 2 rbds replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 116 pgp_num 109 pg_num_target 32 pgp_num_target 32 autoscale_mode on last_change 90 lfor 0/90/88 flags hashpspool stripe_width 0 read_balance_score 1.38 pool 3 cephfs_data replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 pg_num_target 32 pgp_num_target 32 autoscale_mode on last_change 91 flags hashpspool stripe_width 0 read_balance_score 1.25 pool 4 cephfs_metadata replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode on last_change 48 flags hashpspool stripe_width 0 read_balance_score 1.56 扩展命令 # 设置名为 cephfs_data 的数据池副本数为 2 [ceph: rootceph-storage01 /]# ceph osd pool set cephfs_data size 2# 设置名为 cephfs_metadata 的数据池副本数为 2 [ceph: rootceph-storage01 /]# ceph osd pool set cephfs_metadata size 2# 查看名为 cephfs_metadata 的数据池的副本数 [ceph: rootceph-storage01 /]# ceph osd pool get cephfs_metadata size# 查看名为 cephfs_data 的数据池的副本数 [ceph: rootceph-storage01 /]# ceph osd pool get cephfs_data size# 设置允许删除数据池的配置 [ceph: rootceph-storage01 /]# ceph config set mon mon_allow_pool_delete true# 设置禁止删除数据池的配置 [ceph: rootceph-storage01 /]# ceph config set mon mon_allow_pool_delete false# 删除名为 pg_name 的数据池 [ceph: rootceph-storage01 /]# ceph osd pool rm pg_name pg_name --yes-i-really-really-mean-it为新的pool指定application # 启用 rbd 应用程序在名为 rbds 的数据池上 [ceph: rootceph-storage01 /]# ceph osd pool application enable rbds rbd # 说明此命令将 rbd 应用程序启用在 rbds 数据池上。RADOS Block Device (RBD) 是 Ceph 的块存储应用程序。启用后可以在此数据池中创建 RBD 镜像。# 启用 cephfs 应用程序在名为 cephfs_data 的数据池上 [ceph: rootceph-storage01 /]# ceph osd pool application enable cephfs_data cephfs # 说明此命令将 cephfs 应用程序启用在 cephfs_data 数据池上。Ceph 文件系统 (CephFS) 是 Ceph 的文件存储应用程序。启用后数据池可以用于 CephFS 文件存储。# 启用 cephfs 应用程序在名为 cephfs_metadata 的数据池上 [ceph: rootceph-storage01 /]# ceph osd pool application enable cephfs_metadata cephfs # 说明此命令将 cephfs 应用程序启用在 cephfs_metadata 数据池上。此池专门用于 CephFS 的元数据存储。启用后数据池可以用于 CephFS 文件系统的元数据存储。CephFS的创建与删除 新增一台虚拟机作为客户端使用进行时间同步关闭防火墙和selinux 主机名IP节点配置client192.168.226.156client1核1G-38G磁盘 给这个客户端机器安装ceph [rootclient ~]# dnf search release-ceph [rootclient ~]# dnf install --assumeyes centos-release-ceph-reef [rootclient ~]# dnf install --assumeyes cephadm [rootclient ~]# cephadm version创建 在admin节点执行 # 创建一个新的 Ceph 文件系统名为 cephfs # cephfs_metadata 池用于存储文件系统的元数据 # cephfs_data 池用于存储文件数据 [ceph: rootceph-storage01 /]# ceph fs new cephfs cephfs_metadata cephfs_dataPool cephfs_data (id 3) has pg autoscale mode on but is not marked as bulk.Consider setting the flag by running# ceph osd pool set cephfs_data bulk true new fs with metadata pool 4 and data pool 3注 # 如果要删除 Ceph 文件系统需要先将其设置为 fail 状态 ceph fs fail cephfs# 删除 Ceph 文件系统使用 --yes-i-really-really-mean-it 参数以确认删除操作 ceph fs rm cephfs --yes-i-really-really-mean-it在admin节点获取一个密钥 # 获取并显示 Ceph 集群的管理员客户端client.admin的密钥 [ceph: rootceph-storage01 /]# ceph auth get-key client.admin# 使用 SCP 命令将本地的 Ceph 配置文件复制到远程主机 [ceph: rootceph-storage01 /]# scp /etc/ceph/ceph.conf root192.168.226.156:/etc/ceph/ceph.conf 在client客户端执行 # 在客户端创建一个挂载点目录用于挂载 Ceph 文件系统 [rootclient ~]# mkdir /mnt/mycephfs# 挂载 Ceph 文件系统到指定的目录使用密钥进行身份验证 [rootclient ~]# mount -t ceph 192.168.226.151:6789:/ /mnt/mycephfs -o nameadmin,secretAQCrwrVm/7fIMxAAv30br0kwBWBo9CeggOFPTg# 查看挂载情况确认挂载是否成功 [rootclient ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev tmpfs tmpfs 369M 0 369M 0% /dev/shm tmpfs tmpfs 148M 8.6M 139M 6% /run /dev/mapper/rl-root xfs 37G 7.9G 29G 22% / /dev/sda1 xfs 960M 225M 736M 24% /boot tmpfs tmpfs 74M 0 74M 0% /run/user/0 192.168.226.151:6789:/ ceph 64G 0 64G 0% /mnt/mycephfs 注 前述用法会把密码遗留在 Bash 历史里更安全的方法是从文件读密码。 例如下述代码的形式 mount -t ceph 192.168.226.151:6789:/ /mnt/mycephfs -o nameadmin,secretfile/etc/ceph/admin.secret  要卸载 Ceph 文件系统可以用unmount 命令例如: umount /mnt/mycephfs 接下来在客户端创建一个大文件 # 进入挂载点 [rootclient ~]# cd /mnt/mycephfs/# 创建一个指定大小大文件 [rootclient mycephfs]# dd if/dev/zero ofa.txt bs1M count2300# 再创建一个 [rootclient mycephfs]# echo 这是在192.168。226.156的client客户端写入创建的。 /mnt/mycephfs/ceshi.txt#查看大小 [rootclient mycephfs]# du -sh * 2.3G a.txt 512 ceshi.txt 在admin节点查看Ceph 集群状态 [ceph: rootceph-storage01 /]# ceph -scluster:id: 2091bd16-561f-11ef-85dc-000c29a2177ehealth: HEALTH_OKservices:mon: 3 daemons, quorum ceph-storage01,ceph-storage02,ceph-storage03 (age 113m)mgr: ceph-storage01.mhqcff(active, since 113m), standbys: ceph-storage02.abqgllmds: 1/1 daemons up, 2 standbyosd: 10 osds: 10 up (since 113m), 10 in (since 113m)data:volumes: 1/1 healthypools: 4 pools, 81 pgsobjects: 601 objects, 2.2 GiBusage: 7.5 GiB used, 192 GiB / 200 GiB availpgs: 81 activeclean其中data: 显示了集群的数据状态。 volumes: 1 个数据卷状态正常。 pools: 4 个池pool共有 81 个放置组PGs。 objects: 集群中有 600 个对象总数据量为 2.2 GiB。 usage: 总空间为 200 GiB已使用 7.5 GiB剩余 192 GiB 可用。 pgs: 所有 81 个放置组都处于 activeclean 状态表示数据已经完全同步并且健康。 在 Ceph 集群中usage 中显示的 7.5 GiB 是集群中所有数据的总使用量这个量包括了数据对象、元数据、以及存储的其他开销。 实际数据我们创建的 a.txt 文件大小为 2.3 GiB尽管这在文件系统中是实际存储的内容但在 Ceph 中可能会因为副本、冗余和其他存储机制而占用更多的空间。 副本Ceph 默认会存储数据的多个副本以保证数据的可靠性和冗余。例如使用的是三副本replication size 32.3 GiB 的数据将会占用 2.3 GiB × 3 6.9 GiB。 在另外一台主机上也挂载然后查看这里我是随便选的主机在192.168.226.152为ceph-storage02的主机上挂载 [rootceph-storage02 ~]# mount -t ceph 192.168.226.151:6789:/ /mnt -o nameadmin,secretAQCrwrVm/7fIMxAAv30br0kwBWBo9CeggOFPTg [rootceph-storage02 ~]# ll /mnt total 2355201 -rw-r--r-- 1 root root 2411724800 Aug 10 15:28 a.txt -rw-r--r-- 1 root root 63 Aug 10 15:30 ceshi.txt [rootceph-storage02 ~]# cat /mnt/ceshi.txt 这是在192.168。226.156的client客户端写入创建的。 可以看到文件会共享过来。 查看监控  浏览器访问https://admin节点的IP3000端口,例如我这里访问https://192.168.226.151:3000/ 设置开机自动挂载 # 创建并编辑密钥文件将密钥写入 /etc/ceph/ceph.client.admin.keyring如过没有就自行创建该文件这里略过 [rootclient ~]# vim /etc/ceph/ceph.client.admin.keyring AQCrwrVm/7fIMxAAv30br0kwBWBo9CeggOFPTg# 添加以下行到 /etc/fstab 文件末尾 # 192.168.226.151:6789:/ 表示 Ceph Monitor 的地址和端口 # /mnt/mycephfs 是挂载点 # ceph 是文件系统类型 # nameadmin 指定使用的 Ceph 用户名 # secretfile/etc/ceph/admin.secret 指定密钥文件的位置 # _netdev 表示这是一个网络文件系统确保在网络可用时挂载 # 0 0 用于备份和检查选项 [rootclient ~]# vim /etc/fstab #再该文件最后追加入下述配置 192.168.226.151:6789:/ /mnt/mycephfs ceph nameadmin,secretfile/etc/ceph/ceph.client.admin.keyring,_netdev 0 0# 使用 mount -a 命令测试 /etc/fstab 中的挂载配置 [rootclient ~]# mount -a # 挂载 /etc/fstab 中配置的所有文件系统 RBD相关操作 在 Ceph 存储系统中RBDRADOS Block Device是一个关键的组件提供块存储服务。 RBDRADOS Block Device概述 1. 块存储服务 RBD 提供类似于传统硬盘驱动器的块存储服务。它允许用户在 Ceph 集群上创建和管理块设备这些设备可以像本地磁盘一样使用。 2. Ceph 的核心组件 Ceph 是一个分布式存储系统设计用于提供高可用性、高可靠性和高性能的存储服务。RBD 是 Ceph 的一个重要组成部分特别适用于需要块存储的场景如虚拟化和数据库应用。 3. RADOS 层 RBD 基于 Ceph 的底层存储引擎 RADOSReliable Autonomic Distributed Object Store。RADOS 提供高可用性和数据持久性RBD 通过 RADOS 存储块设备的数据。 RBD 的主要特性 1. 动态扩展 RBD 支持动态扩展可以根据需要增加卷的大小而无需停机或重新分区。 2. 快照和克隆 支持创建快照snapshot和克隆clone。快照可以用来记录设备在某一时刻的状态克隆则可以基于现有块设备创建新的实例通常用于快速部署测试环境。 3. 高性能 RBD 设计为高性能块存储支持高吞吐量和低延迟访问适合高负载应用。 4. 备份和恢复 提供备份和恢复功能可以将数据从 RBD 卷中备份并恢复确保数据的持久性和可靠性。 5. 兼容性 RBD 可以与多种操作系统和应用程序兼容支持通过标准的块设备接口如 Linux 的 radosgw 和 rados 工具进行操作。 创建 [ceph: rootceph-storage01 /]# rbd ls rbds # 列出 rbds 池中的所有 RBD 图像 [ceph: rootceph-storage01 /]# rbd create rbds/rbd01 --size 12G # 创建一个名为 rbd01大小为 12GiB 的 RBD 图像 [ceph: rootceph-storage01 /]# rbd ls rbds # 再次列出 rbds 池中的所有 RBD 图像确认创建成功 rbd01 [ceph: rootceph-storage01 /]# rbd info rbds/rbd01 # 显示名为 rbd01 的 RBD 图像的详细信息 rbd image rbd01:size 12 GiB in 3072 objectsorder 22 (4 MiB objects)snapshot_count: 0id: d3c61180ba6ablock_name_prefix: rbd_data.d3c61180ba6aformat: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Sat Aug 10 08:55:34 2024access_timestamp: Sat Aug 10 08:55:34 2024modify_timestamp: Sat Aug 10 08:55:34 2024 注 # 取消RBD的object-map, fast-diff, deep-flatten特性因为要用到kubernetes或者其他地方 [ceph: rootceph-storage01 /]# rbd feature disable rbds/rbd01 object-map fast-diff deep-flatten [ceph: rootceph-storage01 /]# rbd info rbds/rbd01 客户端操作 这也是在admin节点上操作即主机名为ceph-storage01 需要有rbd模块 下载 [rootceph-storage01 ~]# sudo dnf install -y ceph ceph-common ceph-osd ceph-mds ceph-mgr# 查看是否安装成功 [rootceph-storage01 ~]# which rbd /usr/bin/rbd # 列出当前加载的内核模块并过滤出包含 rbd 的模块 [rootceph-storage01 ~]# lsmod | grep rbd# 如果没有 rbd 模块则加载 rbd 内核模块 [rootceph-storage01 ~]# modprobe rbd# 再次列出当前加载的内核模块并过滤出包含 rbd 的模块确认 rbd 模块已经加载 [rootceph-storage01 ~]# lsmod | grep rbd rbd 155648 0 libceph 581632 1 rbd# 映射 Ceph RADOS Block Device (RBD) 图像到本地设备rbds/rbd01 是 Ceph pool 和 image 名称 [rootceph-storage01 ~]# rbd map rbds/rbd01 /dev/rbd0# 查看映射到本地的 RBD 设备的块设备信息确认设备 /dev/rbd0 已被创建 [rootceph-storage01 ~]# lsblk /dev/rbd0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT rbd0 252:0 0 12G 0 disk# 显示当前所有映射的 RBD 设备信息 [rootceph-storage01 ~]# rbd showmapped id pool namespace image snap device 0 rbds rbd01 - /dev/rbd0# 格式化映射的 RBD 设备 /dev/rbd0 为 XFS 文件系统 [rootceph-storage01 ~]# mkfs.xfs /dev/rbd0 meta-data/dev/rbd0 isize512 agcount16, agsize196608 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1 bigtime1 inobtcount1 nrext640 data bsize4096 blocks3145728, imaxpct25 sunit16 swidth16 blks naming version 2 bsize4096 ascii-ci0, ftype1 log internal log bsize4096 blocks16384, version2 sectsz512 sunit16 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents0 Discarding blocks...Done. # 配置开机自动映射 RBD 设备 # 这一步骤是为了确保在系统启动时自动映射 Ceph RADOS Block Device (RBD) 图像# 编辑 /etc/rc.local 文件添加自动映射命令 [rootceph-storage01 ~]# vim /etc/rc.local# 在文件中添加以下行 # 这行命令将在系统启动时自动映射 Ceph RADOS Block Device (RBD) 图像 rbds/rbd01 rbd map rbds/rbd01 # 保存并退出 vim 编辑器# 使 /etc/rc.local 文件可执行 # 这一步骤是必要的因为 /etc/rc.local 文件需要具有执行权限才能在系统启动时运行 [rootceph-storage01 ~]# chmod ax /etc/rc.local断开映射的方法 # 断开 RBD 设备的映射 # 这一步骤将卸载 Ceph RADOS Block Device (RBD) 图像 rbds/rbd01从而解除设备与 Ceph 集群的关联# 使用 rbd unmap 命令来断开 RBD 设备的映射 # rbds/rbd01 是要断开的 Ceph RADOS Block Device 图像 [rootceph-storage01 ~]# rbd unmap rbds/rbd01# 显示当前映射的 RBD 设备信息 # 这一步骤用于确认设备映射已经成功断开 [rootceph-storage01 ~]# rbd showmapped补充 # 查看版本 ceph tell mon.* version # 查看监视器 (mon) 版本 ceph tell osd.* version # 查看对象存储守护进程 (osd) 版本 ceph tell mds.* version # 查看元数据服务器 (mds) 版本# 服务管理 ceph orch ls # 列出当前的服务 ceph orch rm {service_name} # 删除服务{service_name} 是服务名称 ceph orch daemon rm {daemon_name} [--force] # 删除指定守护进程{daemon_name} 是守护进程名称# RBD 操作 # 创建镜像 rbd create -p rbds --image rbd01 --size 10G # 或简写为 rbd create rbds/rbd01 --size 10G# 镜像管理 rbd ls -l -p rbd-demo # 查看存储池下镜像 rbd info -p rbd-demo --image rbd-demo1.img # 查看镜像详细信息 rbd resize -p rbd-demo --image rbd-demo1.img --size 20G # 修改镜像大小减少时加 --allow-shrink rbd rm -p rbd-demo --image rbd-demo2.img # 删除镜像无法找回 rbd trash move rbd-demo/rbd-demo1.img # 移动到回收站 rbd ls -l -p rbd-demo # 查看回收站中的镜像 rbd trash list -p rbd-demo # 查看回收站中的镜像 rbd trash restore rbd-demo/acc62785c8bb # 还原镜像# 客户端操作 rbd showmapped # 查看映射 rbd device list # 查看设备 rbd unmap rbd-demo/rbd-demo1.img # 断开映射# 快照管理 rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1 # 创建快照 # 或简写为 rbd snap create rbd-demo/rbd-demo1.imgdemo1_snap1 rbd snap list rbd-demo/rbd-demo1.img # 列出所有快照可加 --format json --pretty-format 以 JSON 格式输出# 快照还原 rbd unmap rbd-demo/rbd-demo1.img # 客户端操作断开映射 rbd snap rollback rbd-demo/rbd-demo1.imgdemo1_snap1 # 管理操作还原快照 rbd map rbd-demo/rbd-demo1.img # 客户端操作重新映射# 修改 CRUSH 规则 ceph osd crush rule ls # 列出 CRUSH 规则 ceph osd crush rule create-replicated on-ssd default host ssd # 创建 SSD 规则 ceph osd crush rule create-replicated on-hdd default host hdd # 创建 HDD 规则 ceph osd crush rule ls # 查看现有 CRUSH 规则# 应用 CRUSH 规则到池 ceph osd pool create bench.ssd 64 64 on-ssd # 创建应用 SSD 规则的池 ceph osd pool create bench.hdd 128 128 on-hdd # 创建应用 HDD 规则的池部署RGW服务 Ceph RGWRADOS Gateway是 Ceph 的一个组件提供对象存储接口使用户能够通过兼容 S3Amazon Simple Storage Service和 SwiftOpenStack Object StorageAPI 来访问 Ceph 存储集群。它允许用户以对象形式存储数据并支持多种功能如 数据存储以对象的形式存储文件或数据。访问控制通过 ACL访问控制列表和桶策略来管理数据访问权限。数据分发支持对象的静态内容分发如图片和视频。多租户支持支持在同一 RGW 实例中隔离多个用户或组织的数据。 # 为指定的主机添加标签 rgw [rootceph-storage01 ~]# ceph orch host label add ceph-storage04 rgw # 将 rgw 标签添加到主机 ceph-storage04 [rootceph-storage01 ~]# ceph orch host label add ceph-storage05 rgw # 将 rgw 标签添加到主机 ceph-storage05# 应用 RGW 服务并指定放置规则 [rootceph-storage01 ~]# ceph orch apply rgw rgw --placementlabel:rgw count-per-host:2 --port8000 # rgw服务名称 # --placementlabel:rgw count-per-host:2在标记为 rgw 的主机上每台主机运行 2 个 RGW 实例 # --port8000指定 RGW 服务监听的端口为 8000 # 执行此命令将调度 RGW 服务更新 # 列出所有 Ceph 服务 [ceph: rootceph-storage01 /]# ceph orch ls NAME PORTS RUNNING REFRESHED AGE PLACEMENT alertmanager ?:9093,9094 1/1 3m ago 29h count:1 ceph-exporter 5/5 4m ago 29h * crash 5/5 4m ago 29h * grafana ?:3000 1/1 3m ago 29h count:1 mds.myfs 3/3 3m ago 8h ceph-storage01;ceph-storage02;ceph-storage03 mgr 2/2 3m ago 29h count:2 mon 3/3 3m ago 28h ceph-storage01;ceph-storage02;ceph-storage03 node-exporter ?:9100 5/5 4m ago 29h * osd.all-available-devices 10 4m ago 9h * prometheus ?:9095 1/1 3m ago 29h count:1 rgw.rgw ?:8000 4/4 4m ago 5m count-per-host:2;label:rgw # 列出所有 RGW 守护进程的状态 [ceph: rootceph-storage01 /]# ceph orch ps --daemon_type rgw NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID rgw.rgw.ceph-storage04.ifjaln ceph-storage04 *:8001 running (32m) 38s ago 32m 101M - 18.2.4 2bc0b0f4375d 454921108f4e rgw.rgw.ceph-storage04.xagqqg ceph-storage04 *:8000 running (32m) 38s ago 32m 123M - 18.2.4 2bc0b0f4375d 1c3dae56f48e rgw.rgw.ceph-storage05.gavkvv ceph-storage05 *:8000 running (32m) 41s ago 32m 85.4M - 18.2.4 2bc0b0f4375d 72b3f39ce746 rgw.rgw.ceph-storage05.ryyvio ceph-storage05 *:8001 running (32m) 41s ago 32m 85.3M - 18.2.4 2bc0b0f4375d 545f24a11dff # 列出所有 Ceph 存储池 [ceph: rootceph-storage01 /]# ceph osd pool ls .mgr rbds cephfs_data cephfs_metadata .rgw.root default.rgw.log default.rgw.control default.rgw.meta# 输出解释 # .mgr: 存储管理器使用的池通常用于存储管理相关数据 # rbds: 自定义存储池用于 RADOS Block Device (RBD) 镜像通常用于块存储 # cephfs_data: Ceph 文件系统 (CephFS) 使用的数据池 # cephfs_metadata: Ceph 文件系统 (CephFS) 使用的元数据池 # .rgw.root: RADOS Gateway (RGW) 使用的根池 # default.rgw.log: RGW 使用的日志池 # default.rgw.control: RGW 使用的控制池 # default.rgw.meta: RGW 使用的元数据池# 各池的作用 # - 存储池用于存储 Ceph 集群的不同类型的数据池的名称通常表示其用途或关联的服务。 # - .mgr 和 .rgw.root 是 Ceph 系统池通常由 Ceph 系统或服务自动创建并管理。 # - rbds、cephfs_data、cephfs_metadata 和 RGW 相关池 (default.rgw.*) 是用户自定义池或服务池用于特定的数据存储需求。 创建RGW用户 # 创建一个新的 RGW 用户 [ceph: rootceph-storage01 /]# radosgw-admin user create --uid xiaobai --display-nameCeph RGW S3 style test user # 输出示例 {user_id: xiaobai, # 用户的唯一标识符display_name: Ceph RGW S3 style test user, # 用户的显示名称email: , # 用户的电子邮件未设置suspended: 0, # 用户是否被暂停0 表示未暂停max_buckets: 1000, # 用户可以创建的最大桶数量subusers: [], # 用户的子用户此用户没有子用户keys: [ # 用户的访问密钥{user: xiaobai, # 用户标识符access_key: CDOID6HK3UVPT76BSGYJ, # 用户的访问密钥secret_key: 2uRa8cBtQjza2qlHBUAmdQbDQtVEgAWjUOMeNhW0 # 用户的秘密密钥}],swift_keys: [], # Swift 密钥此用户没有 Swift 密钥caps: [], # 用户的权限此用户没有特殊权限op_mask: read, write, delete, # 用户的操作掩码定义了可执行的操作读、写、删除default_placement: , # 默认放置策略未设置default_storage_class: , # 默认存储类未设置placement_tags: [], # 放置标签此用户没有标签bucket_quota: { # 桶配额设置enabled: false, # 是否启用桶配额check_on_raw: false, # 是否对原始数据进行检查max_size: -1, # 最大桶大小-1 表示无限制max_size_kb: 0, # 最大桶大小以 KB 为单位0 表示无限制max_objects: -1 # 最大对象数-1 表示无限制},user_quota: { # 用户配额设置enabled: false, # 是否启用用户配额check_on_raw: false, # 是否对原始数据进行检查max_size: -1, # 最大用户存储大小-1 表示无限制max_size_kb: 0, # 最大用户存储大小以 KB 为单位0 表示无限制max_objects: -1 # 最大用户对象数-1 表示无限制},temp_url_keys: [], # 临时 URL 密钥此用户没有临时 URL 密钥type: rgw, # 用户类型RGW 表示 RADOS Gateway 用户mfa_ids: [] # 多因素认证 ID此用户没有 MFA 配置 } 配置客户端 这里带client端192.168.226.156主机操作  # 安装 EPEL 仓库Extra Packages for Enterprise Linux [rootclient ~]# yum install -y epel-release# 安装 s3cmd 工具用于与 S3 兼容存储交互 [rootclient ~]# yum install -y s3cmd# 安装 HAProxy负载均衡器和代理工具 [rootclient ~]# yum install -y haproxy# 备份现有的 HAProxy 配置文件 [rootclient ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak# 向 HAProxy 配置文件中添加新的配置 [rootclient ~]# cat /etc/haproxy/haproxy.cfg EOF # 定义一个名为 rgw 的监听器 listen rgw# 绑定到 IP 地址 192.168.226.156 的 80 端口用的本机IPbind 192.168.226.156:80# 使用 TCP 模式mode tcp# 使用轮询负载均衡算法balance roundrobin# 定义后端服务器# 服务器 ceph-storage04监听 192.168.226.154 的 8000 端口server ceph-storage04 192.168.226.154:8000 check# 服务器 ceph-storage04监听 192.168.226.154 的 8001 端口server ceph-storage04 192.168.226.154:8001 check# 服务器 ceph-storage05监听 192.168.226.155 的 8000 端口server ceph-storage05 192.168.226.155:8000 check# 服务器 ceph-storage05监听 192.168.226.155 的 8001 端口server ceph-storage05 192.168.226.155:8001 check EOF# 启动 HAProxy 服务 [rootclient ~]# systemctl start haproxy # 配置 s3cmd 工具设置与 S3 兼容存储的连接 [rootclient ~]# s3cmd --configureEnter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables. Access Key [CDOID6HK3UVPT76BSGYJ]: CDOID6HK3UVPT76BSGYJ Secret Key [2uRa8cBtQjza2qlHBUAmdQbDQtVEgAWjUOMeNhW0]: 2uRa8cBtQjza2qlHBUAmdQbDQtVEgAWjUOMeNhW0 Default Region [US]: Use s3.amazonaws.com for S3 Endpoint and not modify it to the target Amazon S3. S3 Endpoint [192.168.226.100]: 192.168.226.156Use %(bucket)s.s3.amazonaws.com to the target Amazon S3. %(bucket)s and %(location)s vars can be used if the target S3 system supports dns based buckets. DNS-style buckethostname:port template for accessing a bucket [192.168.226.100:80/%(bucket)]: 192.168.226.156:80/%(bucket)Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: Path to GPG program [/usr/bin/gpg]: When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP, and can only be proxied with Python 2.7 or newer Use HTTPS protocol [No]: FalseOn some networks all internet access must go through a HTTP proxy. Try setting it here if you cant connect to S3 directly HTTP Proxy server name [192.168.226.100]: 192.168.226.156 HTTP Proxy server port [3128]: 80New settings:Access Key: CDOID6HK3UVPT76BSGYJSecret Key: 2uRa8cBtQjza2qlHBUAmdQbDQtVEgAWjUOMeNhW0Default Region: USS3 Endpoint: 192.168.226.156DNS-style buckethostname:port template for accessing a bucket: 192.168.226.156:80/%(bucket)Encryption password: Path to GPG program: /usr/bin/gpgUse HTTPS protocol: FalseHTTP Proxy server name: 192.168.226.156HTTP Proxy server port: 80Test access with supplied credentials? [Y/n] Y Please wait, attempting to list all buckets... Success. Your access key and secret key worked fine :-)Now verifying that encryption works... Not configured. Never mind.Save settings? [y/N] y Configuration saved to /root/.s3cfg在执行本步骤中一些重要配置点如下选择 # S3 Access Key 和 Secret Key用于认证你的请求 access_key CDOID6HK3UVPT76BSGYJ #在admin节点使用radosgw-admin user create --uid xiaobai --display-nameCeph RGW S3 style test user中弹出的消息复制 secret_key 2uRa8cBtQjza2qlHBUAmdQbDQtVEgAWjUOMeNhW0 #也是在admin查看# 默认区域这里设置为 US如果你的存储服务在其他区域请调整 default_region US #这里我直接回车# S3 Endpoint 的 IP 地址或域名你的存储服务在这个地址上 host_base 192.168.226.156 #代理的IP host_bucket 192.168.226.156:80/%(bucket) #代理IP加端口加上后面的/%(bucket) # 加密设置如果需要加密传输的文件可以在这里设置加密密码这里不设置直接回车 encryption_password # 指定 GPG 程序路径用于加密文件如果使用 GPG这里直接回车 path_to_gpg /usr/bin/gpg # 是否使用 HTTPS 协议进行安全通信设置为 False 表示使用 HTTP输入False再回车 use_https False # 如果需要通过 HTTP 代理访问 S3 存储服务设置代理服务器的地址和端口 这里输入代理的IP 下面就是端口 proxy 192.168.226.156 proxy_port 80# 见到这输入Y回车 Test access with supplied credentials? [Y/n] Y#这里输入y回车 Save settings? [y/N] y # 查看当前用户主目录下的 .s3cfg 文件内容这个文件用于配置 s3cmd 工具与 S3 兼容存储的连接。 [rootclient ~]# cat .s3cfg测试 # 列出所有 S3 存储桶 [rootclient ~]# s3cmd ls# 输出结果为空说明在执行此命令时没有存储桶或者 S3 存储桶列表为空# 创建一个新的 S3 存储桶名称为 mybucket [rootclient ~]# s3cmd mb s3://mybucket Bucket s3://mybucket/ created# 输出结果表明存储桶 mybucket 已成功创建# 列出所有 S3 存储桶 [rootclient ~]# s3cmd ls# 输出结果显示刚刚创建的存储桶 mybucket 2024-08-10 13:39 s3://mybucket# 使用 Zmodem 协议接收文件通常用于通过终端上传文件上传一个图片和视频 [rootclient ~]# rz# 列出当前目录的文件 [rootclient ~]# ll total 32368 -rw-------. 1 root root 815 Jun 6 14:00 anaconda-ks.cfg -rw-r--r-- 1 root root 3673 Aug 6 20:39 images.jpg -rw-r--r-- 1 root root 33127749 Aug 10 21:52 shipin.mp4# 将图片上传到 S3 存储桶 [rootclient ~]# s3cmd put images.jpg s3://mybucket/file/ upload: images.jpg - s3://mybucket/file/images.jpg [1 of 1]3673 of 3673 100% in 0s 204.16 KB/s done# 将视频上传到 S3 存储桶 [rootclient ~]# s3cmd put shipin.mp4 s3://mybucket/file/ upload: shipin.mp4 - s3://mybucket/file/shipin.mp4 [part 1 of 3, 15MB] [1 of 1]15728640 of 15728640 100% in 0s 42.96 MB/s done upload: shipin.mp4 - s3://mybucket/file/shipin.mp4 [part 2 of 3, 15MB] [1 of 1]15728640 of 15728640 100% in 0s 47.77 MB/s done upload: shipin.mp4 - s3://mybucket/file/shipin.mp4 [part 3 of 3, 1631KB] [1 of 1]1670469 of 1670469 100% in 0s 20.69 MB/s done# 列出 S3 存储桶中的文件 [rootclient ~]# s3cmd ls s3://mybucket/file/ 2024-08-10 13:55 3673 s3://mybucket/file/images.jpg 2024-08-10 13:56 33127749 s3://mybucket/file/shipin.mp4# 从 S3 存储桶下载图片到本地 /tmp 目录 [rootclient ~]# s3cmd get s3://mybucket/file/images.jpg /tmp download: s3://mybucket/file/images.jpg - /tmp/images.jpg [1 of 1]3673 of 3673 100% in 0s 567.37 KB/s done# 列出 /tmp 目录下的图片文件 [rootclient ~]# ll /tmp |grep *.jpg -rw-r--r-- 1 root root 3673 Aug 10 13:55 images.jpg# 生成一个签名的 URL用于访问存储桶中的视频链接有效期为1年 [rootclient ~]# s3cmd signurl s3://mybucket/file/shipin.mp4 $(date -d now 1 year %s) http://192.168.226.156/mybucket/file/shipin.mp4?AWSAccessKeyIdCDOID6HK3UVPT76BSGYJExpires1754834321SignaturefhRIyJn7Wg5qSmFZEuoDt9ogaxA%3D# 删除 S3 存储桶中的图片文件 [rootclient ~]# s3cmd rm s3://mybucket/file/images.jpg delete: s3://mybucket/file/images.jpg# 强制删除 S3 存储桶中的所有内容 [rootclient ~]# s3cmd del -r --force s3://mybucket/ delete: s3://mybucket/file/shipin.mp4# 删除 S3 存储桶 [rootclient ~]# s3cmd rb s3://mybucket Bucket s3://mybucket/ removed# 列出所有 S3 存储桶 [rootclient ~]# s3cmd ls# 输出显示没有存储桶因为刚刚创建的存储桶 mybucket 已被删除在桌面创建一个以.html结尾的文件输入下述代码使用刚刚生成的视频链接用浏览器打开就可以看到你的视频的播放 !DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleVideo Playback/title /head bodyh1Video Playback Example/h1video width640 height360 controlssource srchttp://192.168.226.156/mybucket/file/shipin.mp4?AWSAccessKeyIdCDOID6HK3UVPT76BSGYJExpires1754834321SignaturefhRIyJn7Wg5qSmFZEuoDt9ogaxA%3D typevideo/mp4Your browser does not support the video tag./video /body /html
http://www.dnsts.com.cn/news/86066.html

相关文章:

  • 网站域名包括哪些电商首页设计
  • 城乡建设官方网站重庆营销型网站建设公司
  • 石家庄网站维护安康市网站开发
  • 观澜建网站宁海县高质量营销型网站建设
  • 微信注册网站入口怎样设置默认网站
  • 网页设计模板html代码软件seo网络优化公司哪家好
  • 一个人做两个博客网站做彩票网站需要什么条件
  • 现在外贸做那个网站好如何将wordpress所有文章标题
  • 做服装外单的网站有哪些除了亚马逊还有啥网站做海淘
  • 济南网站托管上海正规网站建设
  • 网站设计哪家网站建设学什么专业
  • 网站 文件夹 上传公司网站建设找谁做
  • 网站建设运营的灵魂是如何建立公众号的步骤
  • 济南企业网站关键词推广哈尔滨整站
  • 个人学做网站机关网站建设
  • 网站制作郑州网站制作手机免费在线搭建网站
  • 网站建设和维护的教程做好史志网站建设
  • 安徽省建设工程协会网站网站建设制作方案
  • 网站网站建站哪个选项不属于网络营销的特点
  • 房产网站排行榜北京seo优化wyhseo
  • 上海网站优化哪家好建设门户公司网站
  • 企业网站形象建设搭建网站公司哪家好
  • 网站公司排行榜前十名云南省建设工程信息网招标公告
  • 网站更新升级wordpress 小说 批量
  • 吴忠网站建设哪家好跨境电商全托管有哪些平台
  • 深圳便宜网站建设免费发布卖车信息网站
  • 中国工程建设交易信息网站营销型网站需要备案吗
  • 网站建设吕凡科技2345网址大全导航下载
  • 可以在线做c语言的网站招聘网站建设与开发要求
  • 哪个网站的ps元素好淄博网站建设hiddd