资源描述
Linux集群服务的安装部署
第12章 Linux集群服务的安装部署
集群是企业应用在IT环境部署中常用的一项重要技术,对于广大系统管理员而言,集群相对单机应用更难掌握,同时参考资料相对较少,实验环境也比较复杂。
本书第10章描述了在企业应用中磁盘冗余为系统数据保护带来的众多好处,这实际上反映的就是系统高可用性的概念;结合第11章内容,本章将通过Oracle在Linux中的高可用集群安装部署,以及Apache在Linux下的负载均衡部署来进行实例讲解,深入浅出地阐述集群概念,希望能解决Linux管理员遇到的实际问题。
12.1 集群的优势及分类
集群的定义:"集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来,从而高度紧密地协作以完成计算工作。从某种意义上讲,它可以被看作一台计算机。集群系统中的单个计算机通常称为节点。节点之间通常通过局域网来连接,但也有其他的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。"
在设计或部署集群环境时,除了要求有多台服务器用于实现冗余以外,设备的冗余也十分重要,服务器中的冗余设备可以有效降低单台服务器的宕机几率。它们主要包括:
网卡绑定
磁盘阵列(请参考本书第10章内容)
磁盘多路径绑定
冗余电源
集群通常被划分为4大类:
高可用集群(High Availability,简称HA)
负载均衡集群(Load Balancing)
高性能集群(High Performance Computing,简称HPC)
网格计算(Grid Computing)
缘于企业应用的多样性,我们一般在企业应用中会通过"高可用集群"或"负载均衡集群"来实现集群。这两类集群有较高的易用性和通用性,可用于各种Web服务器、数据库服务器、企业中间件及应用系统,以保障企业核心应用服务的持续运行并提高系统的整体性能。
"高性能集群"及"网格计算"多用于科学计算领域或需要进行持续统计的行业,如航天环境模拟、地震分析、化学分析、气候研究、石油勘探、碰撞模拟、股票分析及电影特效等。
12.2 集群系统规划
在开始讲述集群中的各种实际配置操作之前,我们需要先了解下集群系统的要求、标准及注意事项。行业中常常会看到"5个9(Five Nine)"标准,用于评估一套处于工作运行状态的集群在全年内的可用性表现。一个集群系统全年的可用性指标计算公式为:
系统可用率 = ( 总评估时间 - 总失效时间 ) / 总评估时间
其中:总失效时间 = 计划内停机时间 + 计划外停机时间
最后得出一个计算的百分比值,如99.999%,这里的每一个9都代表了不同的年度"总失效时间":
9
9.
9
9
9
%
35天
4天
8小时
50分钟
5分钟
从上面的"系统可用率"计算公式中我们可以看出,"总评估时间"是一个恒定的值,要提高"系统可用率",最重要的就是减少系统的整体"总失效时间"时间,这就要求系统尽量避免"单点故障"。因为一旦系统要求"总失效时间"在10分钟以内,便意味着当出现问题时,维护人员根本没有时间对系统进行排错,甚至没有时间进行设备的人工更换。因此,集群系统要求对软硬件环境的方方面面做到未雨绸谬,让更多的设备及服务可以在集群策略中实现自动切换,以减少"总失效时间"。在Linux系统中,我们可以采取各方面的技术来提高系统的可用性,如:
网卡绑定:将多个网卡连接到不同的交换机上,并在操作系统中将它们绑定为同一个IP,客户端通过这个IP实现系统访问;当网络中的某个交换机或系统中的某个网卡发生故障时,系统会根据配置策略通过冗余的网卡进行传输。
磁盘多路径绑定:与网卡绑定的功能类似,在规划中服务器通常会通过多个HBA光纤卡连接到磁盘阵列以提高系统磁盘连路的可用性;磁盘多路径绑定,就是将这些HBA卡所连接的相同磁盘存储设备绑定为一个系统存储设备的连接符以供应用程序使用。
冗余电源:除网络及磁盘外,电源是系统中另一个很容易发生"单点故障"的设备,通过在服务器中使用双路电源,并连接两路独立的"市电 (城市供电系统是多路供电的,一般IDC机房都会配有多路供电,以防止因某线路出现供电问题向导致系统瘫痪)"可以达到电源冗余的效果。当然还应该在服务器电源与"市电"之间加入带稳压功能的UPS,以提高电流的稳定性。
12.3 网卡绑定
12.3.1 配置前的准备
以下是服务器中的网卡配置,当中有两个网卡,都是通过DHCP来自动获取IP地址:
1. [root@localhost ~]# ifconfig
2.
3. [root@localhost ~]# cat /etc/sysconfig/network-script/ifcfg-eth0
4. Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
5. DEVICE=eth0
6. BOOTPROTO=dhcp
7. HWADDR=54:52:00:35:f9:a0
8. ONBOOT=yes
9. TYPE=Ethernet
10.
11. [root@localhost ~]# cat /etc/sysconfig/network-script/ifcfg-eth1
12. Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
13. DEVICE=eth1
14. BOOTPROTO=dhcp
15. HWADDR=54:52:00:7a:37:ce
16. ONBOOT=yes
17. TYPE=Ethernet
注意:
当系统中有多个网卡需要进行设置时,建议将网卡的MAC地址与ethX文件中的HWADDR一一对应,否则系统重启后网卡的eth号很可能会发生改变,在设置了网卡绑定的生产系统中,这是非常危险的。
确认系统中已经安装了sysstat包,以便进行bonding测试:
1. [root@localhost ~]# rpm -ivh /mnt/cdrom/
Server/sysstat-7.0.2- 1.el5.x86_64.rpm
2. [root@localhost ~]# rpm -q sysstat
3. sysstat-7.0.2-1.el5
12.3.2 网卡绑定配置
配置驱动模块
修改文件/etc/modprobe.conf,找到:
1. alias eth0 8139cp
2. alias eth1 8139cp
注意:
8139cp为网卡型号。
在此内容后加入:
1. ######## Bonding ##########
2. alias bond0 bonding
3. options bonding max_bonds=1
建立bonding网卡配置
新建文件/etc/sysconfig/network-scripts/ifcfg-bond0,输入以下内容:
1. DEVICE=bond0
2. ONBOOT=yes
3. BOOTPROTO=static
4. IPADDR=192.168.100.21
5. NETMASK=255.255.255.0
6. USERCTL=no
7. BONDING_OPTS="mode=1 miimon=100 primary=eth0"
8. BONDING_OPTS参数解释
此参数用于指定网卡绑定时的属性,以下是对常用参数进行的解释:
miimon参数:指定网卡故障时的切换时间间隔以ms为单位。
primary参数:指定默认的主网卡设备。
mode参数:
0 - 轮询模式,所绑定的网卡会针对访问以轮询算法进行平分。
1 - 高可用模式,运行时只使用一个网卡,其余网卡作为备份,在负载不超过单块网卡带宽或压力时建议使用。
2 - 基于HASH算法的负载均衡模式,网卡的分流按照xmit_hash_policy的TCP协议层设置来进行HASH计算分流,使各种不同处理来源的访问都尽量在同一个网卡上进行处理。
3 - 广播模式,所有被绑定的网卡都将得到相同的数据,一般用于十分特殊的网络需求,如需要对两个互相没有连接的交换机发送相同的数据。
4 - 802.3ab负载均衡模式,要求交换机也支持802.3ab模式,理论上服务器及交换机都支持此模式时,网卡带宽最高可以翻倍(如从1Gbps翻到2Gbps)
5 - 适配器输出负载均衡模式,输出的数据会通过所有被绑定的网卡输出,接收数据时则只选定其中一块网卡。如果正在用于接收数据的网卡发生故障,则由其他网卡接管,要求所用的网卡及网卡驱动可通过ethtool命令得到speed信息。
6 - 适配器输入/输出负载均衡模式,在"模式5"的基础上,在接收数据的同时实现负载均衡,除要求ethtool命令可得到speed信息外,还要求支持对网卡MAC地址的动态修改功能。
xmit_hash_policy参数(此参数对mode参数中的2、4模式有影响):
layer1 - 通过MAC地址进行HASH计算。
计算公式:(MACsrc⊕MACdest)% Nslave
layer3+4 - 通过TCP及UDP端口及其IP地址进行HASH计算。
计算公式:((portsrc⊕portdest) ⊕ (IPsrc⊕IPdest)) % Nslave
注意:
mode参数中的0、2、3、4模式要求交换机支持"ports group"功能并能进行相应的设置,例如在Cisco中要将所连接的端口设为"trunk group"。
选择绑定模式的建议
如果系统流量不超过单个网卡的带宽,请不要选择使用mode 1之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。
建议mode 5、mode 6只在交换机不支持"ports group"的情况下选用。
如果交换机及网卡都确认支持802.3ab,则实现负载均衡时尽量使用mode 4以提高系统性能。
修改被绑定网卡的配置
修改/etc/sysconfig/network-scripts/ifcfg-eth0为:
1. # Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
2. DEVICE=eth0
3. MASTER=bond0
4. SLAVE=yes
5. HWADDR=54:52:00:35:f9:a0
6. ONBOOT=yes
修改/etc/sysconfig/network-scripts/ifcfg-eth1为:
1. # Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
2. DEVICE=eth1
3. MASTER=bond0
4. SLAVE=yes
5. HWADDR=54:52:00:7a:37:ce
6. ONBOOT=yes
启动网卡绑定设备
导入bonding驱动:
1. [root@localhost ~]# modprobe -i bonding max_bonds=1
2. bonding: Warning: either miimon or arp_interval
and arp_ip_target module parameters must be
specified, otherwise bonding will not detect
link failures! see bonding.txt for details.
此时系统会发出一个警告,意思是bonding驱动要求提供miimon参数或arp_inerval参数与arp_ip_target参数的组合,否则系统将无法检测出网卡设备连接是否失效。由于miimon已经在/etc/sysconfig/network-scripts/ifcfg-bond0中设定,所以可以不用理会此警告。
重启网络
1. [root@localhost ~]# /etc/init.d/network restart
2. bonding: Warning: either miimon or arp_interval
and arp_ip_target module parameters must b
e specified, otherwise bonding will not detect
link failures! see bonding.txt for details.
3. [root@localhost ~]# cat network
4. Shutting down interface eth0
[ OK ]
5. Shutting down interface eth1
[ OK ]
6. Shutting down loopback interface:
[ OK ]
7. Bringing up loopback interface:
[ OK ]
8. Bringing up interface bond0:
[ OK ]
网络重启完毕,此时由于/etc/sysconfig/network-scripts/ifcfg-bond0中的设置,miimon参数已经生效。
以上"导入bonding驱动"及"重启网络"的操作也可以通过重新启动操作系统来实现,但对于一些正在生产环境中运行的系统,一般要求进行系统维护时不影响系统的正常运作。通过以上两个操作可以将系统的"总失效时间"降到最低。
如何配置多级网卡绑定设备
在实际环境中,常常需要在多个网卡中进行两两绑定。例如,服务器共有4个网卡,分另为eth0、eth1、eth2、eth3,要求对它们两两绑定成bond0和bond1设备,此时需要对以上设定进行一些修改。
(1) 参考"12.2.2 网卡绑定配置"中的"配置驱动模块"部分内容,将/etc/modprobe.conf修改为:
1. ######## Bonding ##########
2. alias bond0 bonding
3. alias bond1 bonding
4. options bonding max_bonds=2
(2) 参考"12.2.2 网卡绑定配置"中的"建立bonding网卡配置"部分内容,建立bond1的设备配置文件,并相应地修改eth2和eth3的配置,重启网络即可。
12.3.3 网卡绑定效果测试
测试12-1:在mode 1模式且两个网卡都工作正常的情况下进行1GB数据拷贝。
1. [root@localhost~]# sar -n 'DEV'1| grep -E '
IFACE|eth0|eth1|bond0'|head -n -4
2. 07:16:53 PM IFACE rxpck/s txpck/s rxbyt/s
txbyt/s rxcmp/s txcmp/s rxmcst/s
3. 07:16:55 PM eth0 7995.59 4098.53 11983858.
82 274905.88 0.00 0.00 0.00
4. 07:16:55 PM eth1 0.00 0.00 0.00
0.00 0.00 0.00 0.00
5. 07:16:55 PM bond0 7995.59 4098.53 11983858.82
274905.88 0.00 0.00 0.00
测试2:在mode 1模式,断开eth0上的网线时进行1G数据拷贝
1. [root@localhost ~]# sar -n 'DEV' 1|grep -E '
IFACE|eth0|eth1|bond0'|head -n -4
2. 07:16:41 PM IFACE rxpck/s txpck/s rxbyt/s
txbyt/s rxcmp/s txcmp/s rxmcst/s
3. 07:19:43 PM eth0 0.00 0.00 0.00
0.00 0.00 0.00 0.00
4. 07:19:43 PM eth1 7354.87 3770.10
11023542.19 252876.52 0.00 0.00 0.00
5. 07:19:43 PM bond07354.87 3770.10
11023542.19 252876.52 0.00 0.00 0.00
测试3:在mode 0模式,且两个网卡都正常工作的情况下进行1G数据拷贝
1. [root@localhost~]# sar-n 'DEV' 1|grep-E 'IFACE
|eth0|eth1|bond0'|head -n -4
2. 07:23:15 PM IFACE rxpck/s txpck/s rxbyt/s
txbyt/s rxcmp/s txcmp/s rxmcst/s
3. 07:23:16 PM eth0 2994.74 1818.95 4478934.74
129511.58 0.00 0.00 0.00
4. 07:23:16 PM eth1 3117.89 1817.89 4671258.95
129223.16 0.00 0.00 0.00
5. 07:23:16 PM bond06112.63 3636.84 9150193.68
258734.74 0.00 0.00 0.00
12.4 磁盘多路径绑定
12.4.1 配置前的准备
要求服务器上已经有两个HBA卡,并连接到了相同的磁盘。此时使用fidsk -l命令查看磁盘,将会发现有两个空间大小完全相同的磁盘。
1. [root@localhost ~]# fdisk -l
2. ……
3. ……
4. Disk /dev/sdb: 104 MB, 104857600 bytes
5. 4 heads, 50 sectors/track, 1024 cylinders
6. Units = cylinders of 200 * 512 = 102400 bytes
7.
8. Device Boot Start End Blocks Id System
9.
10. Disk /dev/sdc: 6291 MB, 6291456000 bytes
11. 194 heads, 62 sectors/track, 1021 cylinders
12. Units = cylinders of 12028 * 512 = 6158336 bytes
13.
14. Disk /dev/sdc doesn't contain a valid partition table
15.
16. Disk /dev/sdd: 6291 MB, 6291456000 bytes
17. 194 heads, 62 sectors/track, 1021 cylinders
18. Units = cylinders of 12028 * 512 = 6158336 bytes
19.
20. Disk /dev/sdd doesn't contain a valid partition table
21.
22. 通过scsi_id命令可确认sdc和sdd是同一个磁盘:
23.
24. [root@ localhost ~]# /sbin/scsi_id -g -u -s /block/sdb
25. 0QEMU_QEMU_HARDDISK_scsi0-hd1
26. [root@ localhost ~]# /sbin/scsi_id -g -u -s /block/sdc
27. 14945540000000000000000000100000005004d000000d00f
28. [root@ localhost ~]# /sbin/scsi_id -g -u -s /block/sdd
29. 14945540000000000000000000100000005004d000000d00f
确认系统已经安装了multipath软件包:
1. [root@localhost ~]# rpm -ivh /mnt/cdrom/Server/
device-mapper-multipath-0.4.7-17.el5.x86_64.rpm
2. [root@localhost ~]# rpm -q device-mapper-
multipath device-mapper-multipath -0.4.7-17.el5
12.4.2 磁盘多路径绑定配置
修改配置文件/etc/multipath.conf
找到以下内容并将其注释:
1. #blacklist {
2. # devnode "*"
3. #}
这是设备的黑名单列表,系统中可能存在多个可进行绑定的磁盘设备,此列表可以对那些不要求绑定的设备进行过滤,以避免使用中的误操作。配置文件在默认情况下会过滤所有设备,因此系统不会为任何设备匹配绑定链接,将这个部分注释掉之后,multipath会为系统中除本地磁盘以外的所有磁盘设备匹配绑定链接。
启动多路径绑定
1. [root@localhost ~]# /etc/init.d/multipathd start
2. [root@localhost ~]# multipath -ll
3. 14945540000000000000000000100000005004d000000d00f
dm-3 IET,VIRTUAL-DISK
4. [size=5.9G][features=0][hwhandler=0]
5. \_ round-robin 0 [prio=1][active]
6. \_ 2:0:0:0 sdc 8:32 [active][ready]
7. \_ round-robin 0 [prio=1][enabled]
8. \_ 1:0:0:0 sdd 8:48 [active][ready]
9. 0QEMU_QEMU_HARDDISK_scsi0-hd1dm-2 QEMU,QEMU HARDDISK
10. [size=100M][features=0][hwhandler=0]
11. \_ round-robin 0 [prio=1][active]
12. \_ 0:0:1:0 sdb 8:16 [active][ready]
此时系统发现了两组磁盘,一组的wwid是0QEMU_QEMU_HARDDISK_scsi0-hd1,绑定了服务器中名为sdb的USB设备;另一组的wwid是14945540000000000000000000100000 005004d000000d00f,绑定了服务器通过两路HBA或iSCSI连接的相同磁盘设备,设备名分另为sdc和sdd。在系统运行过程中,为USB设备配置多路径绑定很明显是没有必要的,通过/etc/multipath.conf中的blacklist列表可以过滤此设备。
再次修改/etc/multipath.conf,找到blacklist项解开注释,并修改为:
1. blacklist {
2. wwid 0QEMU_QEMU_HARDDISK_scsi0-hd1
3. }
清空所有磁盘绑定设备:
1. [root@localhost ~]# multipath -F
重启多路径绑定服务,并使此服务自动启动:
1. [root@localhost ~]# /etc/init.d/multipathd restart
2. [root@localhost ~]# chkconfig multipathd on
3. [root@localhost ~]# multipath -ll
4. 14945540000000000000000000100000005004d000000d00f dm-2 IET,VIRTUAL-DISK
5. [size=5.9G][features=0][hwhandler=0]
6. \_ round-robin 0 [prio=1][active]
7. \_ 2:0:0:0 sdc 8:32 [active][ready]
8. \_ round-robin 0 [prio=1][enabled]
9. \_ 1:0:0:0 sdd 8:48 [active][ready]
挂载多路径设备:
1. [root@localhost ~]# mkfs.ext3 /dev/dm-2
2. [root@localhost ~]# mkdir /mnt/multipath
3. [root@localhost ~]# mount /dev/dm-2 /mnt/multipath
如果需要启动自动挂载,请在/etc/fstab中添加相应的挂载项。
multipath.conf配置文件详解(以下内容可以不作修改)
除blacklist外,此配置文件中还有一个比较重要的配置项--defaults,用于定义多路径绑定的运行策略。
1. defaults {
2. udev_dir /dev #设备所在的位置
3. polling_interval 10 #路径检查间隔
4. selector "round-robin 0" #路径间的轮询操作算法
5. path_grouping_policy failover #路径冗
余策略(配置默认:multibus)
6. getuid_callout "/sbin/scsi_id -g -u -s /block/%n" #判
断相同设备的规则
7. prio_callout /bin/true #判断设备优先级的方式
8. path_checker readsector0 #路径状态的检查模式
9. rr_min_io 100 #I/O论询的路径切换间隔
10. max_fds 8192 #允许同时打开
的最大文件描述符
11. rr_weight priorities #轮询时是否使用加权方式
12. failback immediate #发现路径
失效时的操作方式
13. no_path_retry fail #路径失效重试
14. user_friendly_names yes #是否使用友好的设备名
15. }
主要参数如下:
path_grouping_policy:路径冗余策略。
multibus-在同一个绑定设备中,所有路径均拥有相同的优先级,因此读写操作通过多路径来实现负载均衡。一旦某一路径失效,访问便会被分流到其他的可用路径。
failover-在同一个绑定设备中,只有一个路径拥有优先权,因此磁盘操作都使用同一个路径,一旦此路径失效,操作便会重定向到另一个可用路径。
默认值为multibus。
建议:与网卡bonding中的模式选择类似,在磁盘I/O低于单个HBA卡的I/O处理能力时,建议使用failover模式,这是因为multibus会消耗额外的CPU资源以进行计算。
path_checker:路径状态的检查模式。
readsector0-通过0扇区检查磁盘连路的可用状态,这是一个十分通用的模式。
directio-以直接I/O方式检查磁盘连路的可用状态。
除以上两个模式外,还有tur、emc_clariion、hp_sw模式,它们适用于不同的设备。
默认值为:readsector0。
rr_min_io :I/O轮询的路径切换间隔。
此值定义了在multibus模式中多个路径之间切换的密度,意思为每N次I/O操作后切换到下一个路径后再进行操作。此值过小会导致I/O路径的频繁切换;过大则会导致在大规模操作时切换延迟,发挥不了应有的性能。只有当path_grouping_policy为multibus时才有效。
默认值为1000。
max_fds:允许同时打开的最大文件描述符,此参数只在RHEL 5.2及之后版本中有效。
user_friendly_names:设为yes时系统会自动使用/dev/dm-X作为绑定的设备名;如果设为no,系统将会使用当前磁盘的wwid作为设备名。
12.4.3 磁盘多路径绑定效果测试
通过在不同模式中、在多路径设备下建立1GB文件,并在建立过程中断开正在运行的路径来进行测试。本测试数据是通过虚拟化实现百兆网络连接iSCSI获得的。
测试用例:
1. [root@localhost ~]# dd if=/dev/zero
of=/mnt/multipath/1g.file bs=1M count=1024
查看需要监测的各个磁盘设备的设备号:
1. [root@localhost ~]# ll /dev/ | grep -E 'sdc|sdd|dm-2'
2. brw-rw---- 1 root root 253, 2 Mar 14 16:03 dm-2
3. brw-r----- 1 root disk 8, 32 Mar 14 16:03 sdc
4. brw-r----- 1 root disk 8, 48 Mar 14 16:03 sdd
测试12-4:在multibus模式且两个路径设备都工作正常的情况下创建1GB数据文件。
1. [root@localhost~]# sar -d 1|grep-E 'DEV|dev8-32|
dev8-48|dev253-2'|head -n -4
2. 10:12:21 PM DEV tps rd_sec/s wr_sec/s
avgrq-sz avgqu-sz await svctm %util
3. 10:12:22 PM dev8-32 10.87 0.00 7826.09
720.00 93.16 10278.50 100.10 108.80
4. 10:12:22 PM dev8-48 7.61 0.00
6086.96 800.00 116.55 11292.29 143.00 108.80
5. 10:12:22 PM dev253-2 2176.09 0.00
17408.70 8.00 18821.40 8565.27 0.50 108.80
测试12-5:multibus模式,在创建1GB数据文件的过程中断开sdc(dev8-32)。
1. [root@localhost ~]# sar -d 1 | grep -E 'DEV|
dev8-32|dev8-48|dev253-2' | head -n -4
2. 10:12:39 PM DEV tps rd_sec/s wr_sec/s
avgrq-sz avgqu-sz await svctm %util
3. 10:12:39 PM dev8-32 0.00 0.00 0.00
0.00 119.19 0.00 0.00 105.47
4. 10:12:39 PM dev8-48 17.89 0.00 18324.21
1024.00 147.39 12036.06 58.94 105.47
5. 10:12:39 PM dev253-2 3667.37 0.00 29338.95
8.00 32732.49 7517.17 0.29 105.47
测试12-6:failover模式,在两个路径设备都工作正常的情况下创建1GB数据文件。
1. [root@localhost ~]# sar -d 1 | grep -E 'DEV|dev8-32
|dev8-48|dev253-2' | head -n -4
2. 10:17:34 PM DEV tps rd_sec/s wr_sec/s
avgrq-sz avgqu-sz await svctm %util
3. 10:17:34 PM dev8-32 14.44 0.00 14791.11
1024.00 165.54 9563.23 77.08 111.33
4. 10:17:34 PM dev8-48 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00
5. 10:17:34 PM dev253-2 4551.11 0.00 36408.89
8.00 21191.13 3884.95 0.24 111.33
测试12-7:failover模式,在创建1GB数据文件的过程中断开sdc(dev8-32)。
1. [root@loc
展开阅读全文