暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB PostgreSQL版进阶部署准备——Ceph 共享存储(中)

PolarDB农夫山泉 2023-06-26
289

PolarDB PostgreSQL版(简称 PolarDB-PG)是一款阿里云自主研发的云原生关系型数据库产品,100% 兼容 PostgreSQL,高度兼容Oracle语法;采用基于 Shared-Storage 的存储计算分离架构,具有极致弹性、毫秒级延迟、HTAP 的能力和高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB 具有大规模并行计算能力,可以应对OLTP与OLAP混合负载。

Ceph 是一个统一的分布式存储系统,由于它可以提供较好的性能、可靠性和可扩展性,被广泛的应用在存储领域。Ceph 搭建需要 2 台及以上的物理机/虚拟机实现存储共享与数据备份,本教程以 3 台虚拟机机环境为例,介绍基于 ceph 共享存储的实例构建方法。大体如下:

  1. 获取在同一网段的虚拟机三台,互相之间配置 ssh 免密登录,用作 ceph 密钥与配置信息的同步;
  2. 在主节点启动 mon 进程,查看状态,并复制配置文件至其余各个节点,完成 mon 启动;
  3. 在三个环境中启动 osd 进程配置存储盘,并在主节点环境启动 mgr 进程、rgw 进程;
  4. 创建存储池与 rbd 块设备镜像,并对创建好的镜像在各个节点进行映射即可实现块设备的共享;
  5. 对块设备进行 PolarFS 的格式化与 PolarDB-PG 的部署。

构建方法为如上5步共计三篇文章介绍,本文介绍第2、3步的内容

mon 部署

ceph001 上 mon 进程启动

docker run -d \ --net=host \ --privileged=true \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph/ \ -e MON_IP=192.168.1.173 \ -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \ --security-opt seccomp=unconfined \ --name=mon01 \ ceph/daemon mon

注意
根据实际网络环境修改 IP、子网掩码位数。

查看容器状态

$ docker exec mon01 ceph -s cluster: id: 937ccded-3483-4245-9f61-e6ef0dbd85ca health: HEALTH_OK services: mon: 1 daemons, quorum ceph001 (age 26m) mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:

注意
如果遇到 mon is allowing insecure global_id reclaim 的报错,使用以下命令解决。

docker exec mon01 ceph config set mon auth_allow_insecure_global_id_reclaim false

生成必须的 keyring

docker exec mon01 ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring docker exec mon01 ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring

配置文件同步

ssh root@ceph002 mkdir -p /var/lib/ceph scp -r /etc/ceph root@ceph002:/etc scp -r /var/lib/ceph/bootstrap* root@ceph002:/var/lib/ceph ssh root@ceph003 mkdir -p /var/lib/ceph scp -r /etc/ceph root@ceph003:/etc scp -r /var/lib/ceph/bootstrap* root@ceph003:/var/lib/ceph

在 ceph002 与 ceph003 中启动 mon

docker run -d \ --net=host \ --privileged=true \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph/ \ -e MON_IP=192.168.1.174 \ -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \ --security-opt seccomp=unconfined \ --name=mon02 \ ceph/daemon mon docker run -d \ --net=host \ --privileged=true \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph/ \ -e MON_IP=1192.168.1.175 \ -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \ --security-opt seccomp=unconfined \ --name=mon03 \ ceph/daemon mon

查看当前集群状态

$ docker exec mon01 ceph -s cluster: id: 937ccded-3483-4245-9f61-e6ef0dbd85ca health: HEALTH_OK services: mon: 3 daemons, quorum ceph001,ceph002,ceph003 (age 35s) mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:

注意
从 mon 节点信息查看是否有添加在另外两个节点创建的 mon 添加进来。

osd 部署

osd 准备阶段

提示
本环境的虚拟机只有一个 /dev/vdb 磁盘可用,因此为每个虚拟机只创建了一个 osd 节点。

docker run --rm --privileged=true --net=host --ipc=host \ --security-opt seccomp=unconfined \ -v /run/lock/lvm:/run/lock/lvm:z \ -v /var/run/udev/:/var/run/udev/:z \ -v /dev:/dev -v /etc/ceph:/etc/ceph:z \ -v /run/lvm/:/run/lvm/ \ -v /var/lib/ceph/:/var/lib/ceph/:z \ -v /var/log/ceph/:/var/log/ceph/:z \ --entrypoint=ceph-volume \ docker.io/ceph/daemon \ --cluster ceph lvm prepare --bluestore --data /dev/vdb

注意
以上命令在三个节点都是一样的,只需要根据磁盘名称进行修改调整即可。

osd 激活阶段

docker run -d --privileged=true --net=host --pid=host --ipc=host \ --security-opt seccomp=unconfined \ -v /dev:/dev \ -v /etc/localtime:/etc/ localtime:ro \ -v /var/lib/ceph:/var/lib/ceph:z \ -v /etc/ceph:/etc/ceph:z \ -v /var/run/ceph:/var/run/ceph:z \ -v /var/run/udev/:/var/run/udev/ \ -v /var/log/ceph:/var/log/ceph:z \ -v /run/lvm/:/run/lvm/ \ -e CLUSTER=ceph \ -e CEPH_DAEMON=OSD_CEPH_VOLUME_ACTIVATE \ -e CONTAINER_IMAGE=docker.io/ceph/daemon \ -e OSD_ID=0 \ --name=ceph-osd-0 \ docker.io/ceph/daemon

注意
各个节点需要修改 OSD_ID 与 name 属性,OSD_ID 是从编号 0 递增的,其余节点为 OSD_ID=1、OSD_ID=2。

查看集群状态

$ docker exec mon01 ceph -s cluster: id: e430d054-dda8-43f1-9cda-c0881b782e17 health: HEALTH_WARN no active mgr services: mon: 3 daemons, quorum ceph001,ceph002,ceph003 (age 44m) mgr: no daemons active osd: 3 osds: 3 up (since 7m), 3 in (since 13m) data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:

mgr、mds、rgw 部署

以下命令均在 ceph001 进行:

docker run -d --net=host \ --privileged=true \ --security-opt seccomp=unconfined \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph/:/var/lib/ceph/ \ --name=ceph-mgr-0 \ ceph/daemon mgr docker run -d --net=host \ --privileged=true \ --security-opt seccomp=unconfined \ -v /var/lib/ceph/:/var/lib/ceph/ \ -v /etc/ceph:/etc/ceph \ -e CEPHFS_CREATE=1 \ --name=ceph-mds-0 \ ceph/daemon mds docker run -d --net=host \ --privileged=true \ --security-opt seccomp=unconfined \ -v /var/lib/ceph/:/var/lib/ceph/ \ -v /etc/ceph:/etc/ceph \ --name=ceph-rgw-0 \ ceph/daemon rgw

查看集群状态:

docker exec mon01 ceph -s cluster: id: e430d054-dda8-43f1-9cda-c0881b782e17 health: HEALTH_OK services: mon: 3 daemons, quorum ceph001,ceph002,ceph003 (age 92m) mgr: ceph001(active, since 25m) mds: 1/1 daemons up osd: 3 osds: 3 up (since 54m), 3 in (since 60m) rgw: 1 daemon active (1 hosts, 1 zones) data: volumes: 1/1 healthy pools: 7 pools, 145 pgs objects: 243 objects, 7.2 KiB usage: 50 MiB used, 2.9 TiB / 2.9 TiB avail pgs: 145 active+clean

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论