使用ISCSI & Linux LVM2 搭建Report DB

有一台Report DB,原先一直用本地磁盘,146G * 6 Raid 5。最近终于撑不住了,因为它的Production已经快到700GB

现在的暂行策略是把Report也放到Production上做。

Production经过元旦期间的大调整,现时的表现非常之好。即使是把Report也放上去之后,OLTP Client也没受到影响(主要是把Business搞得很透了,在元旦期间做的业务I/O分离很成功,这对IO Bound系统, 是个大利好)

但是APLeader还是不放心,决定还是要把最重的一部份Report单独拿出来跑。

应对这样的需求,像SAN这种贵重的物品自然是申请不到,何况还在经济危机。所以,充分利用手头资源就是最佳选择。

[@more@]

我最后定的方案就是利用原有Server,采用ISCSILVM作存储方案,来搭建这个Report DB

资源:2U Server 3台,1Core Xeon 8Core DB Server, 2台旧型号2CPU P4 XeonISCSI Storage.

Switch: Cisco 2970, Cisco 3750

下面纪录下这搭建过程中的琐事。

1. Network Bonding

因为方案中用到ISCSI,所以网络的Stable就很重要。没有采用Multipath---我没找到相应的Multipath软件,但应该是有的,因此选择了Bonding

Bonding7Mode, 如果要作到Load Balance & Failover,有mode 0/2/4/5/6 可以选择,其中Mode 0 round-robin是唯一一种对单TCP流也能做到分割的Mode,但实际效果很一般,而且一个网卡断开网络的时侯可能丢包,即使请Network TeamSwitch上做了Etherchannel也不行。

最终的测试结果选择了Mode 4---802.3AD。这种Mode 需要在Switch上做Etherchannel,然后再打开LACP。对于CiscoSwitch,最好选择Active ModeLACP。其工作模式类似于一个网卡收,一个网卡发,这个特性从IfconfigRX/TX也能看出来,并且一个网卡断开后表现很稳固,没有丢包。

期间有个龌龊事:DB serverIntel Pro1000, Storage ServerBroadcom, Broadcom的网卡可以ifup/ifdown,但Pro1000 ifdown了后再也起不来(未作bonding前可以)…

2. ISCSI

中间又发生了件龌龊事:ietd.conf的一堆注释中藏了2个安全选项,搞得我的Client死活找不到ISCSI存储这个浪费了我一小时的时间。

使用的是Enterprise ISCSI Target 0.4.16版。

3. LVM

RHEL4 自带的LVM2。最终我建立了4VG,把本地的PVISCSIPV分开了。

开始我担心以后ISCSI设备多了,/dev/下的sdx编号会乱掉,所以用UDEV自定了RULES,结果发现做成VG后,LVM还是只用/dev/的东西,忽视掉了Symbol link。不过又想到LVMUUID去认Device的话,即使乱掉,也应该不影响LVM之上的Filesystem才对。

结果现在关机变得比较龌龊:LVM似乎是在Kernel中,搞不好起来得比ISCSI要早,而且为了防备ISCSI起不来的情况,/etc/fstab 自动mount是不敢用了。所以现在准备了mount/umount shell。关机之前需要先关Oracle, umount mount-point,然后inactive LV on ISCSI,最后service iscsi stop

4. 系统的最终表现

我曾经很期待Bonding之后的千兆传输吞吐量,结果即使在最有利的Mode 0 RR模式下,单线程SCP只有37MB/S左右。Mode 4相比Mode 0的差异也很小。不过在多个SCP的测试下,还是比单网卡要强大的。我相信这有助于提高ISCSI所提供的IOPS

Storage ServerHDDSCSI RPM15K 146GB,理论写入能力在100M/S之上,这个37MB的瓶颈显然在网络,我考虑下来,最大的可能就是MTU,因为Cisco2970的内部传输高达16G,而且为了避免2Switch之间带宽的限制,2Server接在了一台Switch上。

目前我们的网络标准MTU=1500,那差不多写一个8KBlock 需要6Frames.

做成LV后(3ISCSI PV组成了1Striped LV)写入速度在70~73M/S, 此时系统IOWAIT高达50%,我看了下,LV接受的IOPS每秒18000,但3PVIOPS每个到210就是峰值了。

读取:

Select count(*) from Table A(about 4.5亿rows) 来看

远端的ISCSI TargetHDDIO能力表现:IOPS 大约230多,到顶,但Throughput只有10MB多些,我觉得是TCP/IPframe限制使得IO Request fragment. 如果能启用Jumbo Frame的话,应该能好不少。

LVIOPS 大约等于3PVIOPS的和的一半,这令我比较诧异,是LV Stripe天生使然还是我Stripe Depth设定太差?我的Stripe Size128KB

此时ISCSI上的LVsvctm 平均是3.x, 不算很好。

测算下来,ISCSI LV stripe=3 的性能大约相当于Local Disk LV strip=340%左右。

对于不太要求即时性的Report DB而言,还算凑合,毕竟盘多了。

如何再提高ISCSI的能力,大概有这些方法:专用HBAMultipathJumbo Frame

