开发者学堂课程【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 支持多读结构
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:
2.环境准备
使用的虚拟机环境如下:
iPhostname
192 168.1.173ceph001
192 .168.1.174ceph002
192.168.1.175ceph003
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
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 部署
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
状态正常
注意
如果遇到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
此时守护进程配置完毕,状态时 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
注意:
以上命令在三个节点都是一样的,只需要根据磁盘名称进行修改调整即可。
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 已全部启动
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
15tib,145pg
2.rbd 块设备创建
以下命令均在容器 mon01中进行。
存储池的创建(匿名私有池)
不增加新节点池不会增加
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
Serve 接管
某些特性内核不支持(会报错),需要关闭才可以映射成功。如下进行:关闭 rbd 不支持特性,重新映射镜象,并查看映射列表。
名称出错不影响后续
映射完成后退出程序
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 内核编详部署
进入官网,安装
也可使用安装包安装
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 目录
存在编译上的问题,需要添加重新加载
格式化中:
格式化成功后所有信息同步
4.块设备挂载
生 NBD 服务端和客户端上,分别启动 PFS. 挂载共享盘
sudo /usr/locol/polorstore/pfsd/bin/stert pfsd.sh P mvmeOni
PolarDB for PG 内核编译部署
注意
请使用同一个用户进行以下步骤。请勿使用 rool 用户隔建实例。
主节点部署
内核编译
常理应查找不到此命令(不严谨)
无需挂载
进入目录编译内核(先检查安装依赖)
若安装依赖不全,则编译会失败
编译正常未出现报错
编译完成后会启动默认进程(需将默认进程删除)
占用端口删除:
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 权限
耗时较长
使用 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
增加用户权限
打开 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
12.节点初始化
$HOME/tmp basedir. polardb .Pg. 1100 bld/bin/initdb -D replical
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
提示启动成功
检查:
修改 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
实例回归测试:
普通实例回归测试:
./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个只读节点