PolarDB-CEPH 部署 最新版 | 学习笔记

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 快速学习 PolarDB-CEPH 部署 最新版,介绍了 PolarDB-CEPH 部署 最新版系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【7天突破PolarDB for PostgreSQL 2022版PolarDB-CEPH 部署 最新版】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/992/detail/14969


PolarDB-CEPH 部署 最新版


内容介绍

一.PolarDB:CEPH 共享存储结构

二.CEPH 系统

三.osd 部署

四.mgr. mds, rgw 部署

五. PolarDB FileSystem 安装部署


一.PolarDB:CEPH 共享存储结构

1. PolarDB 支持多读结构

image.png
2.CEPH 是分布式共享存储结构

将多个 RSD 节点附属的物理磁盘组成快设备存储池

3.PolarDB-CEPH 可以将 CEPH 提供的 RBD  DISK 作为数据目录存放

 

二.CEPH 系统

1、CEPH 系统简介

实例部署:基于 Ceph 共享存储

是一个统一的分布式存储系统,由于它可以提供较好的性能、可靠性和可扩展性,被广泛的应用在

存储领过,以下是在 ceph 分布式集群上部岩 PolarDB-FileSystem 以及 PolarDB-for-PostgreSQL 的教程

搭建需要2台及以上的物理机虚拟机实现存储共享与数据备份,本教程以3台虚拟机机环境为例

介绍基于 ceph 共享存储的实例构建方法.大体如下:

(1).获取在同一网段的皮拟机三台,互相之间配置 ssh 免密登录,用作 ceph 密钥与配置信息的同步

(2).在主节点启动 mon 进程,查者状态,并复制配置文件至其余各个节点,完成mon 启动:

(3).在三个环境中启动 osd 进程配置存储盘,并在主节点环境启动 mgr 进程、rgw进栏:

(4).创建存储泡与 b 块设备镜像,并对创建好的镜像在各个节点进行映射即可实现块设备的共享:

(5).对块设备进行 PolarFS 的格式化与 PolarDB 的部署.

注意

操作系统版本要求 CentOS7.5及以上。以下步潭在 CentOS7.5上通过测试。

查看 Ip:

image.png

2.环境准备

使用的虚拟机环境如下:

iPhostname

192 168.1.173ceph001

192 .168.1.174ceph002

192.168.1.175ceph003

image.png

3.安装 docker

提示

本教程使用阿里云镜像站提供的 docker 包。

安装 docker 依赖包

//不同网络问题耗时可能会比较久

yum instoll -y yum-utils device-mapper-persistent -data lvm2

安装并启动 docker

yum- config- manager --add-repo http://mirrors ,aliyun, com/docker-ce/linux/centos/doc

yum makecache

yum install -y docker- ce

systemctl start dockersystemctl enable docker

4.检查是否安装成功

docker run hello-world

image.png

5.配置 ssh 免密登录

ssh-keygen

ssh-copy-id -i /root/ . ssh/id rsa. pub

root@ceph001

ssh-copy-id -í /root/ .ssh/id rsa . pub

root@ceph002

ssh-copy-id -i /root/ . ssh/id rsa pub

root@ceph003

6.检查是否配置成功

ssh root@ceph003

下载ceph daemon

docker pull ceph daemon

mon 部署

image.png

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 \

Ip 修改成172.17.0.125

-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

状态正常

image.png

注意

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

docker exec mon01 ceph config set mon auth allow insecure global. id reclaim false

生成必须的 keyring

dofker exec mon01 ceph auth get client . bootstrap-osd -o /var/lib ceph/bootstrap-osdocker exec monØ1 ceph auth get client . bootstrap-rgw -o /var/lib/ ceph/bootstrap-rg

7.配置文件同步

ssh root@cephØØ2 mkdir -p /var/lib/ceph

cp -r /etc/ceph rootecephØ02:/etc

