• OCFS2 Fencing


    OCFS2 FencingPosted on February 8, 2011 by Abdulhameed Basha

    I am very excited to start writing my experience with Oracle products
    and solutions. In this blog am going to detail on OCFS2 fencing technology.

    We are setting up a new data center for Oracle products,
    for which we have got SUN servers X4170,X4270 and X4470,
    SUN SAN storage 6180, SAN Switches and Fiber Channel
    HBA (Host Bus Adapter). We have configured SAN storage and allocated
    LUNs to the servers for Oracle EBS R12.1, OBI and Hyperian Applications.

    We created a required partitions and OCFS2 file system on new devices
    for our Oracle EBS R12.1 RAC database and shared Applications File system.
    OCFS2 is certified for Shared Application file system, check ID .
    After configuring our file system and mounted, we started to test
    various scenarios to verify the stability of the setup. To our surprise noticed
    that server is getting rebooted when we removed all HBAs connected to the
    server or powered off SAN switch.

    On analysis we found that it is a expected behavior of OCFS2 which is called “Fencing”.

    Fencing is the act of forcefully removing a node from a cluster.
    A node with OCFS2 file system mounted will fence itself when it
    realizes that it does not have quorum in a degraded cluster.
    It does this so that other nodes won’t be stuck trying to access its resources.
    In earlier versions of OCFS2, User reported that nodes are hanging
    during fencing. From version OCFS2 1.2.5, Oracle no longer uses
    “panic” state for fencing instead it uses “machine restart”.

    Let us now see, how exactly OCFS2 forces kernel to restart on fencing.

    * After configuring OCFS2 and started cluster service O2CB, there will be a heartbeat system file in which every node writes its presence every 2 seconds to its block in the file.
    * Block offset is equal to its global node number, that is node 0 will write to the first block in the file, node 1 to the second block and so on.
    * All nodes will read the heartbeat system file every 2 seconds.
    * As long as timestamp is changing that node is consider alive.
    * A node self-fences if it fails to update its timestamp for ((O2CB_HEARTBEAT_THRESHOLD – 1) * 2) seconds.
    * The [o2hb-xx] kernel thread, after every timestamp write, sets a timer to panic the system after that duration.
    * If the next timestamp is written within that duration, as it should, it first cancels old timer before setting up a new one.
    * If for some reason the [o2hb-x] kernel thread is unable to update the timestamp for O2CB_HEARTBEAT_THRESHOLD (default=7 or 31) loops and thus be deemed dead by other nodes in the cluster and OCFS2 forces kernel to restart.
    * Once a node is deemed dead, the surviving node which manages cluster, lock the dead node’s journal, recovers it by replaying the journal.

    From the above steps it is evident that the parameter O2CB_HEARTBEAT_THRESHOLD=(((timeout in secs) / 2) + 1), is very important in defining the time line to restart the server.
    The default value is 31, which means if the node does not update the timestamp in the heartbeat system file in 60 sec then that node restarts. This value is quite low for RAC environment.

    Assume that we have a 2 controller SAN storage and configured active/passive that is at any particular time only 1 controller path is active other is passive and used for failover. OCFS2 forces the kernel to restart (after the timeout) when a cable to a SAN device is cut even if the SAN configuration was going to perform failover.

    To over come this we have to increase the value of O2CB_HEARTBEAT_THRESHOLD. If you want to increase to 120sec then the value should be 61.

    Steps to change O2CB_HEARTBEAT_THRESHOLD
    =====================================
    1. Stop O2CB services in the server
    #service O2CB stop

    2. Update the O2CB configuration file with required value for O2CB_HEARTBEAT_THRESHOLD

    # 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
    without typing an answer will keep that current value. Ctrl-C
    will abort.

    Load O2CB driver on boot (y/n) [y]:
    Cluster stack backing O2CB [o2cb]:
    Cluster to start on boot (Enter “none” to clear) [ocfs2]:
    Specify heartbeat dead threshold (>=7) [31]: 61
    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 filesystem “ocfs2_dlmfs”: OK
    Mounting ocfs2_dlmfs filesystem at /dlm: OK
    Starting O2CB cluster ocfs2: OK
    #

    Alternate way to update the value, is to edit file /etc/sysconfig/o2cb and start O2CB service.

    3. Check the status of O2CB
    # /etc/init.d/o2cb status
    Driver for “configfs”: Loaded
    Filesystem “configfs”: Mounted
    Driver for “ocfs2_dlmfs”: Loaded
    Filesystem “ocfs2_dlmfs”: Mounted
    Checking O2CB cluster ocfs2: Online
    Heartbeat dead threshold = 61
    Network idle timeout: 30000
    Network keepalive delay: 2000
    Network reconnect delay: 2000
    Checking O2CB heartbeat: Active
    #

    References
    ========
    1. OCFS2: A Cluster File System for Linux – User’s Guide for Release 1.4
    2. OCFS2 Kernel Panics on SAN Failover [ID ]
    3. OCFS2 1.2 – FREQUENTLY ASKED QUESTIONS [ID ]
    4. Heartbeat/Voting/Quorum Related Timeout Configuration for Linux, OCFS2, RAC Stack to Avoid Unnecessary Node Fencing, Panic and Reboot [ID ]

    In my next blog, I will explain the detail steps for configuring multipath using native device mapper(DM) in Linux.

  • 相关阅读:
    js- 类数组对象
    js- caller、 callee
    ES6 声明变量的6种方法
    Vue 之 element-ui upload组件的文件类型
    js中call、apply和bind的区别
    Vue 之 Vue.nextTick()
    DocumentFragment --更快捷操作DOM的途径
    Js 编程题汇总
    &#65279
    网站添加变量后变成空白
  • 原文地址:https://www.cnblogs.com/heidsoft/p/3519605.html
Copyright © 2020-2023  润新知