NewStart HA是一款支持多种Linux平台的双机高可用软件,具有稳定可靠,简约易用等特性。在很多电信级服务器中都有用。本文关于提供NewStart HA的典型配置技巧。

1、业务需求(oracle服务器)

公司需搭建一个oracle服务器运行关键业务,同时要求该服务器“稳定”、“可靠”、“有效”、“持续运行”,能提供24*7的不间断服务;经过一系列筛选后,最终选择SLES 11 + NewStart HA的双机高可用集群方案。

2、前期准备:

2.1 硬件需求:

(两台物理机AB,以下硬件配置相同,型号品牌无限制,不详列)

服务器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