Deploy on Ceph Shared Storage
DANGER
Translation needed.
Ceph 是一个统一的分布式存储系统,由于它可以提供较好的性能、可靠性和可扩展性,被广泛的应用在存储领域。以下是在 ceph 分布式集群上部署 PolarDB-FileSystem 以及 PolarDB-for-PostgreSQL 的教程。
ceph 搭建需要 2 台及以上的物理机/虚拟机实现存储共享与数据备份,本教程以 3 台虚拟机机环境为例,介绍基于 ceph 共享存储的实例构建方法。大体如下:
- 获取在同一网段的虚拟机三台,互相之间配置 ssh 免密登录,用作 ceph 密钥与配置信息的同步;
- 在主节点启动 mon 进程,查看状态,并复制配置文件至其余各个节点,完成 mon 启动;
- 在三个环境中启动 osd 进程配置存储盘,并在主节点环境启动 mgr 进程、rgw 进程;
- 创建存储池与 rbd 块设备镜像,并对创建好的镜像在各个节点进行映射即可实现块设备的共享;
- 对块设备进行 PolarFS 的格式化与 PolarDB 的部署。
WARNING
操作系统版本要求 CentOS 7.5 及以上。以下步骤在 CentOS 7.5 上通过测试。
环境准备
1. - 使用的虚拟机环境如下:
3. ```
4. IP hostname
5. 192.168.1.173 ceph001
6. 192.168.1.174 ceph002
7. 192.168.1.175 ceph003
8. ```
9. - 安装docker
10. > 说明:本教程使用阿里云镜像站提供的docker包。
11. - 安装docker依赖包:
13. ```
14. yum install -y yum-utils device-mapper-persistent-data lvm2
15. ```
16. - 安装并启动docker:
18. ```
19. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
20. yum makecache
21. yum install -y docker-ce
23. systemctl start docker
24. systemctl enable docker
25. ```
26. - 检查是否安装成功:
28. ```
29. docker run hello-world
30. ```
31. - 配置ssh免密登录
32. - 密钥的生成与拷贝:
34. ```
35. ssh-keygen
36. ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph001
37. ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph002
38. ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph003
39. ```
40. - 检查是否配置成功
42. ```
43. ssh root@ceph003
44. ```
45. - 下载ceph daemon
47. ```bash
48. docker pull ceph/daemon
49. ```
mon 部署
1. - ceph001上mon进程启动
1. docker run -d \
2. --net=host \
3. --privileged=true \
4. -v /etc/ceph:/etc/ceph \
5. -v /var/lib/ceph/:/var/lib/ceph/ \
6. -e MON_IP=192.168.1.173 \
7. -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \
8. --security-opt seccomp=unconfined \
9. --name=mon01 \
10. ceph/daemon mon
11. ```
12. **注意:根据实际网络环境修改IP、子网掩码位数。**
- 查看容器状态
``` 1. docker exec mon01 ceph -s 2. cluster: 3. id: 937ccded-3483-4245-9f61-e6ef0dbd85ca 4. 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的报错,使用以下命令解决。
1. docker exec mon01 ceph config set mon auth_allow_insecure_global_id_reclaim false
- 生成必须的keyring
1. docker exec mon01 ceph auth get client. bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ ceph.keyring
2. docker exec mon01 ceph auth get client. bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ ceph.keyring
- 配置文件同步
1. ssh root@ceph002 mkdir -p /var/lib/ceph
2. scp -r /etc/ceph root@ceph002:/etc
3. scp -r /var/lib/ceph/bootstrap* root@ceph002:/ var/lib/ceph
4. ssh root@ceph003 mkdir -p /var/lib/ceph
5. scp -r /etc/ceph root@ceph003:/etc
6. scp -r /var/lib/ceph/bootstrap* root@ceph003:/ var/lib/ceph
- 在ceph002与ceph003中启动mon
``` 1. docker run -d \ 2. --net=host \ 3. --privileged=true \ 4. -v /etc/ceph:/etc/ceph \ 5. -v /var/lib/ceph/:/var/lib/ceph/ \ 6. -e MON_IP=192.168.1.174 \ 7. -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \ 8. --security-opt seccomp=unconfined \ 9. --name=mon02 \ 10. 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 ```
- 查看当前集群状态
``` 1. docker exec mon01 ceph -s 2. cluster: 3. id: 937ccded-3483-4245-9f61-e6ef0dbd85ca 4. 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 部署
1. - osd准备阶段:
2. >本环境的虚拟机只有一个/dev/vdb磁盘可用,因此为每个虚拟机只创建了一个osd节点。
1. docker run --rm --privileged=true --net=host - -ipc=host \
2. --security-opt seccomp=unconfined \
3. -v /run/lock/lvm:/run/lock/lvm:z \
4. -v /var/run/udev/:/var/run/udev/:z \
5. -v /dev:/dev -v /etc/ceph:/etc/ceph:z \
6. -v /run/lvm/:/run/lvm/ \
7. -v /var/lib/ceph/:/var/lib/ceph/:z \
8. -v /var/log/ceph/:/var/log/ceph/:z \
9. --entrypoint=ceph-volume \
10. docker.io/ceph/daemon \
11. --cluster ceph lvm prepare --bluestore --data /dev/vdb
12. ```
13. **注意:以上命令在三个节点都是一样的,只需要根据磁盘名称进行修改调整即可。**
- osd激活阶段:
1. docker run -d --privileged=true --net=host --pid=host --ipc=host \
2. --security-opt seccomp=unconfined \
3. -v /dev:/dev \
4. -v /etc/localtime:/etc/ localtime:ro \
5. -v /var/lib/ceph:/var/lib/ ceph:z \
6. -v /etc/ceph:/etc/ceph:z \
7. -v /var/run/ceph:/var/run/ ceph:z \
8. -v /var/run/udev/:/var/run/ udev/ \
9. -v /var/log/ceph:/var/log/ ceph:z \
10. -v /run/lvm/:/run/lvm/ \
11. -e CLUSTER=ceph \
12. -e CEPH_DAEMON=OSD_CEPH_VOLUME_ACT IVATE \
13. -e CONTAINER_IMAGE=docker.io/ ceph/daemon \
14. -e OSD_ID=0 \
15. --name=ceph-osd-0 \
16. docker.io/ceph/daemon
注意:各个节点需要修改OSD_ID与name属性,OSD_ID是从编号0递增的,其余节点为OSD_ID=1、OSD_ID=2。 - 查看集群状态
``` 1. docker exec mon01 ceph -s 2. cluster: 3. id: e430d054-dda8-43f1-9cda-c0881b782e17 4. health: HEALTH_WARN 5. 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 部署
1. - 以下命令均在ceph001进行:
1. docker run -d --net=host \
2. --privileged=true \
3. --security-opt seccomp=unconfined \
4. -v /etc/ceph:/etc/ceph \
5. -v /var/lib/ceph/:/var/lib/ceph/ \
6. --name=ceph-mgr-0 \
7. ceph/daemon mgr
9. docker run -d --net=host \
10. --privileged=true \
11. --security-opt seccomp=unconfined \
12. -v /var/lib/ceph/:/var/lib/ceph/ \
13. -v /etc/ceph:/etc/ceph \
14. -e CEPHFS_CREATE=1 \
15. --name=ceph-mds-0 \
16. ceph/daemon mds
18. docker run -d --net=host \
19. --privileged=true \
20. --security-opt seccomp=unconfined \
21. -v /var/lib/ceph/:/var/lib/ceph/ \
22. -v /etc/ceph:/etc/ceph \
23. --name=ceph-rgw-0 \
24. ceph/daemon rgw
25. ```
- 查看集群状态
``` 1. docker exec mon01 ceph -s 2. cluster: 3. id: e430d054-dda8-43f1-9cda-c0881b782e17 4. 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 ```
```
rbd 块设备创建
1. >以下命令均在容器mon01中进行。
2. - 存储池的创建:
1. docker exec -it mon01 bash
2. ceph osd pool create rbd_polar
3. ```
- 创建镜像文件并查看信息
``` 1. rbd create --size 512000 rbd_polar/image02 2. rbd info rbd_polar/image02
- rbd image 'image02':
- size 500 GiB in 128000 objects
- order 22 (4 MiB objects)
- snapshot_count: 0
- id: 13b97b252c5d
- block_name_prefix: rbd_data.13b97b252c5d
- format: 2
- features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
- op_features:
- flags:
- create_timestamp: Thu Oct 28 06:18:07 2021
- access_timestamp: Thu Oct 28 06:18:07 2021
- modify_timestamp: Thu Oct 28 06:18:07 2021 ```
- 映射镜像文件
``` 1. rbd map rbd_polar/image02
- rbd: sysfs write failed
- RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd_polar/image02 object-map fast-diff deep-flatten".
- In some cases useful info is found in syslog - try "dmesg | tail".
- rbd: map failed: (6) No such device or address ```
注意:某些特性内核不支持,需要关闭才可以映射成功。如下进行:关闭rbd不支持特性,重新映射镜像,并查看映射列表。
``` 1. rbd feature disable rbd_polar/image02 object-map fast-diff deep-flatten 2. rbd map rbd_polar/image02 3. rbd device list
- id pool namespace image snap device
- 0 rbd_polar image01 - /dev/ rbd0
- 1 rbd_polar image02 - /dev/ rbd1 ```
此处我已经先映射了一个image01,所以有两条信息。 - 查看块设备
回到容器外,进行操作。查看系统中的块设备:
``` 1. lsblk
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
- vda 253:0 0 500G 0 disk
- └─vda1 253:1 0 500G 0 part /
- vdb 253:16 0 1000G 0 disk
- └─ceph--7eefe77f--c618--4477--a1ed--b4f44520dfc 2-osd--block--bced3ff1--42b9--43e1--8f63--e853b ce41435
- 252:0 0 1000G 0 lvm
- rbd0 251:0 0 100G 0 disk
- rbd1 251:16 0 500G 0 disk ```
注意:块设备镜像需要在各个节点都进行映射才可以在本地环境中通过lsblk命令查看到,否则不显示。ceph002与ceph003上映射命令与上述一致。 ```
PolarDB-FileSystem 安装部署
1. >请参考 方式3:搭建基于NBD共享存储 — PolarDB-FileSystem安装部署
PolarDB-for-PostgreSQL 内核安装部署
1. >请参考 方式3:搭建基于NBD共享存储 — PolarDB-for-PostgreSQL内核安装部署
Contributors: 北侠

