1. 环境准备

1.1. 软件信息

虚拟机:VirtualBox 4.2

操作系统:Oracle Linux Server release 5.9

OCFS2:ocfs2-2.6.18-348.el5-1.4.10-1.el5.x86_64.rpm

 

1.2. 主机配置
1.2.1. Hosts文件

[root@skynode1 ~]# more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost

# skynode1

192.168.1.241   skynode1

192.168.1.242   skynode1-vip

# skynode2

192.168.1.245   skynode2

192.168.1.246   skynode2-vip

192.168.1.250   sky-cluster     sky-cluster-scan

10.11.11.11     skynode1-priv

10.11.11.12     skynode2-priv

当前主机是模拟rac环境使用,因此我们使用私有网卡,作为ocfs2集群的通信地址。当然生产环境当中是不能这么做的,这样会给私有网卡带来严重的性能压力。建议添加单独的网卡来作为ocfs2集群的通信网卡。

 

1.2.2. 磁盘空间

添加一块独立的磁盘用于ocfs2集群测试

wps_clip_p_w_picpath-9911

 

1.3. 安装ocfs2

操作系统安装好以后,默认已经安装了ocfs2-tools,需要手工进行ocfs2的安装。每个使用ocfs2共享文件系统的节点都需要安装。

[oracle@skynode1 ~]$ rpm -qa | grep ocfs

ocfs2-tools-1.8.0-10.el5

 

选择使用yum的方式进行ocfs2安装。

[root@skynode1 Server]# yum list | grep ocfs2

This system is not registered with ULN.

You can use up2date --register to register.

ULN support will be disabled.

ocfs2-tools.x86_64                       1.8.0-10.el5                  installed

ocfs2-2.6.18-348.el5.x86_64              1.4.10-1.el5                  oel5     

ocfs2-2.6.18-348.el5debug.x86_64         1.4.10-1.el5                  oel5     

ocfs2-2.6.18-348.el5xen.x86_64           1.4.10-1.el5                  oel5     

ocfs2-tools-devel.x86_64                 1.8.0-10.el5                  oel5     

 

[root@skynode1 Server]# yum install ocfs2-2.6.18-348.el5.x86_64

Loaded plugins: rhnplugin, security

This system is not registered with ULN.

You can use up2date --register to register.

ULN support will be disabled.

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package ocfs2-2.6.18-348.el5.x86_64 0:1.4.10-1.el5 set to be updated

--> Finished Dependency Resolution

Dependencies Resolved

===================================================================

 Package                                 Arch                      Version                            Repository               Size

===================================================================

Installing:

 ocfs2-2.6.18-348.el5                    x86_64                    1.4.10-1.el5                       oel5                    323 k

Transaction Summary

===================================================================

Install       1 Package(s)

Upgrade       0 Package(s)

Total download size: 323 k

Is this ok [y/N]: y

Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Finished Transaction Test

Transaction Test Succeeded

Running Transaction

  Installing     : ocfs2-2.6.18-348.el5                                                                                         1/1 

Installed:

  ocfs2-2.6.18-348.el5.x86_64 0:1.4.10-1.el5                                                                                        

Complete!

 

没有太多的依赖关系,安装很顺利。

 

注意:

新版本的OEL系统中,已经不再提供ocfs2-console这个图形化工具进行ocfs的配置。

ocfs2-tools 是一个字符界面工具。因此我们通过ocfs2-tools命令行进行ocfs2集群的配置。

USER'S GUIDE FOR RELEASE 1.6

ocfs2-tools (CLI) and ocfs2console (GUI).

其他节点选择rpm方式直接安装

[root@skynode2 ~]# rpm -ivh ocfs2-2.6.18-348.el5-1.4.10-1.el5.x86_64.rpm

warning: ocfs2-2.6.18-348.el5-1.4.10-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing...    ########################################### [100%]

1:ocfs2-2.6.18-348.el5   ########################################### [100%]

 

2. 配置集群

集群的配置可以使用模版文件或者命令行的方式,/etc/ocfs2/cluster.conf 这个文件对格式有一定的要求,复制、粘贴很容易照成配置异常,建议通过命令行进行配置。

