2.3,在Oracle RAC节点上配置iSCSI卷
在集群中的两个Oracle RAC节点上都要配置 iSCSI 启动器。而创建分区只应在 RAC 集群的一个节点上执行。 iSCSI 客户端可以是提供iSCSI支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等)。在我们的示例中,客户端是两个Linux服务器(racnode1 和 racnode2),它们运行的是CentOS Linux 6.6。 iSCSI软件启动器将配置为自动登录网络存储服务器 (openfiler),并发现上一节中创建的 iSCSI 卷。之后,我们将逐步使用mulltipath为发现的每个iSCSI目标名称创建永久性本地SCSI设备名称(即 /dev/mapper/crs1)。拥有一致的本地SCSI设备名称及其映射到的iSCSI目标,有助于在配置 ASM 时能够区分三个卷。但是,在此之前,我们首先必须安装 iSCSI 启动器软件。
2.3.1,安装 iSCSI(启动器)服务
我们使用yum安装
#yum -y install iscsi-initiator-utils
#rpm -qa | grep iscsi-initiator-utils验证是否安装
2.3.2,配置 iSCSI(启动器)服务
现在我们来启动initiator 服务(iscsid),并使其在系统引导时自动启动。在配置 iscsi 服务自动启动,使其在系统启动时自动登录iSCSI 目标。 # service iscsid start
[ OK ]off network shutdown. Starting iSCSI daemon: [ OK ] [ OK ]
# chkconfig iscsid on # chkconfig iscsi on
现在iSCSI服务已经启动,下面使用iscsiadm命令行接口发现网络存储服务器上的所有可用目标。这应该在两个 Oracle RAC 节点上执行,以检验配置是否正常工作: [root@racnode1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.2.233 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.crs 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.fra 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.data
2.3.3,手动登录 iSCSI 目标
此时,iSCSI 启动器服务已经启动,每个Oracle RAC节点都能够从网络存储服务器中发现可用目标。下一步是手动登录每个可用目标,这可以使用 iscsiadm 命令行接口完成。这需要在两个 Oracle RAC 节点上运行。注意,我必须指定网络存储服务器的IP地址而非其主机名—我认为必须这么做,因为上述发现使用 IP 地址显示目标。
# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.233 -l # iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.data -p 192.168.2.233 -l # iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.fra -p 192.168.2.233 -l
2.3.4,配置自动登录
在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。如同上面描述的手动登录过程,在两个 Oracle RAC 节点上执行以下命令
# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.233 --op update -n node.startup -v automatic
# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.data -p 192.168.2.233 --op update -n node.startup -v automatic
# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.fra -p 192.168.2.233 --op update -n node.startup -v automatic
2.4,在Oracle RAC节点上配置multipath
在集群中的两个Oracle RAC节点上都要配置multipath。而格式化分区只应在 RAC 集群的节点1上执行,节点2刷新就可以了。 存储的配置只干一件事,就是给我提供一个target。这个target 是在存储上做的映射。客户端通过initiator 去连存储。然后把这个target 映射到自己的下一个可用设备上,如 /dev/sdc。如果只有一个target. 那么没有任何问题。每次initiator连上后都会把这个target 映射到/dev/sdc上。但是如果有多个target,那么这里就出了问题。因为initiator的连接是随机的。可能A先连接,那A就会映射到/dev/sdc上。如果B先连接,B就会映射到/dev/sdc上。这就是问题的所在。 Multipath除了上面提到的,实现LUN设备的持久化,它还有另一个功能,支持多路径轮询(提高I/O负载能力)。即可以通过多个网卡去访问Target设备。这样就提高了I/O的能力。在生产环境中较多使用multipath实现LUN的持久化和多路径访问。
2.4.1,安装multipath
查看相关包:
[root@rac1 ~]# rpm -qa|grep device-mapper device-mapper-multipath-0.4.7-30.el5 device-mapper-event-1.02.32-1.el5 device-mapper-1.02.32-1.el5
如果没有安装,从系统的安装文件里找到这集个包。 安装很简单:
#yum -y install device-mapperdevice-mapper-multipathdevice-mapper-event 说明:
(1)device-mapper-multipath
提供multipathd和multipath等工具和multipath.conf等配置文件。这些工具通过device mapper的ioctr的接口创建和配置multipath设备(调用device-mapper的用户空间库。创建的多路径设备会在/dev/mapper中) (2)device-mapper
device-mapper包括两大部分:内核部分和用户部分。 内核部分由device-mapper核心(multipath.ko)和一些target driver(dm-multipath.ko)构成。dm-mod.ko是实现multipath的基础,dm-multipath其实是dm的一个target驱动。核心完成设备的映射,而target根据映射关系和自身特点具体处理从mappered device 下来的i/o。同时,在核心部分,提供了一个接口,用户通过ioctr可和内核部分通信,以指导内核驱动的行为,比如如何创建mappered device,这些device的属性等。
用户空间部分包括device-mapper这个包。其中包括dmsetup工具和一些帮助创建和配置mappered device的库。这些库主要抽象,封装了与ioctr通信的接口,以便方便创建和配置mappered device。device-mapper-multipath的程序中就需要调用这些库。
2.4.2,配置iscsi多session访问
1个iSCSI Initiator透过多个Session连入同1个iSCSI Target设备,以便利用多网卡或iSCSI HBA启用负载平衡与故障失效切换机制,也可称作Multiple Sessions per Initiator。(这次试验只使用了一条路径,所有一下配置中的eth1接口不用配置)
断开ISCSI登录状态
# iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.233 -u # iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.data -p 192.168.2.233 -u # iscsiadm -m node -T iqn.2006-01.com.openfiler:racdb.fra -p 192.168.2.233 -u
-u 表示logout,-l 表示login。具体可以用man iscsiadm 查看。
新建访问接口文件
# iscsiadm -m iface -I iface0 --op=new # iscsiadm -m iface -I iface1 --op=new
接口文件保存在/var/lib/iscsi/ifaces目录中 # cd /var/lib/iscsi/ifaces/ # cat iface0
# BEGIN RECORD 2.0-871 iface.iscsi_ifacename = iface0 iface.transport_name = tcp # END RECORD
# cat iface1
# BEGIN RECORD 2.0-871 iface.iscsi_ifacename = iface1 iface.transport_name = tcp
# END RECORD
配置iface
# iscsiadm -m iface -I iface0 --op=update -n iface.net_ifacename -v eth0 # iscsiadm -m iface -I iface1 --op=update -n iface.net_ifacename -v eth1 确认iface配置 # iscsiadm -m iface
default tcp,
搜索ISCSI Target
[root@rac1 ifaces]# iscsiadm -m discovery -t st -p 192.168.2.233 -I iface0 -I iface1 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.crs 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.fra 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.data
建立与Target的连接
[root@rac1 ifaces]# iscsiadm -m node -l
删除target连接 注意事项:
删除失效的iscsi连接:如果因为错误配置等原因创建了iscsi对应,系统不会自动删除,需手动删除。
# iscsiadm -m node
192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.crs 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.fra 192.168.2.233:3260,1 iqn.2006-01.com.openfiler:racdb.data
我们看到上面有二个iscsi对应,加入这个对应已经失效,系统不会自动删除。 删除命令:
#iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:racdb.crs -p 192.168.2.233:3260
查看连接状态
# netstat -anp |grep 3260
2.4.3,配置multipath实现永久target
Multipath的配置文件是:/etc/multipath.conf。该文件中大部分配置是注释掉的,可以将他保存为备用,然后新建一个multipath.conf 文件,编辑新的配置文件。 [root@rac1 etc]# cp multipath.conf multipath.conf.back
黑名单过滤
multipath会把所有设备都加入到黑名单(devnode \),也就是禁止使用。所以,我们首先需要取消该设置,把配置文件修改为类似下面的内容: devnode_blacklist { #devnode \ devnode \
wwid 3600508e000000000dc7200032e08af0b }
这里禁止使用hda,也就是光驱。另外,还使用wwid限制使用本地的sda设备。 使用下面的方法获得共享磁盘的wwid 先要手动挂载iscsi # iscsiadm -m node -l
当在节点上用fdisk -l 命令能查看到共享磁盘后,执行 #multipath -ll
前面一段就是对应的共享磁盘的wwid号。
编辑默认规则
不同的device-mapper-multipath或操作系统发行版,其默认的规则都有点不同,以红旗DC Server 5.0 SP2 for x86_64为例,其path_grouping_policy默认为failover,也就是主备的方式。HDS支持多路径负载均衡,EMC CX300等只支持Failover。默认允许friendly_name,否则使用设备的wwid作为持久化名称. 我们修改默认的规则: defaults {
udev_dir /dev
path_grouping_policy multibus failback immediate no_path_retry fail user_friendly_name yes }
配置multipath.conf文件
[root@rac1 ~]#cat /etc/multipath.conf|more
?
multipaths {
multipath {
wwid 14f504e46494c450034594d6462472d534745442d6a714841 alias rac-share
path_grouping_policy multibus path_checker readsector0 path_selector \ failback manual rr_weight priorities no_path_retry 5 } }
一个target 对应一个multipath. 如果有多个target 就写多个multipath 选项。