scp-r/var/lib/ceph/bootstrap* root@cephØ02:/var/lib/cephssh root@cephØØ3 mkdir -p /var/lib/ceph

scp -r /etc/ceph root@cephØ03:/etc

scp -r /var/lib/ceph/bootstrap* rooteceph003:/var/lib/ceph

8.在 cepho02 和 ceph003 中启动 mon

docker run -d

--net-host

--privileged-true

-V /etc/ceph:/etc/ceph

-V /var/lib/ceph :/var/lib/ceph/ 1-e MON IP-192.168.1.174

-e CEPH_PUBLIC NETWORK-192168.1.0/24 S-- security-opt seccomp-unconfined

--name monØz

ceph daemon mon

docker run -d

--net host

- -privileged-true

-v /etc/ceph:/etc/ceph

S-V var/lib/ceph/:/var/lib/cep/

-e MON IP-1192.168.1.175

-e CEPH PUBLIC NETWORK-192, 168.1.0/24 1

--security-opt seccomp-unconfined

--name mon03

ceph/daemon mon

image.png

此时守护进程配置完毕,状态时 HEALTH_OK

 

三.osd 部署

1. 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

/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

image.png

注意:

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

2. osd 激活阶段

docker run -d --privileged-true --net-host --pidmhost --ipc-host V-- 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/lvmv:/run/lvm

-e CLUSTER- ceph

-e СЕPH DAEMON OSD СЕРИ VOLUME, ACTIVATE

-e CONTAINER IMAGE docker ,o/ceph/daemon

-e OSD_ID-0

-name ceph-osd-Ø

docker, Lo/ceph/daemon

注意

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

3个 up 已全部启动

image.png

3.查看集群状态

$ docker exec mon01 ceph

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:0pools, 0 pgs

objects: 0 objects, 0 B

usage:0 B used. 0 B /0 B availpgs:

 

四.mgr. mds, rgw 部署

1.mgr. mds, rgw 部署

以下命令均在 cephoo1进行:

docker run -d --net host

--privileged-true V

--security-opt seccomp unconfined-v /etc/ceph:/etc/ceph

-V /var/lib/ceph/ :/var/lib/ceph/ V- name ceph-mgr-Ø

ceph/daemon mgrd

docker run -d --net-host V

-privileged-true

--security-opt seccomp-unconfined

-v /var/lib/ceph :/var/lib/ceph/ 1

-v /etc/ceph:/etc/ceph L

-e CEPHFS CREATE-1 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

image.png

15tib,145pg

2.rbd 块设备创建

以下命令均在容器 mon01中进行。

存储池的创建(匿名私有池)

不增加新节点池不会增加

image.png

docker exec -it mon01 bash

ceph osd pool create rbd_polar

3.创建镜像文件并查看信息

rbd create --size 512000 rbd_polar/image02

rbd info rbd. polar/image02

rbd image ’ image02'

size 500 GiB in 128000 objectsorder 22 (4 MiB objects)

snapshot_ count: 0

id: 13b97b252c5d

format: 2

features: loyering, exlustve-lck,object-mop, fat-diff, dep-f-att

features:

flags:

create timestamp: Thu 0ct 28 06:18:07 2021

access timestamp:Thu 0ct 28 06:18:07 2021

modify-timestamp: Thu 0ct 28 06:18:07 2021

4.映射镜像文件(在主机上观察不到)

modprobe rbd # 加载内核模块,在主机上执行

rbd map rbd polar/image02

rbd: sysfs write failed

RBD image feature set mismatch. Yoù can disable features unsupported by the kernel

In some cases useful info is found in syslog - try "dmesg I tail"

rbd: map failed: (6) No such device or address

image.png

Serve 接管

某些特性内核不支持(会报错),需要关闭才可以映射成功。如下进行:关闭 rbd 不支持特性,重新映射镜象,并查看映射列表。

image.png

名称出错不影响后续

映射完成后退出程序

Rbd0成为共享存储