实际在生产系统中使用这种方式配置共享存储的使用很少,因此我们只做简单的测试,不考虑性能等问题。

 

2.1. 使用o2cb 命令配置集群

o2cb 是集群配置命令,简单的配置我们只需要关注2个参数,一个是添加集群,一个是添加节点。

The commands are:

add-cluster         Add cluster to the config file.

add-node            Adds a node to the cluster in the config file.

 

2.1.1. add-cluster

[root@skynode1 ~]# o2cb add-cluster

o2cb: usage: add-cluster <clustername>

添加集群,只需要指定集群名称即可。命令执行成功后,会自动创建集群配置文件 /etc/ocfs2/cluster.conf。如果是通过模版方式创建集群,则需要手工创建该文件。

 
2.1.2. add-node

[root@skynode1 ~]# o2cb add-node

o2cb: usage: add-node [--ip <ip>] [--port <port>] [--number <num>] <clustername> <nodename>

添加节点命令,需要指定节点ip,节点间通信的端口,当前节点的编号,以及节点所属集群和节点的名称。

 
2.1.3. 创建集群和节点

需要在所有节点使用root口令执行下面命令:

o2cb add-cluster racfs

o2cb add-node --ip 10.11.11.11 --port 7777 --number 1 racfs skynode1

o2cb add-node --ip 10.11.11.12 --port 7777 --number 2 racfs skynode2

[root@skynode1 ~]# o2cb add-cluster racfs

[root@skynode1 ~]# o2cb add-node --ip 10.11.11.11 --port 7777 --number 1 racfs skynode1

[root@skynode1 ~]# o2cb add-node --ip 10.11.11.12 --port 7777 --number 2 racfs skynode2

执行成功后,检查配置文件

[root@skynode1 ~]# ls -la /etc/ocfs2/cluster.conf

-rw-r--r-- 1 root root 254 Nov 23 02:14 /etc/ocfs2/cluster.conf

[root@skynode1 ~]# more /etc/ocfs2/cluster.conf

node:

        ip_port = 7777

        ip_address = 10.11.11.11

        number = 1

        name = skynode1

        cluster = racfs

node:

        ip_port = 7777

        ip_address = 10.11.11.12

        number = 2

        name = skynode2

        cluster = racfs

cluster:

        node_count = 2

        heartbeat_mode = local

        name = racfs

要确保配置文件中的ip地址,主机名是可以正常访问的。

 
2.1.4. 配置集群服务

在所有节点运行集群服务配置命令。

[root@skynode1 ~]# service o2cb configure

Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.

The following questions will determine whether the driver is loaded on

boot.  The current values will be shown in brackets ('[]').  Hitting

<ENTER> without typing an answer will keep that current value.  Ctrl-C

will abort.

Load O2CB driver on boot (y/n) [n]: y

Cluster stack backing O2CB [o2cb]: 

Cluster to start on boot (Enter "none" to clear) [ocfs2]: racfs

Specify heartbeat dead threshold (>=7) [31]: 

Specify network idle timeout in ms (>=5000) [30000]: 

Specify network keepalive delay in ms (>=1000) [2000]: 

Specify network reconnect delay in ms (>=2000) [2000]: 

Writing O2CB configuration: OK

Loading filesystem "configfs": OK

Mounting configfs filesystem at /sys/kernel/config: OK

Loading stack plugin "o2cb": OK

Loading filesystem "ocfs2_dlmfs": OK

Creating directory '/dlm': OK

Mounting ocfs2_dlmfs filesystem at /dlm: OK

Setting cluster stack "o2cb": OK

Registering O2CB cluster "racfs": OK

Setting O2CB cluster timeouts : OK

注意修改集群名称与上面创建的集群名称一致。确保所有返回结果均为 OK。

集群服务的配置信息,存放在 /etc/sysconfig/o2cb 文件中。可以手工进行修改,修改后,建议重新执行服务配置命令。

 
2.1.5. 配置参数调整

参数调整需要在所有节点进行操作。

