PolarDBforPostgreSQL/docs/deploying/storage-nbd.md

112 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# NBD 共享存储
Network Block Device (NBD) 是一种网络协议可以在多个主机间共享块存储设备。NBD 被设计为 Client-Server 的架构,因此至少需要两台物理机来部署。
以两台物理机环境为例,本小节介绍基于 NBD 共享存储的实例构建方法大体如下:
- 首先,两台主机通过 NBD 共享一个块设备;
- 然后,两台主机上均部署 PolarDB File System (PFS) 来初始化并挂载到同一个块设备;
- 最后,在两台主机上分别部署 PolarDB for PostgreSQL 内核,构建主节点、只读节点以形成简单的一写多读实例。
::: warning
以上步骤在 CentOS 7.5 上通过测试。
:::
## 安装 NBD
### 为操作系统下载安装 NBD 驱动
::: tip
操作系统内核需要支持 NBD 内核模块,如果操作系统当前不支持该内核模块,则需要自己通过对应内核版本进行编译和加载 NBD 内核模块。
:::
从 [CentOS 官网](https://www.centos.org/) 下载对应内核版本的驱动源码包并解压:
```bash
rpm -ihv kernel-3.10.0-862.el7.src.rpm
cd ~/rpmbuild/SOURCES
tar Jxvf linux-3.10.0-862.el7.tar.xz -C /usr/src/kernels/
cd /usr/src/kernels/linux-3.10.0-862.el7/
```
NBD 驱动源码路径位于:`drivers/block/nbd.c`。接下来编译操作系统内核依赖和组件:
```bash
cp ../$(uname -r)/Module.symvers ./
make menuconfig # Device Driver -> Block devices -> Set 'M' On 'Network block device support'
make prepare && make modules_prepare && make scripts
make CONFIG_BLK_DEV_NBD=m M=drivers/block
```
检查是否正常生成驱动:
```bash
modinfo drivers/block/nbd.ko
```
拷贝、生成依赖并安装驱动:
```bash
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block
depmod -a
modprobe nbd # 或者 modprobe -f nbd 可以忽略模块版本检查
```
检查是否安装成功:
```bash
# 检查已安装内核模块
lsmod | grep nbd
# 如果NBD驱动已经安装则会生成/dev/nbd*设备(例如:/dev/nbd0、/dev/nbd1等
ls /dev/nbd*
```
### 安装 NBD 软件包
```bash
yum install nbd
```
## 使用 NBD 来共享块设备
### 服务端部署
拉起 NBD 服务端,按照同步方式(`sync/flush=true`)配置,在指定端口(例如 `1921`)上监听对指定块设备(例如 `/dev/vdb`)的访问。
```bash
nbd-server -C /root/nbd.conf
```
配置文件 `/root/nbd.conf` 的内容举例如下:
```ini
[generic]
#user = nbd
#group = nbd
listenaddr = 0.0.0.0
port = 1921
[export1]
exportname = /dev/vdb
readonly = false
multifile = false
copyonwrite = false
flush = true
fua = true
sync = true
```
### 客户端部署
NBD 驱动安装成功后会看到 `/dev/nbd*` 设备, 根据服务端的配置把远程块设备映射为本地的某个 NBD 设备即可:
```bash
nbd-client x.x.x.x 1921 -N export1 /dev/nbd0
# x.x.x.x是NBD服务端主机的IP地址
```
---
## 准备分布式文件系统
参阅 [格式化并挂载 PFS](./fs-pfs.md)。