rbd feature disable rbd polar/image02 object -map fast-diff deep-flattenrbd map rbd polar imageø2

rbd device list

id

pool

namespace

image

snap

device

rbd polar

image01

/dev/rbd

rbd polar

Image0Z

/dev/ rbd1

此处已经先映射了一个 image01,所以有两条信息。

注意

块设备镜像需要在各个节点都进行映射才可以在本地环境中通过 Lsblk 命令查看到, 否则不显示。ceph002与 ceph003上映射命令与上述一致。


五. PolarDB FileSystem 安装部署

请参考实例部署:

基于NDB共享存储> PolarDB FileSystem 安装部署

PolarDB for PG 内核编译部署

清参考实例部署:基于 NDB 共享存储> PolarDB tor PG 内核编详部署

进入官网,安装

image.png

也可使用安装包安装

image.png

1.PFS编译安装

参见 PFS 的 READMEC

2. 块设备重命名

需要重新链接

使用 dev/vdb 简介操作

PFS 仅支持特定字符开头的块设备进行访问,建议所有块设备访问节点都通过软链接使用相同名字访问共享块设备。例如,在 NBD 服务端主机上执行:

In -s /dev/vdb /dev/nvme0n1

在NBD客户端主机上执行:

In -s /dev/nbd0 /dev/nvme0n1

如此,便可以在服务端和客户端2台主机,使用相同的路径/ev/menl来访问同一个块设备。

1读写节点;2,3配置成只读节点

读写节点书写,只读节点进行查询

3.块设备初始化

在 NBD 服务端执行PFS操作来格式化共享块设备即可

sudo pfs -C diskmkfs nvme0n1

解析 zlog,进入zlog 目录

存在编译上的问题,需要添加重新加载

image.png

格式化中:

image.png

格式化成功后所有信息同步

4.块设备挂载

生 NBD 服务端和客户端上,分别启动 PFS. 挂载共享盘

sudo /usr/locol/polorstore/pfsd/bin/stert pfsd.sh P mvmeOni

PolarDB for PG 内核编译部署

注意

请使用同一个用户进行以下步骤。请勿使用 rool 用户隔建实例。

主节点部署

内核编译

常理应查找不到此命令(不严谨)

image.png

无需挂载

image.png

进入目录编译内核(先检查安装依赖)

若安装依赖不全,则编译会失败

image.png

编译正常未出现报错

编译完成后会启动默认进程(需将默认进程删除)

image.png

占用端口删除:

image.png

5.创建一个用户组

若出现问题可能是操作系统版本组不正确

基于 CentOS 7系统或容器

该方式假设您从一台具有 root 权限的干净的 CentOS 7操作系统上从零开始,可以是:安装 CentOs 7的物理机/虚拟机

从 CentOS 7官方 Docker 镜像 centos:centos7 上启动的 Docker容器

建立非 root 用户

PolarDB for PostgreSQL 需要以非 root 用户运行。以下步骤能够帮助您创建一个名为 postgres 的用户组和一个名为 postgres 的用户。

提示

如果您已经有了一个非 root用户,但名称不是

postgres:postgres ,可以忽略该步骤;但请注意在后续示例步骤中将命令中用户相关的信息替换为您自己的用户组名与用户名。

下面的命令能够创建用户组 postgres 和用户 postgres ,并为该用户赋予 sudo 和工作目录的权限。需要以 root 用户执行这些命令。

# install sudo

yum install -y sudo

# create user and group

groupadd -r postgres

useradd -m -9 postgres postgres -p”

usermod -nG wbeel L postgres

# make postgres as sudoer

chmod u+w /etc/sudoers

echo postgres ALL=(ALL) NOPASSWD: ALL' >>/etc/sudoers

chmod u-w /etc/sudoers

# grant access to home directory

chown -R postgres :postgres /home/postgres/

echo " source /etc/bashrc' » /home/postgres/ . bashrc

# for su postgres

