Administrator
Administrator
发布于 2024-12-23 / 61 阅读
0
0

Ceph 部署(基于Ubuntu22.04)

Ceph 集群安装与配置指南

本指南详细介绍了如何安装和配置 Ceph 集群,包括监控节点的设置、主机名的修改、节点初始化、安装主监测节点以及使用 AWS CLI 与 Ceph RGW 进行对象存储管理。通过遵循以下步骤,您可以搭建一个高效、可靠的对象存储解决方案,并实现灵活的访问控制与管理。

目录

  1. 安装监控
  2. 修改主机名
  3. 初始化所有节点
  4. 安装主监测节点
  5. S3 客户端操作
  6. 结论
  7. 参考资料
  8. 常见问题 (FAQ)
  9. 联系我们

安装监控

下载并运行监控客户端

使用以下命令下载并运行监控客户端脚本:

wget -O setup-client.sh "https://raw.githubusercontent.com/akile-network/akile_monitor/main/setup-client.sh" && chmod +x setup-client.sh && sudo ./setup-client.sh wendao wss://api.enea.asia/monitor NAME

说明:

  • wget -O setup-client.sh "https://raw.githubusercontent.com/akile-network/akile_monitor/main/setup-client.sh":从 GitHub 仓库下载 setup-client.sh 脚本。
  • chmod +x setup-client.sh:赋予脚本执行权限。
  • sudo ./setup-client.sh wendao wss://api.enea.asia/monitor NAME:以 sudo 权限运行脚本,参数根据实际需求填写。
    • wendao:监控客户端的名称或标识。
    • wss://api.enea.asia/monitor:监控服务器的 WebSocket 地址。
    • NAME:节点名称。

国内服务器加速配置

如果服务器位于国内,建议先执行以下命令以加速中继:

echo -e "149.88.95.40 raw.githubusercontent.com\n149.88.95.40 objects.githubusercontent.com\n149.88.95.41 github.com" | sudo tee -a /etc/hosts

说明:

  • 通过修改 /etc/hosts 文件,将 GitHub 相关域名解析到国内 IP 地址,以提高访问速度。

注意事项:

  • IP 地址更新:上述 IP 地址可能会发生变化,请确保使用最新的可用 IP 地址。可以通过查询相关服务提供商获取最新信息。
  • 风险提示:修改 /etc/hosts 文件可能会影响其他依赖于这些域名的服务,请谨慎操作。

修改主机名

修改主机名

使用以下命令修改主机名:

sudo hostnamectl set-hostname ceph-node1

说明:

  • 将主机名设置为 ceph-node1。根据节点数量,依次修改为 ceph-node2ceph-node3 等。

验证主机名更改:

hostnamectl status

预期输出:

   Static hostname: ceph-node1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
           Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  Operating System: Ubuntu 20.04.4 LTS
            Kernel: Linux 5.4.0-104-generic
      Architecture: x86-64

更新 /etc/hosts 文件

根据服务器对应关系,添加以下内容到 /etc/hosts 文件:

echo -e "154.201.90.114 ceph-node1\n149.88.90.84 ceph-node2\n154.201.72.168 ceph-node3\n156.238.250.13 ceph-node4\n154.201.79.208 ceph-node5\n45.207.200.120 ceph-node6\n45.207.207.32 ceph-node7" | sudo tee -a /etc/hosts

说明:

  • 确保每个节点的 IP 地址与主机名对应正确。
  • 设置完成后,重新连接服务器以刷新配置。

示例 /etc/hosts 文件内容:

127.0.0.1 localhost
::1       localhost
154.201.90.114 ceph-node1
149.88.90.84 ceph-node2
154.201.72.168 ceph-node3
156.238.250.13 ceph-node4
154.201.79.208 ceph-node5
45.207.200.120 ceph-node6
45.207.207.32 ceph-node7

验证主机名解析:

ping ceph-node2

预期输出:

