NewStart HA是一款支持多种Linux平台的双机高可用软件,具有稳定可靠,简约易用等特性。在很多电信级服务器中都有用。本文关于提供NewStart HA的典型配置技巧。
1、业务需求(oracle服务器)
公司需搭建一个oracle服务器运行关键业务,同时要求该服务器“稳定”、“可靠”、“有效”、“持续运行”,能提供24*7的不间断服务;经过一系列筛选后,最终选择SLES 11 + NewStart HA的双机高可用集群方案。
2、前期准备:
2.1 硬件需求:
(两台物理机A和B,以下硬件配置相同,型号品牌无限制,不详列) | ||
服务器A | 数量 | 用途 |
硬盘 | 1 | 安装Linux操作系统,/var可用空间预留不少于1GB; |
网卡 | 3 | bond0用于工作链路(两张千兆网卡eth0/1,mode =1,也可以使用单张网卡) eth2用于心跳链路(百兆网卡以上) |
串口(可选) | 1 | 用于心跳链路(HA包装盒里面有串口线) |
磁盘阵列 | 1 | 存放共享数据,手动划分两个区,共享数据存放于/dev/sdb2 (HA提供一个仲裁盘的数据安全保障机制,需要在磁盘上划分一块小空间,需30M左右,不需格式化,手动划分/dev/sdb1) |
2.2软件需求:
软件名称 | 版本 | 说明 |
SLES 11 | Sp1 | 操作系统 |
Oracle | 10g | 数据库软件 |
Newstart HA | 3.0.1.07 | newstartha高可用软件 |
3、安装配置
两台物理机子操作系统(suse11 sp1)和业务软件(oracle)已部署好,各自都运行正常,其中oracle的数据库已存放于共享磁阵/dev/sdb2中,挂载目录为/home/db。
最新商用NewStart HA版本(如3.0.1.07)已下载,附上查询最新版本地址:http://www.gd-linux.com/htdocs/modules/xsi/index.php/node/view/id/937
3.1安装NewStart HA
把网上下载的iso文件用二进制(bin)传输方式分别上传到两台服务器/home/目录,挂载iso文件到/mnt子目录:
# mount -oloop /home/xxxx.iso /mnt
执行安装脚本开始安装:
# /mnt/install HA Version: 1)New Version:3.0.1.07 2)Cancel please select Version [1-2]?1 NewStart HA Installation Program Version: 3.0.1.07 Support email: ha-support@gd-linux.com 1)NewStart HA Server Program and CLI Administrative Tool1 2)Web-based Administrative Tool (options)(version: 20121101) 2 3)All components3 4)Cancel select the components to be installed [1-4]? |
说明:
1.安装主程序包和cli管理工具(命令行)
2.安装Web管理工具
3.安装所有模块
安装过程:
select the components to be installed [1-4]?3 Checking NewStart HA ... NOT running Installing ... Installing the /mnt/nsha/x86/sles9/newstartha-3.0.1.07-20130107.i586.rpm ... Preparing... ########################################### [100%] 1:newstartha ########################################### [100%] newstartha 0:off 1:off 2:off 3:on 4:off 5:on 6:off Installing liblvm2clusterlock.so ok. 输入产品许可号(下面为试用SN) please enter the SN: 00TB24-FC0TCF-629A1H-B00D46 Make /etc/ha.d/lic/newstartha.key succeeded. [OK] web-based administrative tool install, deploying, please wait... jdk installed ok! tomcat installed ok! web-based administrative tool installed ok! Create keys(/usr/lib/newstartha/keystore.exp 1), please wait... Create tomcat.keystore OK. Do you want to start web-based administrative tool automatically as a system service? y(es) or n(o)? y系统启动时是否自动启动Web管理工具 Starting Web-based Administrative Tool Service ... [OK] Please remember to change the default web password immediately! The component(s) is installed completely. |
至此,HA程序安装完成,两台机器都执行完上述操作后继续往下配置。
3.2 申请license文件
HA启动会验证key及license文件有效性,需按以下方法进行license申请。
1、把两台机子上的/etc/ha.d/lic/newstartha.key文件打包(名字区分好,如newstartha.key_node1/2,二进制(bin)方式下载),然后发送到邮箱:ha-support@gd-linux.com进行license文件的申请。
2、收到的license文件后改名为newstartha.lic,用二进制(bin)方式上传到服务器,放到/etc/ha.d/lic/目录,因为每个节点newstartha.lic内容不同,key文件与license文件一一对应,所以不要搞混,否则HA无法启动。
申请完成,如node1:
#ls -l /etc/ha.d/lic -rw-r--r-- 1 root root 502 Mar 29 11:40 newstartha.key -rw-r--r-- 1 root root 52 Mar 29 15:14 newstartha.lic |
3.3 编写用于管控oracle的HA脚本
HA脚本功能类似于/etc/init.d/目录下的脚本,主要是规定如何启动、停止和检测业务程序,HA软件也提供了主流应用的相关脚本模版供参考,如apache、tomcat、oracle和sybase等,位于/etc/ha.d/resource.d目录下,其中oracle模版oracle_example.ps正符合此次需求。
进入上述目录,复制oracle_example.ps模版,重命名为oracle.ps,然后拷贝到/home/script/下,最后编缉oracle.ps开头几个变量即可搞定,如:
#The following three variant should be set to proper value ORACLE_HOME="/home/oracle_home" ORACLE_SID="orcl" ALERTLOG="${ORACLE_HOME}/admin/${ORACLE_SID}/bdump/alert_${ORACLE_SID}.log" … |
虽然脚本编写轻松完成,但现网中还是需要验证该脚本是否能完全管控oracle应用,下面附上手动调试过程(主要是start、stope及status状态,其中关键是status状态,返回0表示running,非0为stoped.):
1、挂载磁阵:mount /dev/sdb2 /home/db 2、测试脚本: 2.1 业务启动: # /home/script/oracle.ps start;echo $? …(省略) 0返回0,表示执行start成功 2.2 业务状态检测:(重点) # /home/script/oracle.ps status;echo $? …(省略) 0 返回0,表示应用running 2.3 业务停止: # /home/script/oracle.ps stop;echo $? …(省略) 0返回0,表示执行stop成功 2.4 业务状态检测:(重点) # /home/script/oracle.ps status;echo $? …(省略) 1返回1,表示应用stoped |
另一机子执行上述操作后,HA脚本编写环节就完成,接下来是核心部份,配置集群及服务。
3.4 配置NewStart HA(重点)
主要是两方面初始化配置:分别为集群初始化和服务初始化,必须按照以上顺序进行初始化。
HA支持命令行(cli)及web两种管理工具进行配置,下面是cli工具的配置过程。不过在配置之前,有些事情还是要提前做好的,列一下:
1.确定两台机子的主机名称(等于命令uname -n结果),配置中用到;
2.两台机子的心跳和工作链路的网卡名对应并且相同,并配置好所有网卡的固定IP;
3.确定业务的浮动IP地址;
4.确定HA脚本位置;(3.3小节已确定:/home/script/oracle.ps)
5.清楚两个节点的mount目录;(前面安装oracle时已建好,为/home/db)
6.确定第三方IP列表:HA建议配置3~5个IP,这些IP会长时间存在的(比如交换机IP等),这些IP与工作网卡属于相同网段,但不要配成双方节点的IP,作为是检测自身网络正常与否。
规划的情况如下,其中双机集群的两节点分别为suse11-sp1-1、suse11-sp1-2:
suse11-sp1-1 | suse11-sp1-2 | 说明 | |
网口链路 bond0 | 192.168.1.192 | 192.168.1.193 | 工作链路,IP为物理IP,可通过公网访问服务器的集群软件,进行数据配置等操作 |
网口链路 eth2 | 192.168.111.192 | 192.168.111.193 | 心跳链路,用于集群间通讯(不能与工作链路同一网段) |
串口心跳 | /dev/ttyS0 | /dev/ttyS0 | 心跳链路,直连,用于集群间通讯 |
浮动IP | 192.168.1.196 | 集群启动后,会自动加载到主节点(服务运行节点)工作链路网卡上,该IP需和工作链路网卡同一网段 | |
第三方IP列表 | 192.168.1.190,192.168.1.200,192.168.1.201 | 一般配置与工作链路同一网段,配置不少于两个 |
3.4.1 集群初始化,格式:cluster-init
运行cli指令,进入cli管理工具,然后运行cluster-init
cli:~>cluster-init ====================================== Cluster Initialization Utility ====================================== Built: Mon Jan 7 00:04:15 2013 This utility sets up the initialization information of a 2-node cluster. It prompts you for the following information: - Hostname - Information about the heartbeat channels - How long between heartbeat - How long to declare heartbeat fails - Watchdog configuration - Lock disk configuration Please input cluster name:oracle_cluster Input the first node name and IP:suse11-sp1-1 192.168.1.192 Input the second node name and IP:suse11-sp1-2 192.168.1.193 How long between heartbeats(in seconds)[1]:直接回车 How long to declare heartbeat has broken(in seconds)[60]:直接回车 Do you want to enable watchdog device ? (yes/no)[no]:直接回车 Please choose multicast heartbeat channel: 0) eth2 1) bond0 Select a multicast heartbeat channel [0, 1]:0 Another multicast heartbeat channel? (yes/no)[yes]:no Do you want to add a serial heartbeat channel? (yes/no)[yes]:直接回车 Input serial heartbeat channel[/dev/ttyS0]:直接回车 Another serial heartbeat channel? (yes/no)[yes]:no Do you want to enable worklink_hb ? (yes/no)[yes]:直接回车 Do you want to add third-party ip list ? [recommended 3-5 ip] (yes/no)[yes]:直接回车 Please input a third-party ip address:192.168.1.190 Another thirdpart ip address? (yes/no)[yes]:直接回车 Please input a third-party ip address:192.168.1.200 Another thirdpart ip address? (yes/no)[yes]:直接回车 Please input a third-party ip address:192.168.1.201 Another thirdpart ip address? (yes/no)[yes]:no Do you want to add a lock disk(recommend) ? (yes/no)[yes]:直接回车 Please input the partition name (/dev/sdb):/dev/sdb1 这是最安磁阵规划时划分出来的仲裁盘,数据安全保障机制的一种,是可选,但推荐配置。 Warning:All data in /dev/sdb1 will be destroyed, sure to format it? (yes/no)[no]:yes Do you want to enable kernel panic ? (yes/no)[no]:直接回车 Please run service-init to initialize you services. |
到这里cluster-init集群参数初始化已经完成,这里可执行cluster-show查看配置结果。如上述配置结果如下:
cli:~>cluster-show Configuration of the cluster: clustername: oracle_cluster node: suse11-sp1-1 192.168.1.192 node: suse11-sp1-2 192.168.1.193 logfile: /var/log/ha-log keepalive: 1 deadtime: 60 watchdog: off mcast: eth2 226.0.86.236 694 1 0 serial: /dev/ttyS0 worklink_hb: on thirdparty: 192.168.1.190 thirdparty: 192.168.1.200 thirdparty: 192.168.1.201 qdisk: /dev/sdb1 kernel_panic: off |
3.4.2 服务初始化,格式:service-init
cli管理工具中运行service-init.
cli:~>service-init ====================================== Service Initialization Utility ====================================== This utility sets up the initialization information of the service in the HA system. It prompts you for the following information: - Service information - Application resource information - Public net work interface information - Floating IP address information. - Block Disk information - Mount information - Raw Disk information Input service name:oracle Is it enabled?(yes/no)[yes]: Do you want to configure preferred node ? (yes/no)[no]:yes Please choose preferred node: 0) suse11-sp1-1 1) suse11-sp1-2 Select a node: [0, 1]:0 Input start time out[60]:直接回车 Input stop time out[120]:直接回车 Input check interval[30]:直接回车 Input check time out[60]:直接回车 Input max error count[1]:直接回车 Restart after check result is failed?(yes/no)[no]:直接回车 Start service anyway when float IP exist?(yes/no)[no]:直接回车 Do you want to add a application? (yes/no)[yes]:直接回车 ====== Application ====== Input name of application[oracle_app_0]:直接回车 Input script of application [/etc/ha.d/resource.d/oracle]:/home/script/oracle.ps管控oracle脚本 Is resource critical?[yes]:直接回车 Is resource enable?[yes]:直接回车 Add another application? (yes/no)[no]:直接回车 Do you want to add a pubnic? (yes/no)[yes]:直接回车 ====== PubNIC ====== Input PubNIC name[oracle_net_card_0]:直接回车 Is resource critical?[yes]:直接回车 Please choose network device: 0) eth2 1) bond0 Select a network device [0, 1]:1 Add another pubnic? (yes/no)[no]:直接回车 ====== IP ====== Input IP name[oracle_ip_0]:直接回车 Input IP address:192.168.1.196 浮点/业务IP Input netmask[255.255.255.0]: PubNIC of service: 0) oracle_net_card_0 suse11-sp1-1:bond0 suse11-sp1-2:bond0 Select a PubNIC: [0, 0]:0 Is resource critical?[yes]:直接回车 Add another IP? (yes/no)[no]:直接回车 Do you want to add a raw disk? (yes/no)[no]: 直接回车 Do you want to add a diskmount? (yes/no)[no]:yes ====== diskmount ====== Input diskmount name[oracle_diskmount_1]:直接回车 Is resource critical?[yes]:直接回车 Is resource enable?[yes]:直接回车 0) disk 支持普通的块设备,如/dev/sdb2 1) nfs 支持nfs设备 2) lvm 支持逻辑卷设备,如/dev/vg01/lv01 3) cancel please choose a disk type? [0, 3]:0 Input block disk device[/dev/hda1]:/dev/sdb2(共享数据所在设备) Input mountpoint:/home/db (挂载目录) Input type of file system[ext3]:直接回车 Input user[root]:oracle (挂载目录的操作用户) Input group[root]:oinstall(操作用户的群组) Input mode[755]:直接回车 Input options[rw]:直接回车 Input the quota of the device[90]:直接回车 do you want to stop service when the disk is readonly?[yes]:直接回车 Add another diskmount? (yes/no)[no]:直接回车 Add another service? (yes/no)[no]:直接回车 Please run cluster-start to start the HA system, or run cluster-restart to restart the HA system. |
服务初始化完成,可运行service-show查看配置结果。
cli:~>service-show Current service: 0) name: oracle 1) cancel Select a(n) service [0, 1]:0 service ------ name: oracle enabled: yes preferrednode: suse11-sp1-1 starttimeout: 60 stoptimeout: 120 checkinterval: 30 checktimeout: 60 maxerrcount: 1 restartaftercheckfail: no startanyway: no Application ------ displayname: oracle_app_0 script: /home/script/oracle.ps enable: yes critical: yes PubNIC ------ displayname: oracle_net_card_0 critical: yes member ------ nodename: suse11-sp1-1 device: bond0 member ------ nodename: suse11-sp1-2 device: bond0 IP ------ displayname: oracle_ip_0 ipaddr: 192.168.1.196 netmask: 255.255.255.0 PubNICResName: oracle_net_card_0 critical: yes DiskMount ------- displayname: oracle_diskmount_1 critical: yes enable: yes type: disk device: /dev/sdb2 mountpoint: /home/db fstype: ext3 user: oracle group: oinstall mode: 755 options: rw limitation: 90 stopWhenRO: yes Show other service? (yes/no)[no]: |
至此,HA配置完成,接下来是集群启动和调试。
3.5 启动集群
Cli管理工具中输入指令:cluster-start
cli:~>cluster-start [suse11-sp1-1]Starting High-Availability services: Configuration file checked ok. ..done . Configuration file checked ok. [suse11-sp1-2]Starting High-Availability services: ..done . |
集群启动成功。
3.6 查询集群状态
集群状态包括节点、心跳链路,工作链路和服务状态,在cli管理工具中输入指令:cluster-start(动态周期性刷新),show-status(显示一次当前状态).
cli中输入指令cluster-stat:
cli:~>cluster-stat Press Ctrl-C or 'Q' to exit Date: Wed Apr 10 09:45:13 2013 Member status suse11-sp1-1 UP suse11-sp1-2 UP WorkLink suse11-sp1-1 suse11-sp1-2 bond0 ONLINE ONLINE HeartbeatLink suse11-sp1-1 suse11-sp1-2 status network eth2 eth2 ONLINE serial /dev/ttyS0 /dev/ttyS0 ONLINE LockDisk /dev/sdb1 /dev/sdb1 ONLINE ServiceName suse11-sp1-1 suse11-sp1-2 Enable *oracle running stopped YES |
cli中输入指令show-status:
cli:~>show-status Member status -------- -------- suse11-sp1-1 UP suse11-sp1-2 UP WorkLink suse11-sp1-1 suse11-sp1-2 -------- -------- -------- bond0 ONLINE ONLINE HeartbeatLink suse11-sp1-1 suse11-sp1-2 status -------- -------- -------- -------- network eth2 eth2 ONLINE serial /dev/ttyS0 /dev/ttyS0 ONLINE LockDisk /dev/sdb1 /dev/sdb1 ONLINE ServiceName suse11-sp1-1 suse11-sp1-2 Enable -------- -------- -------- ------- oracle running stopped YES |
从上述集群状态图可以看出,节点(Member)状态都是”UP”(正常),工作链路(WorkLink)bond0都是”ONLINE”(正常),心跳链路(HeartbeatLink)都是”ONLINE(正常),接下来重点来了,就是服务oracle的状态,现成功运行(running)在suse11-sp1-1上, suse11-sp1-2节点状态是stoped,即充当备用机子的状态存在,当主节点上的业务发生异常时就会接管过来,保障业务持续运行,后面的Enable表示该服务是受HA管控。
3.7 集群测试验证
这是最后一个环节,就是测试当主节点故障(如业务异常,机子挂掉等)时,备机能否成功接管,实现业务持续运行;这里模拟两种现网中比较常见故障:
1、主节点业务故障(模拟方式:杀掉oracle进程),备机能否接管。
l查看双机状态:
cli:~>cluster-stat Press Ctrl-C or 'Q' to exit Date: Wed Apr 10 11:21:13 2013 Member status suse11-sp1-1 UP suse11-sp1-2 UP WorkLink suse11-sp1-1 suse11-sp1-2 bond0 ONLINE ONLINE HeartbeatLink suse11-sp1-1 suse11-sp1-2 status network eth2 eth2 ONLINE serial /dev/ttyS0 /dev/ttyS0 ONLINE LockDisk /dev/sdb1 /dev/sdb1 ONLINE ServiceName suse11-sp1-1 suse11-sp1-2 Enable *oracle running stopped YES |
l杀掉主节点suse11-sp1-1上的oracle关键进程,kill -9 2245(pmon进程号)
l持续查看备机suse11-sp1-2的集群状态,cluster-stat.
cli:~>cluster-stat Press Ctrl-C or 'Q' to exit Date: Wed Apr 10 11:40:10 2013 Member status suse11-sp1-1 UP suse11-sp1-2 UP WorkLink suse11-sp1-1 suse11-sp1-2 bond0 ONLINE ONLINE HeartbeatLink suse11-sp1-1 suse11-sp1-2 status network eth2 eth2 ONLINE serial /dev/ttyS0 /dev/ttyS0 ONLINE LockDisk /dev/sdb1 /dev/sdb1 ONLINE ServiceName suse11-sp1-1 suse11-sp1-2 Enable *oracle stopped:stu(A) running YES str start fail, stp stop fail, stu status fail, op operation fail A Application, I IP, M Mount, S Storage, W Work link, B Split Brain P Ping, T Time out, L Lock or unlock fail |
几分钟后查看oracle的状态,其中的stu(A)表示1节点运行的业务检测到异常并停止,2节点running表示服务已接管过来。
2、主节点机器故障(模拟方式:关机),备机能否接管。
l继续上面的集群状态,服务oracle在suse11-sp1-2上运行(见上图)。
luse11-sp1-2上运行shutdown指令
# shutdown -h now Broadcast message from root (pts/1) (Wed Apr 10 13:40:26 2013): The system is going down for system halt NOW! |
l持续查看use11-sp1-1的集群运行状态,cluster-stat
cli:~>cluster-stat Press Ctrl-C or 'Q' to exit Date: Wed Apr 10 13:49:09 2013 Member status suse11-sp1-1 UP suse11-sp1-2 DOWN WorkLink suse11-sp1-1 suse11-sp1-2 bond0 ONLINE UNKNOWN HeartbeatLink suse11-sp1-1 suse11-sp1-2 status network eth2 eth2 OFFLINE serial /dev/ttyS0 /dev/ttyS0 OFFLINE LockDisk /dev/sdb1 /dev/sdb1 OFFLINE ServiceName suse11-sp1-1 suse11-sp1-2 Enable *oracle running unknown YES |
从1节点集群状态图来看,oracle已在上面运行(running),说明已成功接管服务;同时,2节点显示已down掉,其它链路及服务状态显示显示也是正常。
总结:上述常见故障中,HA能够保障业务持续运行,达到预期要求。
4、附录:
4.1 一些操作技巧:
1、cli中双按tab键,能把所有命令列出;输入help + 命令可查看其用法;
2、ha运行日志位于/var/log/ha-log,按需查看;
3、web工具的访问方式如下,建议用于后期维护:
地址:http://节点IP:10001缺省帐户/密码:SuperAdmin/123456