sed -i " s/4096/unl imited/g' /etc/security/limits . d/20-nproc . conf

接下来,切换到 postgres 用户,就可以进行后续的步骤了:

su postgres

source /etc/bashr

cd~

T# PolarDB 1t19

下载 PolarDB 源代码

PolarDB for PostgreSQL 的代码托管于 GitHub 心上,稳定分支为POLARDB_,11_STABLE。

yum install -y git

clone-bPOLARDB_11_STABLE https://github.com/ApsaraDB/PolarDB-for-PostgreSQL.git

6. 依赖安装

获取 root 权限

耗时较长

image.png

使用 sudo 执行源代码根目录下的依赖安装脚本

install_dependencies.sh 完成所有的依赖安装。

cd PolarDB-for-PostgreSQL

sudo./install_dependencies.sh

编译部署

依赖安装完毕后,刷新用户配置,开始编译部署

source /etc/bashrc

./polardb_build.sh

部署完成后,进行简单的实例检查

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/psql\

p5432 -h 127.0.0.1 -c 'select version();

7.主节点部署

内核编译

将1做成主节点

./polardb_build.sh--with-pfsd

8.节点初始化

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/initdb -D pXimary

#共享存储初始化

sudo pfs -C disk mkdir /nvme0n1/shared_data

sudo /home/[SUSER]/tmp_basedir_polardb_pg_1100_bld/bin/polar-initdb.sh /home/

将所有目录信息拷贝(共享存储)

9.节点配置

打开 postgresql.conf,增加以下配置项:

port=5432

polar_hostid=1

polar_enable_shared_storage_mode=on

polar_disk_name='nvme0n1'

polar_datadir-'/nvme0n1/shared_data/'

polar_vfs.localfs_mode-off

shared_preload_libraries-'slibdir/polar_vfs,Slibdir/polar_worker'

polar_storage_cluster_name='disk'

logging_collector-on

image.png

增加用户权限

image.png

打开 pg-hba.conf,增加以下配置项

host

replication [SUSER]0.0.0.0/0 trust

10.启动与检查

启动:

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D SHOME/primary

检查

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -p 5432 -d postgres -c 'selectver

11.只读节点的流复制准备

创建相应的 replication slot,用于接下来创建的只读节点的物理流复制:

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -p 5432 -d postgres -c "select pg_d

只读节点部署#内核编译

./polardb_ build. sh --with-pfsd

image.png

12.节点初始化

$HOME/tmp basedir. polardb .Pg. 1100 bld/bin/initdb -D replical

image.png

Ip 修改成3

创建

recovery.conf,增加以下配置项:

polar_replica='on'

recovery_target_timeline='latest'

primary_slot_name='replical'

primary._conninfos='host-[主节点所在容器的

IP]port-5432user=[$USER]dbnames=postgres a

启动与检查

启动:

$HOME/tmp_basedir_polardb_pg_1100_bld/bin/pg_ctl start -D $HOME/replical

image.png

提示启动成功

检查:

image.png

修改 ip

13.实例检查和测试

部署完成后,需要进行实例检查和测试,确保主节点可正常写入数据、只读节点可以正常读取。

登录主节点,创建测试表并插入样例数据:

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/psql -q -p 5432 -d postgres -c "create t

登录只读节点,查询刚刚插入的样例数据:

SHOME/tmp_basedir_polardb_pg_1100_bld/bin/psgl -q -p 5433 -d postgres -c "select

image.png

实例回归测试:

普通实例回归测试:

./polardb_build.sh -r -e -r-external -r-contrib -r-pl --withrep --with-tde

HTAP 实例回归测试:

./polardb_build.sh -r-px -e -r-external -r-contrib -r-pl --with-tde

分布式实例回归测试:

./polardb_build.sh -r -e -r-external -r-contrib -r-pl --with-tde--with-dma