PING ceph-node2 (149.88.90.84) 56(84) bytes of data.
64 bytes from ceph-node2 (149.88.90.84): icmp_seq=1 ttl=64 time=0.123 ms
...

初始化所有节点

配置 SSH 无密码登录

为了让 Ceph 能够无密码登录,需启用密钥登录:

sudo sed -i '/^#*PubkeyAuthentication/s/.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config && sudo systemctl restart sshd

说明:

  • 修改 /etc/ssh/sshd_config 文件,启用 PubkeyAuthentication
  • 重启 SSH 服务以应用更改。

生成 SSH 密钥对(如果尚未生成):

在 Ceph 管理节点上执行:

ssh-keygen -t rsa -b 4096 -C "ceph@yourdomain.com"
  • 提示信息:按默认回车即可,生成的公钥和私钥存储在 ~/.ssh/ 目录下。

将公钥分发到所有节点:

ssh-copy-id ceph-node1
ssh-copy-id ceph-node2
ssh-copy-id ceph-node3
...

验证无密码登录:

ssh ceph-node1

无需输入密码即可登录。

安装 Podman

Podman 是一个无守护进程的容器引擎,用于管理容器化应用。

安装 Podman:

sudo apt update
sudo apt install -y podman

验证安装:

podman --version

预期输出:

podman version 4.x.x

配置 Podman(可选):

根据需要,可以配置 Podman 的网络、存储等选项。参考 Podman 官方文档 了解更多信息。

时间同步

确保所有节点的时间同步,以避免 Ceph 集群中的时间差异导致的问题。

安装 Chrony:

sudo apt update
sudo apt install -y chrony

启用并启动 Chrony 服务:

sudo systemctl enable chrony
sudo systemctl start chrony

验证时间同步状态:

chronyc tracking

预期输出:

Reference ID    : xxxxxxxx (ntp_server)
Stratum         : 3
Ref time (UTC)  : Fri Apr 27 12:34:56 2024
System time     : 0.000000123 seconds fast of NTP time
Last offset     : +0.000000456 seconds
RMS offset      : 0.000000789 seconds
Frequency       : 10.123 ppm slow
...

说明:

  • 确保 Reference ID 指向可靠的 NTP 服务器。
  • Stratum 值越低,时间同步越准确。

同步时间手动触发(可选):

sudo chronyc -a makestep

清理之前的 Ceph 安装(如有)

如果之前搭建过 Ceph 集群,需要进行清理操作,以避免配置冲突。

  1. 查看磁盘分区:

    sudo fdisk -l
    
  2. 获取并删除逻辑卷:

    示例删除某个逻辑卷:

    sudo lvremove --force /dev/mapper/ceph--faba1c20--fc9b--4380--b6a4--835e7d2204b0-osd--block--cb119a9f--33e6--44b4--8170--edcbb8429d94
    
  3. 删除卷组:

    sudo vgremove --force ceph-faba1c20-fc9b-4380-b6a4-835e7d2204b0
    
  4. 删除物理卷:

    sudo pvremove --force /dev/vdb
    
  5. 清除文件系统标识:

    sudo wipefs --all /dev/vdb
    

说明:

  • 确保在执行这些操作前备份重要数据,以免误删。
  • 替换 /dev/vdb 为实际需要清理的设备路径。
  • 使用 lvdisplayvgdisplaypvdisplay 命令检查当前的逻辑卷、卷组和物理卷信息。

安装主监测节点

安装 cephadm

cephadm 是 Ceph 的官方管理工具,用于简化 Ceph 集群的部署和管理。

安装 cephadm:

sudo apt-get update
sudo apt-get install -y cephadm

验证安装:

cephadm --version

预期输出:

cephadm version 15.x.x (commit hash)

添加 Ceph 仓库并安装 Ceph 组件

添加 Ceph 仓库:

sudo cephadm add-repo --release quincy