l O2CB_HEARTBEAT_THRESHOLD

建议值为:

O2CB_HEARTBEAT_THRESHOLD = (((timeout in seconds) / 2) + 1) 

The default for this is 31 (60 secs). A setting of 61 is recommended for multipath users.

使用默认值,不做改动。

l Network Idle Timeout

l Network Keepalive Delay

l Network Reconnect Delay

上述参数,均使用默认值。

l Kernel Configuration

kernel.panic_on_oops = 1 

kernel.panic = 30 

修改 /etc/sysctl.conf 参数文件, 使用 sysctl -p 命令使参数生效。

 
2.2. 启动集群

在所有节点执行 service o2cb online 命令,启动ocfs2集群。如果此时配置文件存在,会有报错信息出现,要及时处理报错。

[root@skynode1 ~]# service o2cb online

Setting cluster stack "o2cb": OK

Cluster racfs already online

 
2.3. 检查集群状态

在所有节点执行 service o2cb status 命令,检查ocfs2集群状态。

[root@skynode1 ~]# service o2cb status

Driver for "configfs": Loaded

Filesystem "configfs": Mounted

Stack glue driver: Loaded

Stack plugin "o2cb": Loaded

Driver for "ocfs2_dlmfs": Loaded

Filesystem "ocfs2_dlmfs": Mounted

Checking O2CB cluster "racfs": Online

  Heartbeat dead threshold: 31

  Network idle timeout: 30000

  Network keepalive delay: 2000

  Network reconnect delay: 2000

  Heartbeat mode: Local

Checking O2CB heartbeat: Not active

由于此时还没有共享磁盘使用,因此心跳的状态为未激活。

 

3. 格式化共享磁盘

3.1. 共享磁盘分区
3.1.1. 检查新添加的共享磁盘

在所有节点都进行检查,确认磁盘是否添加正常。

[root@skynode1 ~]# ls -la /dev/sd*

brw-r----- 1 root disk 8,  0 Nov 23  2013 /dev/sda

brw-r----- 1 root disk 8,  1 Nov 23 02:13 /dev/sda1

brw-r----- 1 root disk 8,  2 Nov 23  2013 /dev/sda2

brw-rw---- 1 root root 8, 16 Nov 23  2013 /dev/sdb

brw-rw---- 1 root root 8, 32 Nov 23  2013 /dev/sdc

brw-rw---- 1 root root 8, 48 Nov 23  2013 /dev/sdd

brw-r----- 1 root disk 8, 64 Nov 23  2013 /dev/sde

 
3.1.2. 磁盘分区

在单个节点进行操作即可。使用全部磁盘空间进行分区操作。

[root@skynode1 ~]# fdisk /dev/sde

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.

The number of cylinders for this disk is set to 1305.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

   (e.g., DOS FDISK, OS/2 FDISK)

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1305, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 

Using default value 1305

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

 
3.1.3. 检查分区后的磁盘信息

[root@skynode1 ~]# ls -la /dev/sde*

brw-r----- 1 root disk 8, 64 Nov 23 02:36 /dev/sde

brw-r----- 1 root disk 8, 65 Nov 23 02:36 /dev/sde1

 
3.1.4. 其他节点进行磁盘发现操作

[root@skynode2 ~]# partprobe

[root@skynode2 ~]# ls -la /dev/sde*

brw-r----- 1 root disk 8, 64 Nov 23  2013 /dev/sde

brw-r----- 1 root disk 8, 65 Nov 23 02:38 /dev/sde1

其他节点可以正常看到该磁盘分区。表明磁盘分区操作成功。

 
3.2. 磁盘分区格式化

这里我们选择datafiles 类型,用于存放数据库的数据文件。单个节点操作即可。

[root@skynode1 ~]# mkfs.ocfs2 -T datafiles -L "RACFS" /dev/sde1

mkfs.ocfs2 1.8.0

Cluster stack: classic o2cb

Filesystem Type of datafiles

Label: RACFS

Features: sparse extended-slotmap backup-super unwritten inline-data strict-journal-super xattr indexed-dirs refcount discontig-bg

