初探OCFS2-配置服务

2016/11/16

一、认识
据zstack的童鞋们介绍:OCFS2是主流对接 SAN 云存储的方式

存储的选择,通常有以下方式:
1、NAS
1)NFS
简单

2)GlusterFS
易懂

2、IP SAN(iscsi)
1)使用iscsiadm 发现一下 target 即可
2)研究 ovirt 是如何使用 iscsi 存储的
看到一个讨论ovirt通过lvm来使用iscsi的方式
http://users.ovirt.narkive.com/XzD01akX/ovirt-users-shared-storage-with-iscsi

按照字面意思,我的理解(未实验)是:
a、每个 host 挂载 iscsi 存储
b、通过 lvm 划分出 vm disk
c、在运行了 vm 的 host 上 通过 lvchange 来激活指定的 vm disk 
lvchange -ay vol_group/logical_vol

3)通过 OCFS2 来访问存储
这就是本文的初衷,接下来展开记录。

二、配置
1、准备安装 oracle uek 内核(因为新版本的 ocfs2 内核模块被 uek 整合了)
[[email protected] ~]# wget http://public-yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo
[[email protected] ~]# rpm --import http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6
[[email protected] ~]# yum install yum-plugin-downloadonly -y
[[email protected] ~]# mkdir /tmp/ocfs2 && cd /tmp/ocfs2/
[[email protected] ocfs2]# yum install --downloadonly --downloaddir=/tmp/ocfs2/ kernel-uek ocfs2-tools -y

2、安装 uek
[[email protected] ocfs2]# yum localinstall kernel-uek*
使用新的内核,编辑 grub 调整启动顺序:
[[email protected] ocfs2]# vim /etc/grub.conf
重启系统后查看:
[[email protected] ocfs2]# uname -r
2.6.39-400.290.1.el6uek.x86_64

查看 ocfs2 模块是否加载:
[[email protected] ocfs2]# modprobe ocfs2
[[email protected] ocfs2]# lsmod |grep oc
ocfs2                1094439  0 
ocfs2_nodemanager     223253  1 ocfs2
configfs               29308  2 ocfs2_nodemanager
ocfs2_stackglue        11896  1 ocfs2
jbd2                   93114  2 ocfs2,ext4

3、安装 ocfs2-tools
[[email protected] ocfs2]# yum localinstall ocfs2-tools* -y

4、配置 ocfs2 服务
[[email protected] ~]# vim /etc/hosts
10.50.200.149 n149.ocfs2.test
10.50.200.150 n150.ocfs2.test

[[email protected] ~]# service o2cb load
checking debugfs...
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

[[email protected] ~]# service o2cb online
checking debugfs...
Setting cluster stack "o2cb": OK
Checking O2CB cluster configuration : Failed

符合预期,继续配置集群:

[[email protected] ~]# o2cb_ctl -C -n prdcluster -t cluster -a name=prdcluster
[[email protected] ~]# o2cb_ctl -C -n n149.ocfs2.test -t node -a number=0 -a ip_address=10.50.200.149 -a ip_port=11111 -a cluster=prdcluster
[[email protected] ~]# o2cb_ctl -C -n n150.ocfs2.test -t node -a number=1 -a ip_address=10.50.200.150 -a ip_port=11111 -a cluster=prdcluster
[[email protected] ~]# cat /etc/ocfs2/cluster.conf 
node:
        name = n149.ocfs2.test
        cluster = prdcluster
        number = 0
        ip_address = 10.50.200.149
        ip_port = 11111

node:
        name = n150.ocfs2.test
        cluster = prdcluster
        number = 1
        ip_address = 10.50.200.150
        ip_port = 11111

cluster:
        name = prdcluster
        heartbeat_mode = local
        node_count = 2

        
[[email protected] ~]# service o2cb configure
[[email protected] ~]# service o2cb online

上述操作,在每个节点上执行。
其他可选操作:
[[email protected] ~]# 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 "prdcluster": 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
Debug file system at /sys/kernel/debug: mounted

另外:确认防火墙放行了对应的端口,本例是 tcp port 11111

