环境说明
名称 | 说明 |
---|---|
操作系统 | RockyLinux9.3 |
CPU核心数 | 4 |
内存 | 4GB |
存储 | 本地20GB+共享盘20GB |
主机数量 | 3台 |
1. 安装PolarDB数据库软件
这里使用中启乘数的一键安装命令,三台机器上都来一下:
wget -qO /tmp/clup.sh --no-check-certificate https://get.csudata.com/csuinst/clup.sh && bash /tmp/clup.sh db install
选择安装的数据库,输入5
然后回车
请选择要安装的数据库:
1) PostgreSQL 11
2) PostgreSQL 12
3) PostgreSQL 13
4) PostgreSQL 14
5) PolarDB
按 'q' 退出
请输入选择: 5
安装的目录
/usr/polardb
我这里的环境发现还缺一个依赖libxerces-c-3.2.so
,需要安装一下
dnf install -y epel-release
dnf install -y xerces-c-devel
检查环境是否缺少依赖的命令
ldd /usr/polardb/bin/postgres
如果发现有
not found
的则说明缺少相关依赖,先安装一下。
2. 创建共享盘并挂载
这里我使用的是中启乘数的虚拟机管理软件CSYun
来创建共享磁盘的。关于部署CSYun
的文档:
这里记录下在CSYun
上的创建过程,其他的虚拟机管理软件可以自己查一下怎么创建共享盘并挂载。
- 我使用的lv卷组管理,这里修改数据盘池的路径为vg的名称
- 创建共享盘,有一点需要注意,PolarDB共享存储用到了pfs磁盘管理工具,其会对磁盘进行切分,以10GB为单位,所以这里共享盘的大小必须是10GB的整数倍。
- 新建的磁盘默认是独享的,需要先卸载一下,然后再通过共享来挂载
- 在剩余的两台机器上挂载磁盘
3. 配置磁盘的udev规则
下面的这些操作需要在三台机器上都执行一遍。
先配置磁盘的udev规则,一是避免重启机器后磁盘名发生变化,二是Pfs需要设置特定的磁盘名称。
查看磁盘的ID_PATH
,找到并记录下共享盘的ID_PATH
lsblk
ls -l /dev/disk/by-path
[root@PG01 polardb]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
sr1 11:1 1 1024M 0 rom
sr2 11:2 1 1024M 0 rom
sr3 11:3 1 1024M 0 rom
vda 253:0 0 20G 0 disk
├─vda1 253:1 0 2M 0 part
└─vda2 253:2 0 20G 0 part /
[root@PG01 polardb]# ls -l /dev/disk/by-path
total 0
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 pci-0000:01:00.0-scsi-0:0:0:0 -> ../../sr0
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 pci-0000:01:00.0-scsi-0:0:0:1 -> ../../sr3
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 pci-0000:01:00.0-scsi-0:0:0:2 -> ../../sr2
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 pci-0000:01:00.0-scsi-0:0:0:3 -> ../../sr1
lrwxrwxrwx. 1 root root 9 Sep 2 23:09 pci-0000:01:00.0-scsi-0:0:4:0 -> ../../sda
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 pci-0000:04:00.0 -> ../../vda
lrwxrwxrwx. 1 root root 10 Sep 2 22:18 pci-0000:04:00.0-part1 -> ../../vda1
lrwxrwxrwx. 1 root root 10 Sep 2 22:18 pci-0000:04:00.0-part2 -> ../../vda2
lrwxrwxrwx. 1 root root 9 Sep 2 22:18 virtio-pci-0000:04:00.0 -> ../../vda
lrwxrwxrwx. 1 root root 10 Sep 2 22:18 virtio-pci-0000:04:00.0-part1 -> ../../vda1
lrwxrwxrwx. 1 root root 10 Sep 2 22:18 virtio-pci-0000:04:00.0-part2 -> ../../vda2
从上面的输出结果看,我的共享盘是
sda
。
然后创建udev规则,创建并编辑文件/etc/udev/rules.d/nvme1n1.rules
ACTION=="add|change", SUBSYSTEMS=="block", ENV{ID_PATH}=="pci-0000:01:00.0-scsi-0:0:4:0", SYMLINK+="nvme1n1"
注意:这里
SYMLINK
是为磁盘取的别名,Pfs需要以nvme
开头来命名。
使udev生效
/sbin/udevadm control --reload-rules
/sbin/udevadm trigger --type=devices --action=change
查看是否生效
[root@PG01 polardb]# ll /dev/nvme1n1
lrwxrwxrwx. 1 root root 3 Sep 3 11:37 /dev/nvme1n1 -> sda
4. 创建PolarDB共享存储集群
共享存储集群,防脑裂需要配置ipmi命令在节点故障时强制重启,但是这个命令需要配置在物理机上,这里用的是虚拟机,所以只配置了一个/bin/true
,不起作用,做故障测试时,需要注意不能简单地制造节点故障,否则自动切换时会导致脑裂。可以尝试重启机器或者将这里改为/bin/false
,且忽略reset执行结果
设置为否,这样发生节点异常时,集群不会发生自动切换,我们可以确认环境后手工去切。
创建集群所使用的数据库管理软件叫CLup
,软件部署的相关文档:
- 官方文档:CLup简介
- 我的文章:PostgreSQL数据库管理工具
登录到CLup
点击集群定义->创建集群->创建PolarDB共享存储集群,这里填写相关信息,默认的数据库系统用户为polardb
,这里填写的数据目录
是本地存储的路径:
继续填写一些集群数据库的信息
然后填写上面创建的共享盘名称
点击检测,如果没有问题就会弹出下面两个参数,可以修改下polar_datadir
,这个是共享存储中的数据目录,使用默认值也行。然后点击格式化
格式化完成后点击下一步,后面是集群探测信息和一些数据库参数的配置,我这里使用的是默认值,后面直接点击提交
看到Success
说明集群搭建好了,我们进入集群详情页查看一下
查看下共享磁盘的数据目录
[polardb@PG01 ~]$ pfs -C disk ls /nvme1n1/shared_data/
Dir 1 512 Tue Sep 3 13:42:23 2024 base
Dir 1 7424 Tue Sep 3 13:42:23 2024 global
Dir 1 0 Tue Sep 3 13:42:24 2024 pg_tblspc
Dir 1 512 Tue Sep 3 13:42:30 2024 pg_wal
Dir 1 384 Tue Sep 3 13:42:26 2024 pg_logindex
Dir 1 0 Tue Sep 3 13:42:24 2024 pg_twophase
Dir 1 128 Tue Sep 3 13:42:24 2024 pg_xact
Dir 1 0 Tue Sep 3 13:42:24 2024 pg_commit_ts
Dir 1 256 Tue Sep 3 13:42:24 2024 pg_multixact
Dir 1 512 Tue Sep 3 13:42:24 2024 pg_csnlog
Dir 1 256 Tue Sep 3 13:42:25 2024 polar_dma
Dir 1 512 Tue Sep 3 13:42:33 2024 polar_fullpage
File 1 32 Tue Sep 3 13:42:25 2024 RWID
Dir 1 256 Tue Sep 3 13:42:37 2024 pg_replslot
total 8192
5. 登录数据库
可以使用CLup带的Psql
登录功能
点击后直接进入到数据库里面
或者使用自己的ssh工具登录
su - polardb
[polardb@PG01 ~]$ psql -dpostgres
psql (11.9)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+---------+----------+------------+------------+---------------------
polardb_admin | polardb | UTF8 | en_US.UTF8 | en_US.UTF8 | =T/polardb +
| | | | | polardb=CTc/polardb
postgres | polardb | UTF8 | en_US.UTF8 | en_US.UTF8 |
template0 | polardb | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/polardb +
| | | | | polardb=CTc/polardb
template1 | polardb | UTF8 | en_US.UTF8 | en_US.UTF8 | =c/polardb +
| | | | | polardb=CTc/polardb
(4 rows)
后面就可以愉快的搞PolarDB的测试了。