说明:

  • quincy 为 Ceph 的发行版本,根据需要选择适当的版本(例如 pacific, octopus 等)。
  • 可以通过 Ceph 官方文档 查看不同版本的支持和特性。

更新软件包列表:

sudo apt update

安装 Ceph 组件:

sudo cephadm install ceph-common

说明:

  • ceph-common 包含 Ceph 的常用工具和库,用于与 Ceph 集群进行交互。

初始化 Ceph 集群

使用 cephadm 初始化 Ceph 集群:

sudo cephadm bootstrap --mon-ip <MONITOR_IP>

说明:

  • 替换 <MONITOR_IP> 为监控节点的实际 IP 地址(例如 154.201.90.114)。
  • 初始化过程中,cephadm 将自动部署监控守护进程(Monitor Daemon)和管理守护进程(Manager Daemon)。

预期输出:

Bootstrapping ceph cluster
Connecting to docker...
Pulling ceph/ceph:quincy...
Deploying ceph monitor
...
Ceph cluster is now ready

验证 Ceph 集群状态:

sudo ceph status

预期输出:

  cluster:
    id:     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum ceph-node1
    mgr: ceph-node1(active)
    osd: 0 osds: 0 in quorum

配置 Ceph Dashboard SSL 证书(可选)

为了确保 Ceph Dashboard 的安全通信,可以配置 SSL 证书。

设置 Ceph Dashboard 的 SSL 证书:

sudo ceph dashboard set-ssl-certificate -i /root/fullchain.cer
sudo ceph dashboard set-ssl-certificate-key -i /root/cert.key

说明:

  • fullchain.cer:包含完整证书链的证书文件。
  • cert.key:与证书对应的私钥文件。
  • 确保这两个文件存在于指定路径,并且权限设置正确。

重启 Dashboard 模块:

sudo ceph mgr module disable dashboard
sudo ceph mgr module enable dashboard

验证 Dashboard 访问:

打开浏览器,访问 https://<MONITOR_IP>:8443,确保 SSL 证书正确应用,并且可以正常访问 Dashboard。

配置 SSH 无密码登录

获取 Ceph 管理节点的公钥并添加到所有节点,实现无密码登录:

  1. 获取 Ceph 管理节点的公钥:

    sudo cat /etc/ceph/ceph.pub
    

    预期输出:

    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3... ceph@yourdomain.com
    
  2. 在每个节点服务器中执行以下命令,将公钥添加到 authorized_keys

    echo "<ceph_public_key>" >> ~/.ssh/authorized_keys
    sudo chmod 600 ~/.ssh/authorized_keys
    sudo chmod 700 ~/.ssh
    

    说明:

    • <ceph_public_key> 替换为上一步获取的公钥内容。
    • 设置合适的权限,确保安全性。
  3. 验证无密码登录:

    从 Ceph 管理节点尝试 SSH 登录到其他节点:

    ssh ceph-node2
    

    无需输入密码即可登录。

节点加入 Ceph 集群

添加主机节点

使用以下命令将新的主机节点添加到 Ceph 集群:

sudo ceph orch host add ceph-node3 156.225.27.3

说明:

  • ceph-node3:要添加的主机节点名称。
  • 156.225.27.3:主机节点的 IP 地址。

预期输出:

host ceph-node3 added to the cluster

添加存储节点(OSD)

将存储设备添加为 OSD(Object Storage Daemon):

sudo ceph orch daemon add osd ceph-node1:/dev/vdb

说明:

  • ceph-node1:主机节点名称。
  • /dev/vdb:实际的存储设备路径。

预期输出:

Added osd.1 ceph-node1:/dev/vdb

验证 OSD 状态:

sudo ceph osd status

预期输出:

osd.0 up: [ceph-node1: ...]
osd.1 up: [ceph-node1: ...]

注意事项:

  • 确保 /dev/vdb 为实际的空闲设备,不包含重要数据。
  • 根据集群规模,重复添加更多 OSD 以提升存储容量和性能。