5、配置 iscsi 存储
[[email protected] ocfs2]# iscsiadm -m discovery -t st -p 10.50.200.41
[[email protected] ocfs2]# iscsiadm -m node -o delete -T iqn.1984-05.com.dell:powervault.md3800i.600a098000a64d8b0000000057a152ea -p 192.168.131.101
[[email protected] ocfs2]# iscsiadm -m node -o delete -T iqn.1984-05.com.dell:powervault.md3800i.600a098000a64d8b0000000057a152ea -p 192.168.131.102
[[email protected] ocfs2]# iscsiadm -m node -T iqn.1984-05.com.dell:powervault.md3800i.600a098000a64d8b0000000057a152ea --login
[[email protected] ocfs2]# yum install device-mapper-multipath -y
[[email protected] ocfs2]# modprobe dm-multipath
[[email protected] ocfs2]# mpathconf
[[email protected] ocfs2]# cat /etc/multipath.conf
defaults {
    path_grouping_policy    multibus
    path_checker            readsector0
    rr_min_io_rq            10
    max_fds                 8192
    rr_weight               priorities
    failback                immediate
    no_path_retry           fail
    user_friendly_names     yes
}

multipaths {
    multipath {
        wwid                    3600a098000a64d8b000002a4582305f8
        alias                   test_block_a
    }
}
[[email protected] ocfs2]# service multipathd start
[[email protected] ocfs2]# chkconfig multipathd on
[[email protected] ocfs2]# multipath -ll
test_block_a (3600a098000a64d8b000002a4582305f8) dm-0 DELL,MD38xxi
size=100G features=‘0‘ hwhandler=‘0‘ wp=rw
`-+- policy=‘round-robin 0‘ prio=1 status=active
  |- 4:0:0:0 sda 8:0   active ready  running
  `- 5:0:0:0 sdb 8:16  active ready  running
  

6、使用 iscsi 存储
挂载参数请参考:man mkfs.ocfs2

[[email protected] ~]# mkfs.ocfs2 -b 4K -C 64K -L testblocka -T datafiles -F /dev/mapper/test_block_a
mkfs.ocfs2 1.8.6
Cluster stack: classic o2cb
Overwriting existing ocfs2 partition.
WARNING: Cluster check disabled.
Proceed (y/N): y
Filesystem Type of datafiles
Label: testblocka
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: 65536 (16 bits)
Volume size: 107374182400 (1638400 clusters) (26214400 blocks)
Cluster groups: 51 (tail covers 25600 clusters, rest cover 32256 clusters)
Extent allocator size: 41943040 (10 groups)
Journal size: 33554432
Node slots: 8
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 4 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful

[[email protected] ~]# cat <<_EOF >>/etc/fstab
/dev/mapper/test_block_a        /mnt/tba        ocfs2   defaults        0 0
_EOF
[[email protected] ~]# mkdir /mnt/tba
[[email protected] ~]# mount -a
[[email protected] ~]# df -h /mnt/tba
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/test_block_a  100G  586M  100G   1% /mnt/tba

在另一个节点上执行:
[[email protected] ~]# cat <<_EOF >>/etc/fstab
/dev/mapper/test_block_a        /mnt/tba        ocfs2   defaults        0 0
_EOF
[[email protected] ~]# mkdir /mnt/tba
[[email protected] ~]# mount -a
[[email protected] ~]# df -h /mnt/tba
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/test_block_a  100G  586M  100G   1% /mnt/tba

查看对应的日志:
Nov 16 13:46:01 n149 kernel: o2hb: Heartbeat mode set to local
Nov 16 13:46:01 n149 o2hbmonitor: Starting
Nov 16 13:47:42 n149 kernel: OCFS2 1.8.0
Nov 16 13:47:43 n149 kernel: o2dlm: Joining domain 55663D9EA9B0466D80626459E2B6AE9B ( 1 ) 1 nodes
Nov 16 13:47:43 n149 kernel: ocfs2: Mounting device (251,0) on (node 1, slot 0) with ordered data mode.
Nov 16 13:48:16 n149 kernel: o2net: Connection to node n150.ocfs2.test (num 0) at 10.50.200.150:11111 shutdown, state 7
Nov 16 13:48:18 n149 kernel: o2net: Connected to node n150.ocfs2.test (num 0) at 10.50.200.150:11111
Nov 16 13:48:22 n149 kernel: o2dlm: Node 0 joins domain 55663D9EA9B0466D80626459E2B6AE9B ( 0 1 ) 2 nodes

