【PostgreSQL】- 1.2 PostgreSQL 配置单独的数据库存储

在 Debian 或其它 Linux 系统上,为数据库创建一个单独的挂载点(如 /opt/pgdata)并将一块大容量硬盘挂载到这个目录有几个优点:数据隔离、性能优化、备份和恢复、安全性。
因此接上篇 “【PostgreSQL】- 1.1 在 Debian 12 上安装 PostgreSQL 15”,我在初始化之前先规划数据库的存储。

添加硬盘

新添加一块大容量硬盘,规划做为数据库的数据盘。

查看新硬盘

  ~# lsblk
  NAME                                               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  sr0                                                 11:0    1 1024M  0 rom
  vda                                                254:0    0  100G  0 disk
  |-vda1                                             254:1    0  487M  0 part /boot
  |-vda2                                             254:2    0    1K  0 part
  `-vda5                                             254:5    0 99.5G  0 part
  |-deb12ser--vg-root   253:0    0 98.6G  0 lvm  /
  `-deb12ser--vg-swap_1 253:1    0  980M  0 lvm  [SWAP]
  vdb                                                254:16   0    2T  0 disk
  

硬盘分区

找到新硬盘 vdb, 使用 fdisk 进行分区

  ~# su - root
  Password:
  ~# fdisk /dev/vdb
  
  Welcome to fdisk (util-linux 2.38.1).
  Changes will remain in memory only, until you decide to write them.
  Be careful before using the write command.
  
  Device does not contain a recognized partition table.
  The size of this disk is 2 TiB (2199023255552 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
  
  Created a new DOS (MBR) disklabel with disk identifier 0x7f500dd1.
  
  Command (m for help):
  

看到提示硬盘vdb大小超过了2TB,建议使用GUID分区表格式(GPT)而不是DOS分区表格式(MBR)。MBR格式对于大于2TB的驱动器有限制,而GPT则没有这个限制。

这里换用parted来创建GPT分区。不过,如果您确定要使用fdisk并且您的fdisk版本支持GPT,您可以尝试以下步骤(但请注意,fdisk的GPT支持可能因Linux发行版而异):

退出当前的fdisk会话(如果没有做任何更改的话):

   Command (m for help): q

使用parted来创建GPT分区(推荐,应为fdisk需要用专家模式或者通过直接写入GPT头来强制fdisk使用GPT分区表,通常不推荐,因为它可能会导致数据丢失或分区表损坏。):

debian12 默认没有 parted,进行安装:apt install parted,然后进行 gpt 类型的分区:

   ~# parted /dev/vdb mklabel gpt
   Information: You may need to update /etc/fstab.

继续创建分区:

   ~# parted /dev/vdb mkpart primary 0% 100%
   Information: You may need to update /etc/fstab.

这将在整个磁盘上创建一个主分区。

查看创建结果如下:

  ~# lsblk
  NAME                                               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  sr0                                                 11:0    1 1024M  0 rom
  vda                                                254:0    0  100G  0 disk
  |-vda1                                             254:1    0  487M  0 part /boot
  |-vda2                                             254:2    0    1K  0 part
  `-vda5                                             254:5    0 99.5G  0 part
  |-deb12ser--vg-root   253:0    0 98.6G  0 lvm  /
  `-deb12ser--vg-swap_1 253:1    0  980M  0 lvm  [SWAP]
  vdb                                                254:16   0    2T  0 disk
  `-vdb1                                             254:17   0    2T  0 part

配置 LVM

创建物理卷(PV)

  ~# pvcreate /dev/vdb1
  Physical volume "/dev/vdb1" successfully created.

创建卷组(VG)

  ~# vgcreate vg_pgdata /dev/vdb1
  Volume group "vg_pgdata" successfully created

创建逻辑卷(LV)

  ~# lvcreate -L 2T -n lv_pgdata vg_pgdata
  Volume group "vg_pgdata" has insufficient free space (524287 extents): 524288 required.

检查一下:

  ~# vgdisplay vg_pgdata
  --- Volume group ---
  VG Name               vg_pgdata
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.00 TiB
  PE Size               4.00 MiB
  Total PE              524287
  Alloc PE / Size       0 / 0
  Free  PE / Size       524287 / <2.00 TiB
  VG UUID               RzUB4Z-eiNi-UEoX-9634-8CmF-VnKT-hVWEzd

错误信息表明,尽管 vg_pgdata 卷组显示的空闲空间接近 2TB(由 524287 个空闲的 PE 组成,每个 PE 大小为 4MiB),但实际上它没有足够的空间来创建一个精确的 2TB(2 * 1024 * 1024 MiB)逻辑卷,因为 2TB 需要 524288 个 PE。

那么换个参数配置

  ~# lvcreate -l 100%FREE -n lv_pgdata vg_pgdata
  Logical volume "lv_pgdata" created.

确认一下

  ~# lvs
  LV        VG                               Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_pgdata vg_pgdata                        -wi-a-----  <2.00t
  root      zh-ubds-pg01-hw8-deb12-zx-ser-vg -wi-ao----  98.56g
  swap_1    zh-ubds-pg01-hw8-deb12-zx-ser-vg -wi-ao---- 980.00m

创建文件系统

  ~# mkfs.ext4 /dev/vg_pgdata/lv_pgdata
  mke2fs 1.47.0 (5-Feb-2023)
  Discarding device blocks: done
  Creating filesystem with 536869888 4k blocks and 134217728 inodes
  Filesystem UUID: f43e19a0-3d29-441b-bd47-b97dadd97b3c
  Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000
  
  Allocating group tables: done
  Writing inode tables: done
  Creating journal (262144 blocks): done
  Writing superblocks and filesystem accounting information:
  
  
  done
  

挂载新分区:

   ~# mkdir /opt/pgdata
   ~# mount /dev/vg_pgdata/lv_pgdata /opt/pgdata

检查

  ~# df -lh
  Filesystem                                                Size  Used Avail Use% Mounted on
  udev                                                      7.8G     0  7.8G   0% /dev
  tmpfs                                                     1.6G  648K  1.6G   1% /run
  /dev/mapper/deb12ser--vg-root   97G  1.6G   90G   2% /
  tmpfs                                                     7.8G     0  7.8G   0% /dev/shm
  tmpfs                                                     5.0M     0  5.0M   0% /run/lock
  /dev/vda1                                                 455M   59M  372M  14% /boot
  tmpfs                                                     1.6G     0  1.6G   0% /run/user/1000
  /dev/mapper/vg_pgdata-lv_pgdata                           2.0T   28K  1.9T   1% /opt/pgdata

配置自动挂载:

要确保每次启动时分区都自动挂载,编辑/etc/fstab文件并添加一行类似于以下的条目:

   /dev/vg_pgdata/lv_pgdata /opt/pgdata ext4 defaults 0 0

重启检查 reboot

  ~# df -lh
  Filesystem                                                Size  Used Avail Use% Mounted on
  udev                                                      7.8G     0  7.8G   0% /dev
  tmpfs                                                     1.6G  640K  1.6G   1% /run
  /dev/mapper/zh--ubds--pg01--hw8--deb12--zx--ser--vg-root   97G  1.6G   90G   2% /
  tmpfs                                                     7.8G     0  7.8G   0% /dev/shm
  tmpfs                                                     5.0M     0  5.0M   0% /run/lock
  /dev/vda1                                                 455M   59M  372M  14% /boot
  /dev/mapper/vg_pgdata-lv_pgdata                           2.0T   28K  1.9T   1% /opt/pgdata
  tmpfs                                                     1.6G     0  1.6G   0% /run/user/1000

配置权限

确定 PostgreSQL 的用户和组(这里是 postgres 用户和组)。
更改 /opt/pgdata 目录的所有者和组为 PostgreSQL 的用户和组。使用 chown 命令:

  ~# chown -R postgres:postgres /opt/pgdata

确保目录的权限设置得当,以便 PostgreSQL 进程可以读写数据。
这里设置权限为 700(-rwx------ 仅所有者有读、写和执行权限):

  ~# chmod 700 /opt/pgdata

检查

  ~# ls -l /opt
  total 4
  drwx------ 3 postgres postgres 4096 Mar 27 11:27 pgdata
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值