S3 客户端操作

本节介绍如何使用 AWS CLI 与 Ceph RGW 进行对象存储管理。尽管 AWS CLI 主要用于与 AWS 服务交互,但通过配置自定义端点,可以与 Ceph 的 RADOS Gateway(RGW)进行通信。

1. 安装 AWS CLI

1.1 安装 AWS CLI

使用以下命令安装 AWS CLI:

sudo apt-get update
sudo apt-get install -y awscli

说明:

  • awscli 包含 AWS 命令行工具,可用于管理对象存储和其他 AWS 服务。

注意事项:

  • 推荐使用最新版本的 AWS CLI,以获得最新功能和安全更新。可以参考 AWS CLI 官方安装指南 了解更多安装选项。

1.2 验证安装

aws --version

预期输出:

aws-cli/2.11.0 Python/3.9.11 Linux/5.15.0-1051-azure exe/x86_64.ubuntu.20 prompt/off

说明:

  • 确认 AWS CLI 版本信息,确保安装成功。

2. 配置 AWS CLI

配置 AWS CLI 以连接到您的对象存储服务(Ceph RGW)。

aws configure

按照提示输入以下信息:

AWS Access Key ID [None]: <您的 Ceph 用户的 access_key>
AWS Secret Access Key [None]: <对应的 secret_key>
Default region name [None]: us-east-1
Default output format [None]: json

说明:

  • AWS Access Key ID:Ceph 用户的 access_key,例如 KY8MOFWXF8A8WJQ7LFDG
  • AWS Secret Access Key:对应的 secret_key,例如 ObL5tGLQvsFaYLrkmbNXPI3fCVWDG7DrF5R1vliD
  • Default region name:填写 us-east-1 或任意值,因为 Ceph 不依赖区域设置。
  • Default output format:填写 json 或您偏好的格式。

配置特定端点(可选):

如果需要为 Ceph RGW 指定特定的端点,可以在命令中使用 --endpoint-url 参数,或通过配置文件设置默认端点。

示例:

aws --endpoint-url=http://oss.rpun.cn s3 ls

3. 基本概念

在开始具体操作之前,了解以下基本概念将帮助您更好地理解 AWS CLI 在对象存储中的使用:

  • 桶(Bucket):存储对象的容器。每个对象都存储在某个桶中。
  • 对象(Object):存储的数据单元,包括数据本身和相关的元数据。
  • 键(Key):对象在桶中的唯一标识符,相当于对象的路径或名称。
  • ACL(Access Control List):访问控制列表,用于定义谁可以访问桶或对象。
  • 预签名 URL(Pre-signed URL):带有临时访问权限的 URL,允许临时访问对象。

4. 桶(Bucket)管理

4.1 创建桶

使用 aws s3 mb 命令创建一个新桶:

aws --endpoint-url=http://oss.rpun.cn s3 mb s3://mybucket

参数说明:

  • --endpoint-url:指定 Ceph RGW 的端点。
  • s3://mybucket:您希望创建的桶名称。

预期输出:

make_bucket: mybucket

注意事项:

  • 桶名称:桶名称必须全局唯一,且符合 S3 命名规范。
  • 权限:确保当前用户有权限创建桶。

4.2 列出桶

使用 aws s3 ls 命令列出所有桶:

aws --endpoint-url=http://oss.rpun.cn s3 ls

预期输出:

2024-12-23 17:24:37 mybucket

说明:

  • 列出当前用户拥有的所有桶。

4.3 删除桶

在删除桶之前,请确保桶中没有对象。否则,删除操作将失败。使用 aws s3 rb 命令删除桶:

aws --endpoint-url=http://oss.rpun.cn s3 rb s3://mybucket --force

参数说明:

  • --force:强制删除桶及其所有内容。

预期输出:

remove_bucket: mybucket