Nov 16 13:45:43 n150 kernel: o2hb: Heartbeat mode set to local
Nov 16 13:45:43 n150 o2hbmonitor: Starting
Nov 16 13:48:18 n150 kernel: o2net: Accepted connection from node n149.ocfs2.test (num 1) at 10.50.200.149:11111
Nov 16 13:48:22 n150 kernel: OCFS2 1.8.0
Nov 16 13:48:22 n150 kernel: o2dlm: Joining domain 55663D9EA9B0466D80626459E2B6AE9B ( 0 1 ) 2 nodes
Nov 16 13:48:22 n150 kernel: ocfs2: Mounting device (251,0) on (node 0, slot 1) with ordered data mode.

2个节点的 heartbeat 的状态也都变成了 Active
[[email protected] ~]# 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 "prdcluster": Online
  Heartbeat dead threshold: 31
  Network idle timeout: 30000
  Network keepalive delay: 2000
  Network reconnect delay: 2000
  Heartbeat mode: Local
Checking O2CB heartbeat: Active
Debug file system at /sys/kernel/debug: mounted

7、测试文件读写
【2个节点同时写一个文件】
[[email protected] ~]# for i in `seq 1 9`;do echo "`hostname` -> [`date`]" >>/mnt/tba/1.log;sleep 1s;done
[[email protected] ~]# for i in `seq 1 9`;do echo "`hostname` -> [`date`]" >>/mnt/tba/1.log;sleep 1s;done
[[email protected] ~]# cat /mnt/tba/1.log   

n149.ocfs2.test -> [Wed Nov 16 13:55:20 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:21 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:21 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:22 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:22 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:23 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:23 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:24 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:24 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:25 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:25 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:26 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:26 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:27 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:27 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:28 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:55:28 CST 2016]
n150.ocfs2.test -> [Wed Nov 16 13:55:29 CST 2016]
结论:符合预期。

【一个节点写,另一个节点读】
[[email protected] ~]# for i in `seq 1 9`;do echo "`hostname` -> [`date`]" >>/mnt/tba/1.log;sleep 1s;done
[[email protected] ~]# tail -f /mnt/tba/1.log 

n149.ocfs2.test -> [Wed Nov 16 13:57:42 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:43 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:44 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:45 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:46 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:47 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:48 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:49 CST 2016]
n149.ocfs2.test -> [Wed Nov 16 13:57:50 CST 2016]
^C
结论:符合预期。

三、问题解释
1、cluster 处于 Offline 的状态
[[email protected] ~]# mount -a
mount.ocfs2: Internal logic failure while trying to join the group
[[email protected] ~]# service o2cb status       
Checking O2CB cluster "prdcluster": Offline

则请检查各节点的域名是否能正常解析,ocfs2 要用到 hostname 来提供服务。有一种情况是:
上述节点的 hostname 为:
n149.test.com
n150.test.com
而配置 ocfs2 是在 hosts 中写死了:
10.50.200.149 n149.ocfs2.test
10.50.200.150 n150.ocfs2.test

而实际上,ocfs2 使用的却是 hostname,因而节点之间的连接异常。

2、heartbeat 处于 Not active 状态
挂载卷后 heartbeat 才会启动,因此,先操作后再观察。

ZYXW、参考
1、[ovirt-users] shared storage with iscsi
http://users.ovirt.narkive.com/XzD01akX/ovirt-users-shared-storage-with-iscsi
2、Linux : Oracle unbreakable kernel and OCFS2 on CentOS/RHEL6
http://www.itechlounge.net/2014/08/linux-oracle-unbreakable-kernel-and-ocfs2-on-centosrhel6/
3、Oracle Linux 6: Create an OCFS2 Cluster and Filesystem
https://www.itfromallangles.com/2013/03/oracle-linux-6-create-an-ocfs2-cluster-and-filesystem/
4、Installing And Configuring An OCFS2 Clustered File System
http://www.shapeblue.com/installing-and-configuring-an-ocfs2-clustered-file-system/
5、解决o2cb status时状态始终为offline(o2cb_ctl: Internal logic failure failed while adding RAC1)
http://www.blogjava.net/KingKong/archive/2011/06/06/351826.html
6、O2CB heartbeat: Not active
https://oss.oracle.com/pipermail/ocfs2-users/2009-April/003477.html
时间: 2024-10-07 11:13:32

初探OCFS2-配置服务的相关文章

WCF基础之配置服务

在WCF应用编程中配置服务是其主要部分. 配置可以定义和自定义如何向客户端公开服务,包括服务地址,发送和接受消息的传输和编码,以及服务的安全类型. 服务的配置有两种:编码和使用config文件,大多数是用配置文件进行配置. <system.serviceModel> <!--服务--> <services> <service> <host /> <endpoint/> </service> </services>

