配置RDS使用本地LVM卷

为什么RDS使用LVM

针对RDS服务,我们提供LVM卷给Docker使用,这样的考虑基于如下几点:

  1. RDS做了双主,本身提供了高可用,底层存储不再需要再做高可用
  2. 使用PCIE存储卡提供超高性能的存储设备,支撑高性能mysql的需求
  3. 减少跨物理机访问存储的网络开销

服务器上部署LVM卷的详情

一般我们RDS服务在每个区都有单独的两台物理机提供服务,这是因为:

  1. 我们使用Docker而非普通nova instance运行trove instancenova-docker和普通nova-compute在同一台物理机上都支持有困难(nova,neutron的限制)
  2. 两台物理机正好把RDS的双主分配到不同物理机,提高可靠性

在每台物理机上,我们支持三种类型的存储:

  1. 普通型 - SATA盘,使用2块4T的SATA盘(为了加快速度,会使用SSD分区做SATA盘的flashcache)
  2. 高性能型 - SSD盘,使用3个SSD盘的分区
  3. 超高性能型 - PCIE存储卡,使用1个宝存的3.2T的PCIE存储卡

如Server1上:

1
2
3
4
5
6
7
8
root@Server1:/home/openstack# pvs
PV VG Fmt Attr PSize PFree
/dev/dfa volume-group-pcie lvm2 a-- 2.91t 633.44g
/dev/sdc4 volume-group-ssd lvm2 a-- 605.18g 144.67g
/dev/sdd4 volume-group-ssd lvm2 a-- 605.18g 0
/dev/sde4 volume-group-ssd lvm2 a-- 685.18g 0
/dev/sdl volume-group-sata lvm2 a-- 3.64t 386.48g
/dev/sdm volume-group-sata lvm2 a-- 3.64t 0

配置LVM步骤

选择合适的磁盘,规划好每个磁盘的使用

创建不同类型的pv和vg

因为SATA盘的性能限制,所以这里先给SATA盘建立flashcache:

1
2
flashcache_create -p back lvm-sata-cache1 /dev/sdj3 /dev/sdl
flashcache_create -p back lvm-sata-cache2 /dev/sdk3 /dev/sdm

创建SATA物理卷组:

1
2
3
pvcreate /dev/mapper/lvm-sata-cache1
pvcreate /dev/mapper/lvm-sata-cache2
vgcreate volume-group-sata /dev/mapper/lvm-sata-cache1 /dev/mapper/lvm-sata-cache2

创建SSD物理卷组:

1
2
3
4
pvcreate /dev/sdc4
pvcreate /dev/sdd4
pvcreate /dev/sde4
vgcreate volume-group-ssd /dev/sdc4 /dev/sdd4 /dev/sde4

创建PCIE物理卷组:

1
2
pvcreate /dev/dfa
vgcreate volume-group-pcie /dev/dfa

创建好的vgs如下:

1
2
3
4
5
root@Server1:/home/openstack# vgs
VG #PV #LV #SN Attr VSize VFree
volume-group-pcie 1 5 0 wz--n- 2.91t 633.44g
volume-group-sata 2 7 0 wz--n- 7.28t 386.48g
volume-group-ssd 3 6 0 wz--n- 1.85t 144.67g

cinder配置

cinder.conf做如下修改,然后重启服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Define the names of the groups for multiple volume backends
enabled_backends = lvm-sata,lvm-ssd,lvm-pcie
# Define the groups as above
[lvm-sata]
volume_group = volume-group-sata
volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name=LVM_SATA
volume_clear = none
[lvm-ssd]
volume_group = volume-group-ssd
volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name=LVM_SSD
volume_clear = none
[lvm-pcie]
volume_group = volume-group-pcie
volume_driver=cinder.volume.drivers.lvm.LVMISCSIDriver
volume_backend_name=LVM_PCIE
volume_clear = none

可能遇到的问题

问题:pvcreate命令返回失败

1
2
# pvcreate /dev/dfa
Device /dev/dfa not found (or ignored by filtering).

解决办法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# pvcreate -vvvv /dev/dfa 2>&1 | less

能看到包含如下信息:
...
#filters/filter.c:109 /dev/dfa: Skipping: Unrecognised LVM device type 251
...

# cat /proc/devices
...
Block devices:
...
251 shannon
...

# vim /etc/lvm/lvm.conf
修改types对应行如下:
types = [ "shannon", 251 ]

然后可以确认如下:
# lvm dumpconfig | grep types
types=["shannon", 251]
# pvcreate /dev/dfa
Physical volume "/dev/dfa" successfully created
支持原创