注意事项:

  • 数据丢失:强制删除操作会删除桶中的所有对象,确保无误后再执行。
  • 权限:确保当前用户有权限删除桶及其内容。

4.4 查看桶策略

使用 aws s3api get-bucket-policy 查看桶的策略:

aws --endpoint-url=http://oss.rpun.cn s3api get-bucket-policy --bucket mybucket

预期输出:

如果桶有策略,您将看到类似以下内容:

{
    "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::mybucket/*\"}]}"
}

如果桶没有策略,可能会收到错误消息:

An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket mybucket does not have a bucket policy

说明:

  • 桶策略:定义桶及其对象的访问权限,使用 JSON 格式编写。
  • 错误处理:如果桶没有策略,系统会提示相应的错误信息。

5. 对象(Object)管理

5.1 上传对象

使用 aws s3 cp 命令上传文件到桶:

aws --endpoint-url=http://oss.rpun.cn s3 cp /path/to/local/file.txt s3://mybucket/

示例:

aws --endpoint-url=http://oss.rpun.cn s3 cp /root/setup-client.sh s3://mybucket/

预期输出:

upload: ./setup-client.sh to s3://mybucket/setup-client.sh

说明:

  • 源路径:本地文件的路径。
  • 目标路径:桶中的目标位置,可以指定目录。

高级用法:

  • 递归上传目录

    aws --endpoint-url=http://oss.rpun.cn s3 cp /path/to/local/directory/ s3://mybucket/ --recursive
    

5.2 下载对象

使用 aws s3 cp 命令下载桶中的文件到本地:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://mybucket/file.txt /path/to/local/

示例:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://mybucket/setup-client.sh ./downloaded-setup-client.sh

预期输出:

download: s3://mybucket/setup-client.sh to ./downloaded-setup-client.sh

说明:

  • 源路径:桶中的文件路径。
  • 目标路径:本地保存的位置。

5.3 列出对象

使用 aws s3 ls 命令列出桶中的所有对象:

aws --endpoint-url=http://oss.rpun.cn s3 ls s3://mybucket/

预期输出:

2024-04-27 12:34:56 setup-client.sh

说明:

  • 递归列出所有对象(包括子目录):

    aws --endpoint-url=http://oss.rpun.cn s3 ls s3://mybucket/ --recursive
    

5.4 删除对象

使用 aws s3 rm 命令删除桶中的对象:

aws --endpoint-url=http://oss.rpun.cn s3 rm s3://mybucket/file.txt

示例:

aws --endpoint-url=http://oss.rpun.cn s3 rm s3://mybucket/setup-client.sh

预期输出:

delete: s3://mybucket/setup-client.sh

说明:

  • 删除多个对象:使用 --recursive 参数删除指定前缀下的所有对象。

    aws --endpoint-url=http://oss.rpun.cn s3 rm s3://mybucket/ --recursive
    

5.5 复制对象

使用 aws s3 cp 命令复制对象到同一个或不同的桶中:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://source-bucket/file.txt s3://destination-bucket/file.txt

示例:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://mybucket/setup-client.sh s3://mybucket/setup-client-copy.sh

预期输出:

copy: s3://mybucket/setup-client.sh to s3://mybucket/setup-client-copy.sh

说明:

  • 跨桶复制:可以复制到不同的桶中,前提是有相应的权限。

5.6 同步目录

使用 aws s3 sync 命令在本地目录和桶之间同步文件。

上传本地目录到桶
aws --endpoint-url=http://oss.rpun.cn s3 sync /path/to/local/directory/ s3://mybucket/

示例:

# 上传本地目录到桶
aws --endpoint-url=http://oss.rpun.cn s3 sync /root/myfiles/ s3://mybucket/
下载桶中的所有对象到本地目录
aws --endpoint-url=http://oss.rpun.cn s3 sync s3://mybucket/ /path/to/local/directory/

示例:

# 下载桶中的所有对象到本地目录
aws --endpoint-url=http://oss.rpun.cn s3 sync s3://mybucket/ /root/downloaded_files/

预期输出:

upload: ./myfiles/file1.txt to s3://mybucket/file1.txt
upload: ./myfiles/file2.txt to s3://mybucket/file2.txt

说明:

  • 增量同步aws s3 sync 只会同步新增或修改的文件,提高效率。

  • 排除文件:使用 --exclude--include 参数过滤同步的文件。

    aws --endpoint-url=http://oss.rpun.cn s3 sync /path/to/local/directory/ s3://mybucket/ --exclude "*.tmp"
    

5.7 设置对象元数据

使用 aws s3 cp 命令设置对象的元数据:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://mybucket/file.txt /path/to/local/file.txt --metadata key1=value1,key2=value2 --metadata-directive REPLACE

示例:

aws --endpoint-url=http://oss.rpun.cn s3 cp s3://mybucket/setup-client.sh ./setup-client.sh --metadata owner=wendao,project=ceph --metadata-directive REPLACE

参数说明:

  • --metadata:设置新的元数据键值对。
  • --metadata-directive REPLACE:指示 AWS CLI 替换现有的元数据。

预期输出:

upload: ./setup-client.sh to s3://mybucket/setup-client.sh

注意:

  • 设置元数据时,需要重新上传对象或使用复制操作。
  • 元数据键不区分大小写,但建议使用小写字母以避免兼容性问题。

6. 访问控制

6.1 设置桶策略

桶策略用于定义桶和桶中对象的访问权限。以下是创建和应用桶策略的步骤:

步骤 1:创建桶策略文件

创建一个 JSON 文件(例如 public-read-policy.json),内容如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*"
        }
    ]
}

说明:

  • Principal: "*":允许所有人访问。
  • Action: "s3:GetObject":允许读取对象。
  • Resource: "arn:aws:s3:::mybucket/*":该策略适用于 mybucket 中的所有对象。
步骤 2:应用桶策略

使用 aws s3api put-bucket-policy 命令应用策略:

aws --endpoint-url=http://oss.rpun.cn s3api put-bucket-policy --bucket mybucket --policy file://public-read-policy.json

预期输出:

无输出,表示命令成功执行。

验证策略应用:

aws --endpoint-url=http://oss.rpun.cn s3api get-bucket-policy --bucket mybucket

预期输出:

{
    "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"PublicReadGetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::mybucket/*\"}]}"
}

注意:

  • 安全性:将桶策略设置为公开读取后,任何人都可以通过公共 URL 访问桶中的对象。仅在必要时使用,并确保不暴露敏感数据。
  • 策略语法:确保 JSON 文件的语法正确,可以使用 JSON 校验工具进行验证。

6.2 设置对象 ACL

ACL(Access Control List)用于定义单个对象的访问权限。以下是为对象设置 ACL 的步骤:

设置对象为公开读取

使用 aws s3api put-object-acl 命令设置对象的 ACL 为公开读取:

aws --endpoint-url=http://oss.rpun.cn s3api put-object-acl --bucket mybucket --key setup-client.sh --acl public-read

参数说明:

  • --acl public-read:设置对象为公开读取。

预期输出:

无输出,表示命令成功执行。

查看对象 ACL

使用 aws s3api get-object-acl 查看对象的 ACL:

aws --endpoint-url=http://oss.rpun.cn s3api get-object-acl --bucket mybucket --key setup-client.sh

预期输出:

{
    "Owner": {
        "DisplayName": "wendao",
        "ID": "wendao"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "wendao",
                "ID": "wendao"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}

说明:

  • Grantee:定义了可以访问对象的实体。
    • Type: CanonicalUser 表示特定用户,Group 表示用户组。
    • DisplayNameID:用户或组的标识信息。
  • Permission:定义了访问权限,如 READWRITEFULL_CONTROL

常见权限类型:

  • READ:允许读取对象数据和元数据。
  • WRITE:允许写入对象数据和元数据。
  • FULL_CONTROL:赋予完全控制权限,包括读取、写入和管理 ACL。
移除对象 ACL

如果需要移除对象的特定 ACL,可以重新设置 ACL 为私有:

aws --endpoint-url=http://oss.rpun.cn s3api put-object-acl --bucket mybucket --key setup-client.sh --acl private

预期输出:

无输出,表示命令成功执行。

6.3 生成预签名 URL

预签名 URL 允许您为特定对象生成带有时效性的访问链接,适用于临时共享。

使用 AWS CLI 生成预签名 URL
aws --endpoint-url=http://oss.rpun.cn s3 presign s3://mybucket/setup-client.sh --expires-in 3600

参数说明:

  • s3 presign s3://mybucket/setup-client.sh:指定要生成预签名 URL 的对象。
  • --expires-in 3600:设置 URL 的有效时间(以秒为单位)。上例中设置为 3600 秒(1 小时)。

预期输出:

http://oss.rpun.cn/mybucket/setup-client.sh?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...

说明:

  • 生成的 URL 可在指定时间内访问对象,无需认证。
  • 用途:适用于临时共享文件、提供下载链接等场景。

注意事项:

  • 安全性:避免将预签名 URL 长期存储或在不安全的环境中分享。
  • 有效期:根据需求设置合适的有效期,避免过长或过短。

结论

本文详细介绍了如何安装和配置 Ceph 集群、监控节点以及使用 AWS CLI 与 Ceph RGW 进行对象存储管理。通过遵循上述步骤,您可以搭建一个高效、可靠的对象存储解决方案,并实现灵活的访问控制与管理。

注意事项:

  • 安全性
    • 确保密钥和敏感信息的安全,避免泄露。
    • 定期更新软件和安全补丁,防止已知漏洞被利用。
    • 使用防火墙和安全组限制不必要的访问。
  • 备份
    • 定期备份重要数据和配置文件,以防数据丢失。
    • 使用多区域或多数据中心部署,增强数据的可用性和灾难恢复能力。
  • 监控
    • 持续监控集群状态,及时发现并解决潜在问题。
    • 使用 Ceph 自带的监控工具或第三方监控解决方案,实时查看集群性能和健康状态。
  • 优化
    • 根据实际使用情况,调整 Ceph 配置参数以优化性能。
    • 定期评估存储需求,适时扩展集群容量和性能。

如有疑问或遇到问题,建议参考 Ceph 官方文档 或寻求社区支持。


参考资料


常见问题 (FAQ)

Q1: 如何更改 Ceph Dashboard 的默认端口?

A: 您可以通过编辑 Ceph 的配置文件或使用 ceph mgr 命令来更改 Dashboard 的端口。例如:

sudo ceph mgr module disable dashboard
sudo ceph config set mgr mgr/dashboard/server_port <新的端口号>
sudo ceph mgr module enable dashboard

说明:

  • 替换 <新的端口号> 为您希望使用的端口(例如 8444)。
  • 更改端口后,确保防火墙和安全组允许新端口的流量。

Q2: 如何扩展 Ceph 集群以增加更多 OSD?

A: 使用以下命令添加新的 OSD 节点:

sudo ceph orch daemon add osd <节点名称>:<存储设备路径>

示例:

sudo ceph orch daemon add osd ceph-node2:/dev/vdc

说明:

  • ceph-node2:要添加 OSD 的主机节点名称。
  • /dev/vdc:实际的存储设备路径。

注意事项:

  • 确保添加的存储设备为空闲状态,无重要数据。
  • 根据集群需求,合理分配 OSD 数量,以平衡性能和存储容量。

Q3: 如何备份 Ceph 集群的配置?

A: 您可以备份 /etc/ceph 目录中的配置文件。此外,建议定期备份集群的关键数据和元数据。

备份步骤:

  1. 备份配置文件:

    sudo tar -czvf ceph-config-backup.tar.gz /etc/ceph
    
  2. 备份集群数据(RADOS 数据):

    使用 Ceph 自带的备份工具或第三方工具,根据实际需求选择合适的备份方案。

  3. 存储备份文件:

    将备份文件存储在安全的地方,例如外部存储设备或远程备份服务器。

恢复步骤:

  1. 恢复配置文件:

    sudo tar -xzvf ceph-config-backup.tar.gz -C /
    
  2. 恢复集群数据:

    根据备份方案,使用相应的工具恢复 RADOS 数据。

注意事项:

  • 定期备份:根据数据的重要性和更新频率,制定合理的备份计划。
  • 验证备份:定期测试备份文件的完整性和可恢复性,确保在需要时能够顺利恢复。

Q4: 如何监控 Ceph 集群的性能和健康状态?

A: Ceph 提供了多种监控工具和方法,以下是一些常用的监控方式:

  1. Ceph Dashboard

    • 提供图形化界面,实时查看集群的健康状态、性能指标和资源使用情况。
    • 通过浏览器访问 https://<MONITOR_IP>:8443 进行管理和监控。
  2. 命令行工具

    • 使用 ceph status 查看集群的整体健康状态。
    • 使用 ceph health detail 获取详细的健康信息。
    • 使用 ceph osd perf 查看 OSD 的性能指标。
  3. 集成第三方监控系统

    • Prometheus:与 Ceph 集成,收集和存储性能指标。
    • Grafana:与 Prometheus 配合,提供丰富的可视化面板。
    • Alertmanager:设置告警规则,及时通知潜在问题。
  4. 日志监控

    • 分析 Ceph 日志文件(位于 /var/log/ceph/)以发现错误和警告信息。
    • 使用日志收集和分析工具(如 ELK Stack)集中管理日志数据。

推荐做法:

  • 自动化监控:配置自动化监控和告警,及时响应集群异常。
  • 定期审查:定期审查监控数据,识别性能瓶颈和资源不足。
  • 优化配置:根据监控结果,优化 Ceph 配置参数,提升集群性能和稳定性。

Q5: 如何升级 Ceph 集群到新版本?

A: 升级 Ceph 集群需要谨慎操作,以确保数据安全和集群稳定。以下是升级 Ceph 集群的一般步骤:

  1. 备份集群

    在升级前,确保已备份重要数据和配置文件。

  2. 检查当前版本和升级路径

    参考 Ceph 官方升级指南 确认当前版本和支持的升级路径。

  3. 升级管理节点

    使用 cephadm 工具进行升级:

    sudo cephadm upgrade --image ceph/ceph:<新版本标签>
    

    示例:

    sudo cephadm upgrade --image ceph/ceph:quincy
    
  4. 升级存储节点

    Cephadm 会自动协调存储节点的升级,确保升级过程中数据的安全和可用性。

  5. 验证升级

    升级完成后,使用以下命令验证集群状态:

    sudo ceph status
    

    预期输出:

      cluster:
        id:     xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        health: HEALTH_OK
    
      services:
        mon: 3 daemons, quorum ceph-node1, ceph-node2, ceph-node3
        mgr: ceph-node1(active)
        osd: 10 osds: 10 in quorum
    
  6. 处理升级问题

    如果在升级过程中遇到问题,可以参考 Ceph 官方文档或社区支持,进行故障排查和修复。

注意事项:

  • 分阶段升级:避免一次性升级多个节点,建议分阶段进行,确保每个阶段的稳定性。
  • 阅读发行说明:在升级前,阅读新版本的发行说明,了解新特性、修复的漏洞和已知问题。

联系我们

如果您在搭建和管理 Ceph 集群时遇到任何问题,欢迎通过以下方式联系我们:

社区资源:


感谢您阅读本指南,祝您成功搭建并管理您的 Ceph 集群!


评论