112 lines
3.0 KiB
Markdown
112 lines
3.0 KiB
Markdown
# 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)。
|