3个节点:一个读写,2个只读节点

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
SQL 关系型数据库 Docker
开源PolarDB-X部署体验:挑战与反思
本文记录了部署开源PolarDB-X的体验及挑战。PolarDB-X是一款云原生分布式SQL数据库,具备高性能和可扩展性。部署中遇到的问题包括依赖冲突、文档不清晰及官方文档无法访问等。建议改进文档准确性、增强错误提示和支持、简化部署流程,如采用Docker简化快速入门。尽管部署未成功,但仍对PolarDB-X未来发展持乐观态度。
|
5月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源部署体验评测
PolarDB 开源部署体验评测
105 3
|
2月前
|
存储 关系型数据库 MySQL
阿里云PolarDB解决游戏行业全球部署高并发问题
阿里云PolarDB解决游戏行业全球部署高并发问题
|
3月前
惊世骇俗!开源 PolarDB-X 部署安装大冒险,全程心跳与惊喜不断!
【9月更文挑战第8天】作为技术爱好者的我,近期成功完成了开源 PolarDB-X 的部署安装。尽管过程中遇到不少挑战,但通过精心准备环境、下载安装包、配置参数及启动服务等步骤,最终顺利实现部署。本文将详细介绍部署全过程及可能遇到的问题,为您的 PolarDB-X 探索之旅提供参考与启发,希望能让大家在技术海洋里畅游得更加顺利!
158 2
|
3月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB在混合云环境下的部署策略与挑战
【9月更文挑战第5天】随着云计算技术的发展,混合云成为众多企业首选,以满足数据管理和业务扩展需求。阿里巴巴自研的PolarDB是一款高性能云原生数据库,在混合云中可通过多种方式部署,如Kubernetes,实现资源弹性伸缩及自动化管理,并支持跨平台数据同步与金融级高可用性。然而,混合云环境下也带来了复杂性、成本优化及运维难度等挑战,企业需综合考虑平台兼容性、安全性和资源投入比例等问题。
106 5
|
5月前
|
关系型数据库 测试技术 数据库
开源PolarDB-X部署体验:探索与反馈
在 cloud DB 技术发展中, PolarDB-X 凭借高性能和可扩展性备受瞩目。本文分享了其部署体验!
337 6
开源PolarDB-X部署体验:探索与反馈
|
5月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
|
4月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB在混合云环境下的部署策略与挑战
随着云计算的发展,混合云成为企业优选架构。PolarDB作为阿里云原生数据库,具备高可用、水平扩展和HTAP能力,在混合云中通过多种部署方式(如Kubernetes)实现资源弹性管理与数据实时同步。面对复杂性、成本优化及运维挑战,PolarDB提供解决方案确保数据安全与业务连续性。
102 4
|
4月前
|
存储
惊世骇俗!开源 PolarDB-X 部署安装大冒险,全程心跳与惊喜不断!
【8月更文挑战第8天】作为技术爱好者的我近期完成了开源PolarDB-X的部署安装,过程虽具挑战,但终获成功。现分享全过程:先确保服务器配置达标(内存、存储及网络)。接着下载官方最新稳定版,解压至指定目录。配置参数需细心调整以适配需求,如设置端口及数据路径。最后启动服务并留意可能的问题,如下载中断或配置错误等,可通过日志排查解决。部署完成后,见到服务正常运行时的喜悦难以言表。尽管PolarDB-X部署稍显复杂,但按部就班即可达成。期待与大家共同探讨学习!
188 1
|
4月前
|
监控 Oracle 关系型数据库
PolarDB 在多云环境下的部署与管理
【8月更文第27天】随着云计算的普及和发展,越来越多的企业开始采用多云策略来分散风险、优化成本并提高业务灵活性。阿里云的 PolarDB 是一种兼容 MySQL、PostgreSQL 和 Oracle 的关系型数据库服务,它提供了高性能、高可用性和自动化的管理功能。本文将探讨如何在多云环境下部署和管理 PolarDB 实例,并提供一些实用的代码示例。
82 0