在11g RAC搭建的时候,共享存储配置策略分为两种:
1,使用udev做共享存储的别名和权限绑定
2,使用multipath多路软件做别名绑定,使用udev做权限绑定
多链路的产生原因:
存储的多个HBA卡(防止单点,至少两个)接入到多台光纤交换机(防止单点,至少两台)
每台服务器的多个HBA卡(防止单点,至少两个)接入到多台光纤交换机(防止单点,至少两台)
如果存储设备只有两个HBA卡:S1、S2,服务器也只有两个HBA卡:s1、s2,两台光纤交换机:F1、F2
那么从存储的某个RAID划分的LUN挂接到服务器时就存在2条链路:S1->F1->s1、S2->F2->s2
在服务器上,该LUN就会被识别成2个设备:/dev/sdb、/dev/sdc
使用scsi_id命令查看这2个设备的WWID时就会发现是相同的,也就是同一个LUN
共享存储配置的必要性:
当存在多个共享磁盘的时候,或者共享磁盘存在多链路的时候
系统重启前的/dev/sdb和重启后的/dev/sdb不一定会是同一块盘
这个时候就需要以上两个方案中的某一个,根据WWID绑定成固定的设备名
否则会造成设备使用的混乱
两种方案的区别:
第一种方法较为简单,根据设备的WWID做别名和权限绑定,不具备多路整合的特性
第二种方法是多链路整合的生产正规部署方法,具有链路冗余故障自动切换特性
生产推荐使用第二种方法
添加共享存储磁盘:
需要使用VirtualBOX软件做本次实验,该虚拟机软件可以方便的模拟共享存储磁盘
如果使用VMWare,则需要使用ISCSI或者FreeNAS或者Openfiler进行共享存储的模拟
需要额外搭建一台服务器,该服务器装FreeNAS或者Openfiler系统或者装CentOS配置ISCSI服务
依据《CentOS6实验机模板搭建部署》克隆部署虚拟机,添加一块共享存储,添加方法如下:
另外一台机器就可以同时使用该存储了
重启该机器,查看磁盘设备就能看到新增的共享存储了
首先需要获取共享存储的WWID,系统目前只有两个存储设备:
/dev/sda是系统盘,/dev/sdb是新增的共享存储,因此直接获取设备的WWID:
/sbin/scsi_id -g -u -d /dev/sdb
生产环境下,可以直接排除掉类似sda本地磁盘,查看所有的设备:
ls /dev/sd*|grep -v [0-9]|grep -v sda
使用scsi_id查看设备的WWID信息和容量信息:
for i in $(ls /dev/sd*|grep -v [0-9]|grep -v sda)
do
echo -ne "$(fdisk -l ${i}|grep ^Disk|grep ${i}|awk '{print $1,$2,$3,$4}') WWID:"
/sbin/scsi_id -g -u -d "${i}"
done|sort -nk3 -k5|column -t
规划:
根据WWID确定是否是同一个存储设备
根据设备容量确定该设备的用途,从而确定别名:
容量为10.7G的三个存储分别作为lun_crs01、lun_crs02、lun_crs03
CentOS5使用以下命令:
/sbin/scsi_id -g -u -s /block/sdb
# CentOS5中的设备查找的全路径是/sys/block/sdb
# 使用scsi_id生成WWID时传入的是/block/sdb
使用udev直接绑定别名和权限
# 解决start_udev时候的bug
echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config
cat >>/lib/udev/rules.d/90-pulseaudio.rules<"pulseaudio_check_usb"
LABEL="pulseaudio_check_usb"
EOF
# 根据上一步查询出的WWID信息和容量信息,确定该设备的别名信息
# 例如 Disk /dev/sdb: 8589 MB, WWID:1ATA_VBOX_HARDDISK_VB934ffffd-54985435
# 计划将此设备绑定别名为lun_crs01,并且授权给测试用户grid,测试组asmadmin
groupadd -g 1001 asmadmin
useradd -u 1005 -g asmadmin grid
# 此处的用户组和用户配置并不是标准的,只做演示用
WWID=1ATA_VBOX_HARDDISK_VB934ffffd-54985435
NAME=lun_crs01
OWNER=grid
GROUP=asmadmin
# 分别设置WWID、别名和用户以及用户组变量
cat >>/etc/udev/rules.d/99-oracle-asmdevices.rules<"sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -d /dev/\$name", RESULT=="${WWID}", NAME="${NAME}", OWNER="${OWNER}", GROUP="${GROUP}", MODE="0660"
EOF
# 简单解释:
# KERNEL=="sd*" 表示通配/dev/sd*所有设备
# BUS=="scsi" 表示设备是scsi总线类型的设备
# PROGRAM=="... /dev/$name" 表示执行命令
# $name会被依次替换成通配到的设备名,就是 KERNEL=="sd*" 通配出的名字
# RESULT=="..." 对命令执行的结果进行匹配筛选
# NAME="..." 代表对匹配到的设备做一个别名
# OWNER="...", GROUP="...", MODE="..." 权限赋值
# 当有多个共享设备时,只需要变更WWID和NAME,再次追加即可
start_udev
# 启动udev
# 查看权限信息,进行验证
fdisk -l /dev/test_disk
# 可以使用fdisk命令查看该设备的信息
策略回滚
rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules
reboot
# 也可以直接删除/dev/test_disk,而不进行重启,但不建议这么做
multipath多路软件别名绑定
# 首先需要回滚掉使用udev直接绑定的策略,否则实验会失败
# 或者新增一块没有使用第一种方法进行udev别名和权限绑定的磁盘设备
rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules
reboot
# 软件安装,设置开机启动
yum -y install device-mapper-multipath
chkconfig multipathd on
# 生成默认配置文件,启动
mpathconf --enable
/etc/init.d/multipathd start
# WWID信息依然是使用上方方法查看,别名依然使用
WWID=1ATA_VBOX_HARDDISK_VB934ffffd-54985435
NAME=lun_crs01
# 还需要一些sdb设备的vendor、product信息,可以通过命令 multipath -v3 获取
# 在此之前需要首先生成默认的配置文件,否则无法查询到相应信息
vendor=$(multipath -v3|grep sdb|grep 'vendor'|awk '{print $NF}')
product=$(multipath -v3|grep sdb|grep 'product'|awk '{print $(NF-1),$NF}')
# 生成新的配置文件
cat >/etc/multipath.conf<"^sda"
}
multipaths {
multipath {
wwid "${WWID}"
alias ${NAME}
path_grouping_policy multibus
path_selector "round-robin 0"
mode 0600
}
}
devices {
device {
vendor "${vendor}"
product "${product}"
getuid_callout "/sbin/scsi_id -g -u -d /dev/%n"
failback immediate
no_path_retry fail
}
}
EOF
# man multipath.conf 可以查到诸如path_grouping_policy、path_selector的配置意义
# 当有多个共享设备时,只需要复制multipath标签,替换wwid和alias俩参数即可
# 如果多个LUN来自不同的设备,比如有些来自dell的存储,有些则来自EMC²
# 则需要复制device标签,替换vendor和product参数
/etc/init.d/multipathd restart
ls -l /dev/mapper/
# 使用多路软件之后,绑定的别名在目录/dev/mapper/之下
# 别名实际上是软连接,它指向/dev/dm-XXX
# 系统重启前后/dev/dm-XXX不一定是同一个磁盘设备
# 而别名就会根据WWID指向另外的/dev/dm-XXX设备
权限绑定
使用multipath多路软件可以根据WWID绑定别名,可以做多路整合
但是multipath配置中没有对所属人和所属主进行配置的配置参数
需要进一步借助udev进行权限设置
# 解决start_udev时候的bug,如果在上一个试验中做了此操作,则无需再做
echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config
cat >>/lib/udev/rules.d/90-pulseaudio.rules<"pulseaudio_check_usb"
LABEL="pulseaudio_check_usb"
EOF
# 要根据multipath绑定的别名进行赋权,查询当前存在的别名
dmsetup ls
# 当然也可以去查询配置文件
OWNER=grid
GROUP=asmadmin
NAME=lun_crs01
cat >>/etc/udev/rules.d/12-dm-permissions.rules<"${NAME}", OWNER:="${OWNER}", GROUP:="${GROUP}", MODE:="0660"
EOF
# 注意此处的赋值是:=而非=
# 同样的,如果有多个共享存储,需要变更相应的NAME进行追加udev配置文件
start_udev
ls -l /dev/mapper/
ls -l /dev/dm-0
CentOS5系列的权限绑定方法
# CentOS5的多路绑定之后,/dev/mapper/下面生成的不是软连接,而是具体的设备,因此udev绑定策略变成:
cat >/etc/udev/rules.d/99-oracle-asmdevices.rules<<EOF
PROGRAM="/bin/chown grid:oinstall /dev/mapper/lun-*"
PROGRAM="/bin/mod 0660 /dev/mapper/lun-*"
EOF
[TOC]