设为首页 收藏本站
查看: 1596|回复: 0

[经验分享] iSCSI 多路径实现 KVM 高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-10 14:08:39 | 显示全部楼层 |阅读模式
iSCSI 多路径实现 KVM 高可用
  本文我们将以 Linux 平台为例,分别使用两台 Linux 主机来运行 iSCSI 目标和 iSCSI 启动器,然后在其中一台运行 iSCSI 启动器的主机上运行 KVM 虚拟机,两台主机之间存在多个网络连接,以此来实现提高 KVM 虚拟机的可用性。
回页首

配置 iSCSI(target 和 initiator)
  iSCSI (Internet Small Computer System Interface), 即 Internet 小型计算机系统接口,它是一种基于 TCP/IP 的协议。通过它可以在 IP 网络传送 SCSI 命令和数据,实现建立和管理网络存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。
  iSCSI 协议定义了在 TCP/IP 网络发送、接收数据块级别的存储数据的规则和方法。发送端将 SCSI 命令和数据封装到 TCP/IP 包中通过网络转发,接收端收到 TCP/IP 包之后,将其还原为 SCSI 命令和数据并执行,完成之后将返回的 SCSI 命令和数据再封装到 TCP/IP 包中再传送回发送端。而整个过程在用户看来,使用远端的存储设备就如同访问本地 SCSI 设备一样简单。
  其流程如下图:

图 0. iSCSI 流程

DSC0000.gif   iSCSI target, 即 iSCSI 目标,它是 iSCSI 网络的服务器组件,通常是一个存储设备,用于包含所需的数据并回应来自 iSCSI 启动器的请求。例如 IBM Storwize V7000 支持 iSCSI 外接主机通道,那么它就是个 iSCSI 目标。
  iSCSI initiator, 即 iSCSI 启动器,从本质上说,iSCSI 启动器是一个客户端设备,用于将请求连接并启动到服务器(iSCSI 目标)。需要注意的是,iSCSI 启动器可以基于硬件实现,比如 iSCSI HBA 卡;同时它也可以基于软件实现,而软件 iSCSI 启动器适用于大部分主流操作系统平台。
  前期环境准备情况如下:我们现有两台 Linux 主机,一台主机名为 neptune,将用来作为 iSCSI 目标;另台主机名为 uranus,将作为 iSCSI 启动器。它们安装的发行版本都为 Redhat 5.5,具体操作系统版本信息如下:

[iyunv@neptune ~]# lsb_release -a
LSB Version::core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:
graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID:  RedHatEnterpriseServer
Description:  Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Release:  5.5
Codename:  Tikanga
[iyunv@uranus ~]# lsb_release -a
LSB Version:  :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:
graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID:  RedHatEnterpriseServer
Description:  Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Release:  5.5
Codename:  Tikanga
  在 neptune 主机上安装 iSCSI 目标,其具体版本号为 scsi-target-utils-0.0-6.20091205snap.el5_4.1。
  [iyunv@neptune ~]# yum install scsi-target-utils
  配置主机上的本地磁盘 sdb 为存储设备,需要注意的是此处直接使用 sdb 裸设备,在这之前并不需要对其进行格式化:

[iyunv@neptune tgt]# vi /etc/tgt/targets.conf
<target iqn.2012-09.com.ibm:neptune.target>
backing-store /dev/sdb      # Becomes LUN 1
</target>
  启动 iSCSI 目标服务:

[iyunv@neptune tgt]# /etc/init.d/tgtd start
Starting SCSI target daemon: Starting target framework daemon
  在 uranus 主机上安装 iSCSI 启动器,其具体版本号为 iscsi-initiator-utils-6.2.0.871-0.16.el5。

[iyunv@uranus ~]# yum install iscsi-initiator-utils
  启动 iSCSI 启动器服务:

[iyunv@uranus ~]# /etc/init.d/iscsi start
iscsid (pid  6112) is running...                          [  OK  ]
[iyunv@uranus ~]# /etc/init.d/iscsid start
Starting iSCSI daemon:                                    [  OK  ]
[  OK  ]
  在配置使用 iSCSI 目标和启动器之前,我们先来了解下 iscsiadm 命令。其 iscsiadm 是基于命令行的 iSCSI 管理工具,提供了对 iSCSI 目标节点、会话、连接以及发现记录的操作。
  其常用的参数有:

iscsiadm
-m, 同 --mode, 其选项有 discovery, node, fw(启动&#20540;), host, iface(iSCSI 接口)和 session。
-I,同 --interface, 表示接口。
-o, 同 --op, 可实现对数据库的操作,其选项有 new, delete, update 和 show。
-n, 同 --name, 指定其数据记录里的名字。
-t, 同 --type, 其选项有 sendtargets(st), fw 和 isns, 仅在 -m 模式为 discovery 时有效。
-p, 同 --portal, 指定其目标主机的 IP 地址和端口,默认端口为 3260。
-L, 同 --loginall,其选项有 all,manual 和 automatic,指定其登录会话时的类型。
-T, 同 --targetname,表示其目标名字。
-v, 同 --value,通常在 --op=update 时指定其&#20540;。
  更多详细参数的说明可查看 /usr/share/doc/iscsi-initiator-utils-6.2.0.871/README, 或者通过命令 man iscsiadm。
  在 uranus 主机上创建 iSCSI 多路径接口:

[iyunv@uranus ~]# iscsiadm -m iface -I ibr0 --op=new
New interface ibr0 added
[iyunv@uranus ~]# iscsiadm -m iface -I ieth1 --op=new
New interface ieth1 added
  更新刚创建多路径接口的配置,使它们指向主机真实的网络接口:

[iyunv@uranus ~]#  iscsiadm -m iface -I ibr0 --op=update -n iface.net_ifacename -v br0
ibr0 updated.
[iyunv@uranus ~]#  iscsiadm -m iface -I ieth1 --op=update -n iface.net_ifacename -v eth1
ieth1 updated.
  查看接口配置文件,确认其使用正确的网络适配器:

[iyunv@uranus ~]# cat /var/lib/iscsi/ifaces/ibr0
# BEGIN RECORD 2.0-871
iface.iscsi_ifacename = ibr0
iface.net_ifacename = br0
iface.transport_name = tcp
# END RECORD
[iyunv@uranus ~]# cat /var/lib/iscsi/ifaces/ieth1
# BEGIN RECORD 2.0-871
iface.iscsi_ifacename = ieth1
iface.net_ifacename = eth1
iface.transport_name = tcp
# END RECORD
  查看创建的 iSCSI 多路径接口的状态:

[iyunv@uranus ~]# iscsiadm -m iface
default tcp,<empty>,<empty>,<empty>,<empty>
iser iser,<empty>,<empty>,<empty>,<empty>
ieth1 tcp,<empty>,<empty>,eth1,<empty>
bnx2i.00:1a:64:09:02:49 bnx2i,00:1a:64:09:02:49,<empty>,<empty>,<empty>
bnx2i.00:1a:64:09:02:4b bnx2i,00:1a:64:09:02:4b,<empty>,<empty>,<empty>
ibr0 tcp,<empty>,<empty>,br0,<empty>
bnx2i.00:00:00:00:00:00 bnx2i,00:00:00:00:00:00,<empty>,<empty>,<empty>
  之前我们在运行 iSCSI 目标的主机 neptune 上配置了两个网络连接,查看其 IP 地址:

[iyunv@neptune ~]# ifconfig
br0       Link encap:Ethernet  HWaddr 00:1A:64:09:69:98
inet addr:9.186.12.58  Bcast:9.186.12.255  Mask:255.255.255.0
inet6 addr: fec0::b:21a:64ff:fe09:6998/64 Scope:Site
inet6 addr: 2002:977:2c4f:b:21a:64ff:fe09:6998/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2008:21a:64ff:fe09:6998/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2009:21a:64ff:fe09:6998/64 Scope:Global
inet6 addr: fe80::21a:64ff:fe09:6998/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:1026229 errors:0 dropped:0 overruns:0 frame:0
TX packets:4449 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:113665823 (108.4 MiB)  TX bytes:317411 (309.9 KiB)
eth0      Link encap:Ethernet  HWaddr 00:1A:64:09:69:98
inet6 addr: fe80::21a:64ff:fe09:6998/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:1105156 errors:0 dropped:0 overruns:0 frame:0
TX packets:6327 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:139306655 (132.8 MiB)  TX bytes:964011 (941.4 KiB)
Interrupt:122 Memory:ce000000-ce012800
eth1      Link encap:Ethernet  HWaddr 00:1A:64:09:69:9A
inet addr:9.186.12.59  Bcast:9.186.12.255  Mask:255.255.255.0
inet6 addr: fec0::b:21a:64ff:fe09:699a/64 Scope:Site
inet6 addr: 2002:977:2c4f:b:21a:64ff:fe09:699a/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2008:21a:64ff:fe09:699a/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2009:21a:64ff:fe09:699a/64 Scope:Global
inet6 addr: fe80::21a:64ff:fe09:699a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:827034 errors:0 dropped:0 overruns:0 frame:0
TX packets:142604 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:110709377 (105.5 MiB)  TX bytes:45494197 (43.3 MiB)
Interrupt:169 Memory:ca000000-ca012800
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:185774 errors:0 dropped:0 overruns:0 frame:0
TX packets:185774 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:112270981 (107.0 MiB)  TX bytes:112270981 (107.0 MiB)
  在主机 unraus 上通过主机 neptune 的其中一个网络地址来查询目标存储的配置信息:

[iyunv@uranus ~]# iscsiadm -m discovery -t st -p 9.186.12.58 -I ibr0 -I ieth1
9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
  通过主机 neptune 上另一个网络来查询目标存储的配置信息:

[iyunv@uranus ~]# iscsiadm -m discovery -t st -p 9.186.12.59 -I ibr0 -I ieth1
9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
  查询其发现的所有目标节点:

[iyunv@uranus ~]# iscsiadm -m node
9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
  登录所有的目标节点:

[iyunv@uranus ~]# iscsiadm -m node --loginall=all
Logging in to [iface: ieth1, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.59,3260]
Logging in to [iface: ibr0, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.59,3260]
Logging in to [iface: ieth1, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.58,3260]
Logging in to [iface: ibr0, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.58,3260]
Login to [iface: ieth1, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.59,3260]: successful
Login to [iface: ibr0, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.59,3260]: successful
Login to [iface: ieth1, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.58,3260]: successful
Login to [iface: ibr0, target: iqn.2012-09.com.ibm:neptune.target,
portal: 9.186.12.58,3260]: successful
查询已登录目标节点的会话:
[iyunv@uranus ~]# iscsiadm -m session
tcp: [3] 9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
tcp: [4] 9.186.12.59:3260,1 iqn.2012-09.com.ibm:neptune.target
tcp: [5] 9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
tcp: [6] 9.186.12.58:3260,1 iqn.2012-09.com.ibm:neptune.target
  这时主机 uranus 上可检测到通过 iSCSI 多路径连接的存储设备,我们注意到系统上有多个磁盘的状态和容量都是一样的,其实它们是指向同一个 iSCSI 目标存储,只是访问的路径不同而已。

[iyunv@uranus ~]# fdisk -l
Disk /dev/sda: 36.2 GB, 36269195264 bytes
64 heads, 32 sectors/track, 34589 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         128      131056   83  Linux
/dev/sda2             129        4224     4194304   82  Linux swap / Solaris
/dev/sda3            4225       34589    31093760   83  Linux
Disk /dev/sdb: 73.2 GB, 73283928064 bytes
255 heads, 63 sectors/track, 8909 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/dm-0: 73.2 GB, 73283928064 bytes
255 heads, 63 sectors/track, 8909 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/sdd: 73.2 GB, 73294413824 bytes
255 heads, 63 sectors/track, 8910 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 73.2 GB, 73294413824 bytes
255 heads, 63 sectors/track, 8910 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sde doesn't contain a valid partition table
Disk /dev/sdf: 73.2 GB, 73294413824 bytes
255 heads, 63 sectors/track, 8910 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdf doesn't contain a valid partition table
Disk /dev/sdg: 73.2 GB, 73294413824 bytes
255 heads, 63 sectors/track, 8910 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdg doesn't contain a valid partition table
Disk /dev/dm-1: 73.2 GB, 73294413824 bytes
255 heads, 63 sectors/track, 8910 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/dm-1 doesn't contain a valid partition table
回页首

iSCSI initiator 主机上安装 Multipath
  为了主机可以使用 iSCSI 多路径访问存储设备,我们需要在主机上安装多路径设备映射器 (DM-Multipath)。多路径设备映射器可以实现主机节点和后端存储之间的多个 I/O 路径配置为一个单一逻辑设备,从而可以提供链路冗余和提高性能。主机通过访问包含多个 I/O 路径的逻辑设备,就可以有效提高后端存储系统的可靠性。
  在主机 uranus 上安装 multipath,其具体版本号为 device-mapper-multipath-0.4.7-34.el5。

[iyunv@uranus ~]# yum install device-mapper-multipath
  启动 multipath 服务:

[iyunv@uranus ~]# /etc/init.d/multipathd start
Starting multipathd daemon:                                [  OK  ]
  查询多路径设备,其包含四条路径:

[iyunv@uranus etc]# multipath -ll
mpath29 (1IET_00010001) dm-1 IET,VIRTUAL-DISK
[size=68G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 10:0:0:1 sde 8:64  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 11:0:0:1 sdd 8:48  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 12:0:0:1 sdf 8:80  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 13:0:0:1 sdg 8:96  [active][ready]
  编辑 multipath 配置文件来自定义多路径设备别名,使得易于识别管理:

[iyunv@uranus etc]# vi /etc/multipath.conf
multipaths {
multipath {
wwid                    1IET_00010001
alias                   kvm
}
}
  重新启动 multipath 服务:

[iyunv@uranus etc]# /etc/init.d/multipathd restart
Stopping multipathd daemon:                                [  OK  ]
Starting multipathd daemon:                                [  OK  ]
  现在多路径设备别名已更新:

[iyunv@uranus etc]# multipath -ll
kvm (1IET_00010001) dm-1 IET,VIRTUAL-DISK
[size=68G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 10:0:0:1 sde 8:64  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 11:0:0:1 sdd 8:48  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 12:0:0:1 sdf 8:80  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 13:0:0:1 sdg 8:96  [active][ready]
回页首

iSCSI initiator 主机上安装 KVM
  KVM 全称 Kernel-based Virtual Machine,是 x86 硬件平台上基于 Linux 内核的全虚拟化应用解决方案。它需要 CPU 硬件支持,如 Intel VT 技术或者 AMD V 技术。
  在主机 uranus 上安装 KVM,其包含的版本分别为 kvm-83-164.el5、python-virtinst-0.400.3-9.el5、libvirt-python-0.6.3-33.el5、virt-manager-0.6.1-12.el5、virt-viewer-0.0.2-3.el5。

[iyunv@uranus ~]# yum install kvm python-virtinst libvirt libvirt-python \
virt-manager virt-viewer
  为了让虚拟机可以使用桥接网络,我们则需要编辑对应的网络配置文件,内容类&#20284;如下。

[iyunv@uranus network-scripts]# vi ifcfg-eth0
# Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet
DEVICE=eth0
BRIDGE=br0
HWADDR=00:1a:64:09:02:48
ONBOOT=yes
[iyunv@uranus network-scripts]# vi ifcfg-br0
# Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet
DEVICE=br0
BOOTPROTO=static
BROADCAST=9.186.12.255
HWADDR=00:1a:64:09:02:48
IPADDR=9.186.12.56
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.0
NETWORK=9.186.12.0
ONBOOT=yes
TYPE=Bridge
  重起网络服务后桥接网络已启用,这样虚拟机就可以使用和主机同一个网段的 IP 地址。

[iyunv@uranus ~]# ifconfig
br0       Link encap:Ethernet  HWaddr 00:1A:64:09:02:48
inet addr:9.186.12.56  Bcast:9.186.12.255  Mask:255.255.255.0
inet6 addr: fec0::b:21a:64ff:fe09:248/64 Scope:Site
inet6 addr: 2002:977:2c4f:b:21a:64ff:fe09:248/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2008:21a:64ff:fe09:248/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2009:21a:64ff:fe09:248/64 Scope:Global
inet6 addr: fe80::21a:64ff:fe09:248/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:914176 errors:0 dropped:0 overruns:0 frame:0
TX packets:80832 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:104945835 (100.0 MiB)  TX bytes:7270936 (6.9 MiB)
eth0      Link encap:Ethernet  HWaddr 00:1A:64:09:02:48
inet6 addr: fe80::21a:64ff:fe09:248/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:985686 errors:0 dropped:0 overruns:0 frame:0
TX packets:80816 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:127906207 (121.9 MiB)  TX bytes:7595400 (7.2 MiB)
Interrupt:122 Memory:ce000000-ce012800
eth1      Link encap:Ethernet  HWaddr 00:1A:64:09:02:4A
inet addr:9.186.12.55  Bcast:9.186.12.255  Mask:255.255.255.0
inet6 addr: fec0::b:21a:64ff:fe09:24a/64 Scope:Site
inet6 addr: 2002:977:2c4f:b:21a:64ff:fe09:24a/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2008:21a:64ff:fe09:24a/64 Scope:Global
inet6 addr: 2002:97b:c7ab:2009:21a:64ff:fe09:24a/64 Scope:Global
inet6 addr: fe80::21a:64ff:fe09:24a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:679630 errors:0 dropped:0 overruns:0 frame:0
TX packets:116675 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:95098446 (90.6 MiB)  TX bytes:28497709 (27.1 MiB)
Interrupt:169 Memory:ca000000-ca012800
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:2692997 errors:0 dropped:0 overruns:0 frame:0
TX packets:2692997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3617264060 (3.3 GiB)  TX bytes:3617264060 (3.3 GiB)
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)
回页首

使用 iSCSI 多路径存储设备安装 KVM 虚拟机
  通过虚拟机管理工具 virt-manager 我们开始创建一个新的 KVM 虚拟机,选择刚更新别名的多路径设备作为其系统磁盘。

图 1. 选用 mpath

DSC0001.gif   选择使用桥接网络为其网络设备。

图 2. Bridged network

DSC0002.gif   确认后开始安装系统。

图 3. Summary

DSC0003.gif   为虚拟机配置和主机同属网段的 IP 地址。

图 4. IP address

DSC0004.gif   开始安装系统。

图 5. 安装系统

DSC0005.gif
回页首

中断部分 iSCSI 路径测试 KVM 虚拟机可用性
  在虚拟机系统安装的过程中,我们断开主机 uranus 上网络适配器 eth1 的网络连接,其所配置的 IP 地址为 9.186.12.55,查询其 iSCSI 主机信息:

[iyunv@uranus iscsi_host]# iscsiadm -m host
bnx2i: [8] <empty>,[00:1a:64:09:02:4b],eth1 <empty>
bnx2i: [9] <empty>,[00:1a:64:09:02:49],eth0 <empty>
tcp: [10] 9.186.12.55,[<empty>],eth1 <empty>
tcp: [11] 9.186.12.56,[<empty>],br0 <empty>
tcp: [12] 9.186.12.55,[<empty>],eth1 <empty>
  tcp: [13] 9.186.12.56,[<empty>],br0 <empty>
  其主机信息也可以通过如下方法查询获得:

[iyunv@uranus ~]# cat /sys/class/iscsi_host/host10/ipaddress
9.186.12.55
[iyunv@uranus ~]# cat /sys/class/iscsi_host/host12/ipaddress
9.186.12.55
  据此可以推断主机 10 和 12 所连接的两条路径会受影响。
  查询其链路情况确认其中主机 10 和 12 所连接的两条路径已经被中断。此处需要注意的是,输出结果中的 10:0:0:1 对应的是 Host:Chanel:Id:Lun,其首位代表主机 id。

[iyunv@uranus ~]# multipath -ll
sde: checker msg is &quot;readsector0 checker reports path is down&quot;
sdf: checker msg is &quot;readsector0 checker reports path is down&quot;
kvm (1IET_00010001) dm-1 IET,VIRTUAL-DISK
[size=68G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=0][enabled]
\_ 10:0:0:1 sde 8:64  [failed][faulty]
\_ round-robin 0 [prio=1][active]
\_ 11:0:0:1 sdd 8:48  [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 12:0:0:1 sdf 8:80  [failed][faulty]
\_ round-robin 0 [prio=1][enabled]
\_ 13:0:0:1 sdg 8:96  [active][ready]
  此时系统继续正常安装,不受影响。

图 6. 中断路径

DSC0006.gif   重新恢复刚断开的网络连接后,其多路径链接即恢复正常。

[iyunv@uranus ~]# multipath -ll
kvm (1IET_00010001) dm-1 IET,VIRTUAL-DISK
[size=68G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=1][enabled]
\_ 10:0:0:1 sde 8:64  [active][ready]
\_ round-robin 0 [prio=1][active]
\_ 11:0:0:1 sdd 8:48  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 12:0:0:1 sdf 8:80  [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 13:0:0:1 sdg 8:96  [active][ready]
  此时系统继续正常安装。

图 7. 恢复路径

DSC0007.gif   直至系统安装结束。

图 8. 安装完成

DSC0008.gif   虚拟机系统正常启动后,在 ping 它的过程中,断开主机 neptune 上的其一网络连接后等待一段时间后重新恢复其连接。我们发现期间没有丢包,且响应时间稳定,可以说系统不受影响。
  图 9. Ping 测试
  登录虚拟机终端,前后分别测试其在正常多路径和中断一半 iSCSI 路径时系统 IO:

[iyunv@kvm ~]# dd if=/dev/zero of=file1 bs=64k count=16k conv=fsync
16384&#43;0 records in
16384&#43;0 records out
1073741824 bytes (1.1 GB) copied, 96.6503 seconds, 11.1 MB/s
[iyunv@kvm ~]# dd if=/dev/zero of=file2 bs=64k count=16k conv=fsync
16384&#43;0 records in
16384&#43;0 records out
1073741824 bytes (1.1 GB) copied, 99.5537 seconds, 10.8 MB/s
  可注意到前后 I/O 差异很小。
  类&#20284;地,前后分别测试其在正常多路径和中断一半 iSCSI 路径时系统读写性能:

[iyunv@kvm ~]# time dd if=/dev/vda of=file3 bs=8k count=128k
131072&#43;0 records in
131072&#43;0 records out
1073741824 bytes (1.1 GB) copied, 193.559 seconds, 5.5 MB/s
real    3m13.582s
user    0m0.100s
sys     0m3.440s
[iyunv@kvm ~]# time dd if=/dev/vda of=file4 bs=8k count=128k
131072&#43;0 records in
131072&#43;0 records out
1073741824 bytes (1.1 GB) copied, 191.428 seconds, 5.6 MB/s
real    3m11.797s
user    0m0.090s
sys     0m3.562s
  同样,前后性能差异也很小。
  另外当系统如仅剩一条 iSCSI 路径则磁盘 IO 吞吐量肯定会下降,此处不再做进一步测试说明。
回页首

总结
  本文介绍了如何使用 iSCSI 多路径及测试中断部分路径后系统的稳定性和 IO 性能,证实了使用 iSCSI 多路径可以实现提高 KVM 虚拟机的可用性。但仅只是证实了其方案的可行性,不代表可以直接应用于生产环境。如需应用生产环境则需要进一步更严谨的系统测试来排除潜在风险,否则生产系统出现问题,本人对此不承担任何责任。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125162-1-1.html 上篇帖子: RH442 下篇帖子: KVM系统调用说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表