Block size: 4096 (12 bits)

Cluster size: 131072 (17 bits)

Volume size: 10733879296 (81893 clusters) (2620576 blocks)

Cluster groups: 3 (tail covers 17381 clusters, rest cover 32256 clusters)

Extent allocator size: 8388608 (2 groups)

Journal size: 33554432

Node slots: 4

Creating bitmaps: done

Initializing superblock: done

Writing system files: done

Writing superblock: done

Writing backup superblock: 2 block(s)

Formatting Journals: done

Growing extent allocator: done

Formatting slot map: done

Formatting quota files: done

Writing lost+found: done

mkfs.ocfs2 successful

在其他节点重复格式化时,会出现提示是否覆盖ocsfs2分区。

[root@skynode2 ~]# mkfs.ocfs2 -T datafiles -L "RACFS" /dev/sde1

mkfs.ocfs2 1.8.0

Cluster stack: classic o2cb

Overwriting existing ocfs2 partition.

Proceed (y/N): n

Aborting operation.

 
3.3. 挂载磁盘

l 创建挂载点

在所有节点创建相同的目录,修改目录属组为oracle用户。

[root@skynode1 ~]# cd /

[root@skynode1 /]# mkdir oradata

[root@skynode1 /]# chown oracle:oinstall /oradata/

l 挂载磁盘分区

所有节点都进行挂载操作

[root@skynode1 /]# mount -t ocfs2 /dev/sde1 /oradata/

l 检查共享磁盘

所有节点检查目录权限是否正确

[root@skynode1 /]# cd / ; ll | grep ora

drwxr-xr-x   7 oracle oinstall  4096 Aug 24 15:35 oracle

drwxr-xr-x   3 oracle oinstall  3896 Nov 23 02:48 oradata

在单个节点创建一个测试文件

[root@skynode1 /]# cd /oradata/

[root@skynode1 oradata]# echo hello > 1.txt

其他节点进行文件内容检查

[root@skynode2 /]# cd /oradata/

[root@skynode2 oradata]# more 1.txt 

Hello

 
3.4. 配置磁盘自动挂载
3.4.1. 配置/etc/fstab

所有节点修改 /etc/fstab 配置文件,新增ocfs2共享磁盘配置。

[root@skynode1 ~]# vi /etc/fstab 

/dev/sde1        /oradata     ocfs2   _netdev,datavolume,nointr   0 0 

所有节点卸载挂载目录

[root@skynode1 ~]# umount /oradata

所有节点重新挂载

[root@skynode1 ~]# mount /oradata

3.4.2. 挂载参数说明

l _netdev 

是针对ocfs2设备的特殊mount选项,此挂载选择指示将在网络启动后挂载改卷,在关闭网络前卸载改卷。

l datavolume 

该挂载属性,表面挂载的磁盘用于存放oracle数据文件,控制文件,重做日志,归档日志,表决磁盘,集群注册表等。

l intr / nointr

The default, nointr, blocks signals from interrupting certain cluster operations. 与集群信号中断有关设置。

 

4. 共享磁盘使用测试

下面操作使用oracle用户进行验证。

4.1. 创建测试目录

[oracle@skynode1 ~]$ cd /oradata/

[oracle@skynode1 oradata]$ mkdir acct

 
4.2. 添加表空间

SQL> create tablespace OCFS_TBS datafile '/oradata/acct/OCFS_TBS.dbf' size 100m;

Tablespace created.

 
4.3. 各节点测试读写操作
4.3.1. 节点1创建表,写入测试数据

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      acct1

SQL> create table t (id number);

Table created.

SQL> insert into t values (1);

1 row created.

SQL> commit;

Commit complete.

 
4.3.2. 节点2读取数据,写入测试数据

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      acct2

SQL> select * from t;

        ID

----------

         1

SQL> insert into t values (2);

1 row created.

SQL> commit;

Commit complete.

 
4.3.3. 节点1验证节点2写入的数据

SQL> show parameter instance_name;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      acct1

SQL> select * from t;

        ID

----------

         1

         2

 

5. 重启主机进行验证