专用HBA对目前来说不太可能,Multipath & Jumbo Frame 就原理来看应该作用会比较大。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10856805/viewspace-1016353/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10856805/viewspace-1016353/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux搭建iSCSI服务器,需要进行以下步骤: 1. 安装iSCSI软件包:在Linux系统上安装iSCSI软件包,例如open-iscsiiscsi-target。 2. 配置iSCSI Target:使用iscsi-target软件包创建iSCSI Target,配置iSCSI Target的名称、IP地址、端口等信息。 3. 创建iSCSI LUN:使用iscsi-target软件包创建iSCSI LUN(逻辑单元),并将其映射到物理存储设备上。 4. 配置iSCSI Initiator:在客户端上安装iSCSI Initiator软件包,并配置iSCSI Initiator的名称、IP地址、端口等信息。 5. 连接iSCSI Target:在客户端上使用iSCSI Initiator连接iSCSI Target,并将iSCSI LUN映射到客户端上。 6. 测试iSCSI连接:使用客户端上的工具测试iSCSI连接是否正常,例如使用dd命令在iSCSI LUN上创建文件。 以上是在Linux搭建iSCSI服务器的基本步骤,具体操作可以参考相关文档或教程。 ### 回答2: 先介绍一下iSCSI的基本概念吧:iSCSI是一种存储协议,它是一种基于网络的存储协议,通过网络将远程存储设备映射到本地主机上,使得本地主机可以像使用本地硬盘一样使用远程存储设备。iSCSI协议在网络存储领域应用广泛,特别是在虚拟化环境下,iSCSI存储是实现共享存储的重要方式之一。 搭建iSCSI服务器需要准备两个方面的工作,第一是准备一个可用的Linux服务器,第二是安装和配置iSCSI软件。 一、准备Linux服务器 1. 首先要安装Linux系统,这里我们以CentOS系统为例; 2. 确认服务器硬件配置符合iSCSI的要求; 3. 安装和配置网络环境; 4. 创建一个LUN(Logical Unit Number)存储单元,这是iSCSI存储的最小单位。 二、安装和配置iSCSI软件 1. 安装iSCSI软件,Linux下主流的iSCSI软件有多种,比如open-iscsi、tgt等,这里我们以open-iscsi为例; 2. 配置iSCSI服务器参数,包括iSCSI服务名称、存储密码等; 3. 创建iSCSI Target,这是iSCSI存储的核心部分,它是定义好的LUN逻辑单元映射到物理存储单元的过程; 4. 配置iSCSI Target的参数,包括存储IP地址、端口等; 5. 配置iSCSI Initiator,这是客户端连接iSCSI Target的过程; 6. 测试iSCSI存储的可用性。 综上,搭建iSCSI服务器并不是很复杂,但是需要较多的Linux操作技能。如果您不熟悉Linux操作,建议参考相关的教程或请专业技术人员操作。 ### 回答3: iSCSI是基于以太网的存储网络协议,可以将存储器虚拟化为IP网络资源。Linux搭建iSCSI服务器可以提供高效、稳定、灵活的存储资源服务,并且可以支持多种操作系统的访问,如Windows、Linux、Unix等。 步骤如下: 1. 安装iSCSI-target软件 Linux上的iSCSI-target软件有多种可选,如SCST、tgt、LIO等。在这里以tgt为例,它是Linux使用最广泛的一个iSCSI-target软件。 在Ubuntu中,可以使用命令sudo apt-get install tgt安装tgt软件包。在CentOS中,可以使用命令yum install scsi-target-utils安装。 2. 配置tgt tgt的配置文件为/etc/tgt/targets.conf,在配置文件中,首先需要定义一个iSCSI Target,如下所示: <target iqn.2019-12.com.example:server.target1> backing-store /dev/sdb # 这里指定了iSCSI Target的存储设备 initiator-address 192.168.0.10 # 指定发起者的IP地址 incominguser user password # 指定iSCSI登录的用户名和密码 </target> 以上配置文件表示定义了一个名称为iqn.2019-12.com.example:server.target1的iSCSI Target,使用/dev/sdb设备作为存储设备,指定发起者IP地址为192.168.0.10。同时定义了一个iSCSI登录的用户名和密码。 3. 启动tgt服务 在tgt服务配置好后,需要使用命令systemctl start tgt启动tgt服务,使之生效。同时可以使用命令systemctl enable tgt设置开机启动服务。 4. 配置发起者 在Windows中,可以使用Microsoft iSCSI Initiator软件来作为iSCSI客户端进行连接。在Linux中,可以使用open-iscsi软件包来配置iSCSI客户端。 在Ubuntu中,可以使用命令sudo apt-get install open-iscsi安装open-iscsi软件包,在CentOS中,可以使用命令yum install iscsi-initiator-utils安装。 在配置iSCSI Initiator时,需要指定以下参数: - 目标iSCSI Target的名称或IP地址 - 登录iSCSI Target时需要用到的用户名和密码 - iSCSI Target的LUN ID(逻辑单元号),表示iSCSI Target中的哪个存储设备 对于open-iscsi,在Ubuntu中配置文件为/etc/iscsi/initiatorname.iscsi,在CentOS中为/etc/iscsi/initiatorname.iscsi,在配置文件中定义以下配置项: InitiatorName=iqn.2020-01.com.example:client # 定义iSCSI Initiator的名称 NodeStartUp=automatic # 设置开机启动 在配置好iSCSI Initiator后,可以使用命令iscsiadm -m discovery -P1来发现iSCSI Target。使用命令iscsiadm -m node -l可以登录iSCSI Target,并使用命令lsblk来查看iSCSI Target中的存储设备。 总结 搭建Linux iSCSI服务器并不复杂,需要操作者掌握基本的Linux系统操作和熟悉iSCSI的相关知识。通过一个简单的例子,我们可以了解到如何安装iSCSI-target软件、配置tgt,并使用iSCSI Initiator来连接iSCSI Target。同时,还需注意一些安全和性能的问题,如防火墙设置、安全登录、并发连接等,以保障服务的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值