从零开始学WCF3 --配置服务

配置服务概述 在设计和实现服务协定后,即可配置服务.在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到 服务的地址. 服务用于发送和接受消息的传输.(http还是tcp) 消息编码(全文本格式还是优化格式) 服务需要的安全类型. 配置服务的类型 使用配置文件配置 在代码中强制配置 实际上, 编写配置是WCF应用程序编程的主要部分. 使用配置文件配置WCF服务 通过使用配置文件配置WCF服务,可提供在部署时而非设计时提供终结点和服务行为数据的灵活性. 可使用.net framework配

第三节 配置服务

这一节会了解到以下内容: • 配置服务概述 • 配置绑定 • 配置终结点 一.什么是配置服务 1.1 概述 •在设计和实现服务协定后,即可配置服务.在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到服务的地址.服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型. 地址:客户端能找到服务的位置 传输:用HTTP还是TCP等协议 消息编码:文本格式呢还是其他 安全类型:服务要不要安全控制,什么样的安全控制 •两种方式可以进行配置 – 使用配置文件配置 – 在代码中强制配置(在代

ssh配置服务及如何构建私有CA

构建私有CA及SSH配置服务 在了解如何构建私有CA之前,先来熟悉基础概念:CA表示证书颁发机构.PKI表示公钥基础设施.RA证书的注册机构.CRL证书的吊销列表.构架CA时还会涉及到一些加密方式,这里来了解一些加密类型. 几种加密方式及其区别:单项加密:主要用于数据的提取特征值,验证通信内容的完整性.对称加密:成对密钥,且双方密钥相同.一般用于加密通信内容,效率高安全性不好.公钥加密:成对密钥,但是密钥存在公钥和私钥,效率低,安全性好. CA存在的作用和意义:是用来增加通信资源可靠性的证书颁发

Spring Cloud 入门教程(四): 分布式环境下自动发现配置服务

前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息"hello world". 但自己的配置文件中必须配置config server的URL(http://localhost:8888), 如果把config server搬到另外一个独立IP上, 那么作为一个client的hello world应用必须修改自己的bootstrap.yml中的config server的URL地址.这明显是不够方便的. 既然confi

WCF 配置服务 (02)

配置服务概述 • 在设计和实现服务协定后,即可配置服务. 在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到服务的地址.服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型. • 配置服务的类型 – 使用配置文件配置 –  在代码中强制配置 • 实际上,编写配置是 WCF 应用程序编程的主要部分. • 使用配置文件配置WCF服务 – 通过使用配置文件配置 Windows Communication Foundation(WCF) 服务,可提供在部署时而非设计时提供终结点和服务

关于xml作为模板的配置服务系统开发

最近在做一个后台配置系统,其实之前也接触过,所谓的配置系统就是指,将你的网站布局抽象成一个xml模板,里面包括你自定义的节点,然后将变化的部分作为配置项,通过服务将配置选项与模板组装成一个js(这个服务你可以分离出去,也就是分布式部署,这样的话系统需要引用其客户端进行访问,也可以耦合在一起,这个自己看情况选择),用户只需引用js(当然需要在页面上加上事前约定好的dom节点),然后显示. 这种需求一般是一些网站前端经常变化,然后需要每次开发人员改动html后都需要发布站点,比较繁琐. 今天主要介绍

oracle 配置服务端

oracle 配置服务端,类似我们配置java环境一样 防止乱码的配置: 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 选择数据库的配置(重要): 变量值:TNS_ADMIN 变量名:D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN(就是你的oracle安装的目录) 这是我的path配置: D:\app\Administrator\product\11.2.0\dbhome

获取网络访问权限套餐提供国外网络访问配置服务外网访问服务

获取网络访问权限套餐提供国外网络访问配置服务外网访问服务 可以访问youtube等国外网站 获取网络访问权限套餐 预览:http://www.tudou.com/v/56Qa6nyxTg4/&amp;rpid=24434369&amp;resourceId=24434369_04_05_99/v.swf 提供YouTube.Google+.Facebook.Twitter.App Store.维基百科等最全网站访问权限,终身享受远程设置套餐服务. 预览视频 http://www.tudou

配置服务 apollo 部署实践

前言 ????Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. github 地址:https://github.com/ctripcorp/apollo 服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器 Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Sp