zoukankan      html  css  js  c++  java
  • centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm的文件系统集群

    centos6.5环境基于corosync+cman+rgmanager实现RHCS及iscsi+gfs2+clvm文件系统集群

    一、环境准备

    服务器列表:

    ansible server : 192.168.8.40  
    node2.chinasoft.com: 192.168.8.39  
    node3.chinasoft.com: 192.168.8.41  
    node4.chinasoft.com: 192.168.8.42  
    iscsi设备:192.168.8.43


    1、在各节点上配置/etc/hosts文件,不使用DNS解析域名
    192.168.8.39 node2.chinasoft.com node2 
    192.168.8.41 node3.chinasoft.com node3 
    192.168.8.42 node4.chinasoft.com node4  

    2、时间同步、在ansible服务器配置免密码访问node2、node3、node4


    在ansible服务器中添加rhcs组
    # vim /etc/ansible/hosts
    加入如下内容:

    [rhcs]
    node2.chinasoft.com
    node3.chinasoft.com
    node4.chinasoft.com

    时间同步
    # ansible rhcs -m shell -a "ntpdate -u 192.168.8.102"
    node2.chinasoft.com | success | rc=0 >>
     3 May 09:13:11 ntpdate[1791]: step time server 192.168.8.102 offset 393253.345476 sec
    
    
    node4.chinasoft.com | success | rc=0 >>
     3 May 09:13:11 ntpdate[1775]: step time server 192.168.8.102 offset 393211.983109 sec
    
    
    node3.chinasoft.com | success | rc=0 >>
     3 May 09:13:12 ntpdate[1803]: step time server 192.168.8.102 offset 339279.739826 sec


    4、关闭几台服务器上的防火墙和selinux(避免干扰)

    二、安装corosync、cman、rgmanager并配置集群

    # ansible rhcs -m yum -a"name=corosync state=present"
    
    
    # ansible rhcs -m yum -a "name=cman state=present"
    
    
    # ansible rhcs -m yum -a "name=rgmanager state=present"


    说明:
    不支持在集群节点中使用 NetworkManager 。如果已经在集群节点中安装了 NetworkManager, 您应该 删除或者禁用该程序。



    RHCS的配置文件/etc/cluster/cluster.conf,其在每个节点上都必须有一份,且内容均相同,其默认不存在,因此需要事先创建,ccs_tool命令可以完成此任务。另外,每个集群通过集群ID来标识自身,因此,在创建集群配置文件时需要为其选定一个集群名称,这里假设其为mycluster。此命令需要在集群中的某个节点上执行。
    在其中的一个节点上创建集群mycluster
    # ccs_tool create mycluster
    # cd /etc/cluster
    # ls
    cluster.conf  cman-notify.d
    # vim cluster.conf 
    可以看到集群的配置文件中没有集群的信息
    <?xml version="1.0"?>
    <cluster name="mycluster" config_version="1">
    
    
      <clusternodes>
      </clusternodes>
    
    
      <fencedevices>
      </fencedevices>
    
    
      <rm>
        <failoverdomains/>
        <resources/>
      </rm>
    </cluster>


    通过# ccs_tool -h可以查看ccs_tool的命令帮助
    # ccs_tool addnode
    Usage: ccs_tool addnode [options] <nodename> [<fencearg>=<value>]...
     -n --nodeid        Nodeid (required)
     -v --votes         Number of votes for this node (default 1)
     -a --altname       Alternative name/interface for multihomed hosts
     -f --fence_type    Name reference of fencing to use
     -c --configfile    Name of configuration file (/etc/cluster/cluster.conf)
     -o --outputfile    Name of output file (defaults to same as --configfile)
     -h --help          Display this help text
    
    
    Examples:
    
    
    Add a new node to default configuration file:
      ccs_tool addnode newnode1 -n 1 -f wti7 port=1
    
    
    Add a new node and dump config file to stdout rather than save it
      ccs_tool addnode -o- newnode2 -n 2 -f apc port=1


    添加集群节点node2、node3和node4
    票数为1,节点的id分别为1、2、3
    # ccs_tool addnode node2.chinasoft.com -n 1 -v 1
    # ccs_tool addnode node3.chinasoft.com -n 2 -v 1
    # ccs_tool addnode node4.chinasoft.com -n 3 -v 1


    可以看到cluster.conf文件中已经有了集群节点的信息
    <?xml version="1.0"?>
    <cluster name="mycluster" config_version="4">
    
    
      <clusternodes>
      <clusternode name="node2.chinasoft.com" votes="1" nodeid="1"/><clusternode name="node3.chinasoft.com" votes="1" nodeid="2"/><clusternode name="node4.chinasoft.com" votes="1" nodeid="3"/></clusternodes>
    
    
      <fencedevices>
      </fencedevices>
    
    
      <rm>
        <failoverdomains/>
        <resources/>
      </rm>
    </cluster>


    将node2上的配置文件拷贝到node3和Node4上
    # scp cluster.conf node3.chinasoft.com:/etc/cluster
    # scp cluster.conf node4.chinasoft.com:/etc/cluster


    在节点上安装ricci工具启动服务并设置开机自启动
    # ansible rhcs -m yum -a "name=ricci state=present"
    # ansible rhcs -m service -a "name=ricci state=started enabled=yes"


    此时分别在node2、node3、node4上执行启动cman服务
    # service cman start
    Starting cluster: 
       Checking if cluster has been disabled at boot...        [  OK  ]
       Checking Network Manager...                             [  OK  ]
       Global setup...                                         [  OK  ]
       Loading kernel modules...                               [  OK  ]
       Mounting configfs...                                    [  OK  ]
       Starting cman...                                        [  OK  ]
       Waiting for quorum...                                   [  OK  ]
       Starting fenced...                                      [  OK  ]
       Starting dlm_controld...                                [  OK  ]
       Tuning DLM kernel config...                             [  OK  ]
       Starting gfs_controld...                                [  OK  ]
       Unfencing self...                                       [  OK  ]
       Joining fence domain...                                 [  OK  ]


    执行ccs_tool lsnode命令可以看到节点已经启动
    # ccs_tool lsnode
    
    
    Cluster name: mycluster, config_version: 4
    
    
    Nodename                        Votes Nodeid Fencetype
    node2.chinasoft.com                1    1    
    node3.chinasoft.com                1    2    
    node4.chinasoft.com                1    3 


    三、配置iscsi服务端和客户端

    在192.168.8.43节点上安装scsi服务端
    # yum install -y scsi-target-utils


    在target上添加一块硬盘sdb用作客户端的存储,在sdb上添加两个主分区大小都为20G


    # fdisk /dev/sdb
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0x21c2120e.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-15665, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G
    
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (2613-15665, default 2613): 
    Using default value 2613
    Last cylinder, +cylinders or +size{K,M,G} (2613-15665, default 15665): +20G
    
    
    Command (m for help): w
    The partition table has been altered!
    
    
    Calling ioctl() to re-read partition table.
    Syncing disks.



    使分区生效:
    # partx -a /dev/sdb
    BLKPG: Device or resource busy
    error adding partition 1
    BLKPG: Device or resource busy
    error adding partition 2
    
    
    # cat /proc/partitions 
    major minor  #blocks  name
    
    
       8       16  125829120 sdb
       8       17   20980858 sdb1
       8       18   20980890 sdb2
       8        0   83886080 sda
       8        1     512000 sda1
       8        2   83373056 sda2
     253        0   20480000 dm-0
     253        1    4096000 dm-1
     253        2   15360000 dm-2
     253        3   20480000 dm-3
     253        4   10240000 dm-4
    


    配置target服务端
    # vim /etc/tgt/targets.conf


    <target iqn.2016-05.com.chinasoft.san:1>
        backing-store /dev/sdb1
        backing-store /dev/sdb2
        initiator-address 192.168.8.0/24
    </target>


    启动tgtd服务
    # service tgtd start
    Starting SCSI target daemon:                               [  OK  ]
    可以看到tgtd服务的3260端口已开启,说明服务正常启动
    # ss -tnlp | grep tgtd
    LISTEN     0      128                      :::3260                    :::*      users:(("tgtd",1700,5),("tgtd",1701,5))
    LISTEN     0      128                       *:3260                     *:*      users:(("tgtd",1700,4),("tgtd",1701,4))


    查看配置
    # tgtadm -L iscsi -o show -m target
    Target 1: iqn.2016-05.com.chinasoft.san:1
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET     00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: null
                Backing store path: None
                Backing store flags: 
            LUN: 1
                Type: disk
                SCSI ID: IET     00010001
                SCSI SN: beaf11
                Size: 21484 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/sdb1
                Backing store flags: 
            LUN: 2
                Type: disk
                SCSI ID: IET     00010002
                SCSI SN: beaf12
                Size: 21484 MB, Block size: 512
                Online: Yes
                Removable media: No
                Prevent removal: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/sdb2
                Backing store flags: 
        Account information:
        ACL information:
            192.168.8.0/24




    在各节点安装iscsi客户端
    # ansible rhcs -m yum -a "name=iscsi-initiator-utils state=present"
    
    
    # ansible rhcs -m shell -a 'echo "InitiatorName=`iscsi-iname -p iqn.2016-05.com.chinasoft` > /etc/iscsi/initiatorname.iscsi"'
    node2.chinasoft.com | success | rc=0 >>
    InitiatorName=iqn.2016-05.com.chinasoft:705b9bd97fc7 > /etc/iscsi/initiatorname.iscsi
    
    
    node3.chinasoft.com | success | rc=0 >>
    InitiatorName=iqn.2016-05.com.chinasoft:27b437d5e50 > /etc/iscsi/initiatorname.iscsi
    
    
    node4.chinasoft.com | success | rc=0 >>
    InitiatorName=iqn.2016-05.com.chinasoft:b68414f44a7f > /etc/iscsi/initiatorname.iscsi


    启动各节点iscsi和iscsid服务,并设置开机自动启动
    # ansible rhcs -m service -a "name=iscsi state=started enabled=yes"


    # ansible rhcs -m service -a "name=iscsid state=started enabled=yes"


    让iscsi客户端发现服务端设备
    # ansible rhcs -m shell -a "iscsiadm -m discovery -t sendtargets -p 192.168.8.43"
    # ansible rhcs -m shell -a "iscsiadm -m node -T iqn.2016-05.com.chinasoft.san:1 -p 192.168.8.43 -l"


    验证是否找到设备
    # ansible rhcs -m shell -a "fdisk -l /dev/sd[a-z]"


    四、配置使用gfs2文件系统

    在集群节点上安装gfs2-utils
    # ansible rhcs -m yum -a "name=gfs2-utils state=present"


    mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:

    -b BlockSize:指定文件系统块大小,最小为512,默认为4096;
    -J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;
    -j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;
    -p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;
    -t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群文件系统;此外,同一个集群内,每个文件系统的名称必须惟一;
    


    在其中的节点node2上添加一个10G的主分区


    # fdisk /dev/sdb
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0x0a8dee2d.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.
    
    
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
    
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-20489, default 1): 
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-20489, default 20489): +10G
    
    
    Command (m for help): w
    The partition table has been altered!
    
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    
    查看分区是否生效
    # cat /proc/partitions 
    major minor  #blocks  name
    
    
       8        0  125829120 sda
       8        1     512000 sda1
       8        2  125316096 sda2
     253        0   30720000 dm-0
     253        1    4096000 dm-1
     253        2   25600000 dm-2
     253        3   30720000 dm-3
     253        4   10240000 dm-4
       8       16   20980858 sdb
       8       17   10486768 sdb1
       8       32   20980890 sdc
    
    
    # cman_tool status
    Version: 6.2.0
    Config Version: 4
    Cluster Name: mycluster
    Cluster Id: 65461
    Cluster Member: Yes
    Cluster Generation: 16
    Membership state: Cluster-Member
    Nodes: 3
    Expected votes: 3
    Total votes: 3
    Node votes: 1
    Quorum: 2  
    Active subsystems: 7
    Flags: 
    Ports Bound: 0  
    Node name: node2.chinasoft.com
    Node ID: 1
    Multicast addresses: 239.192.255.181 
    Node addresses: 192.168.8.39
    


    创建sdb1为lock_dlm 分布式文件系统的格式
    # mkfs.gfs2 -j 3 -t mycluster:webstore -p lock_dlm /dev/sdb1
    This will destroy any data on /dev/sdb1.
    It appears to contain: data


    Are you sure you want to proceed? [y/n] y


    Device:                    /dev/sdb1
    Blocksize:                 4096
    Device Size                10.00 GB (2621692 blocks)
    Filesystem Size:           10.00 GB (2621689 blocks)
    Journals:                  3
    Resource Groups:           41
    Locking Protocol:          "lock_dlm"
    Lock Table:                "mycluster:webstore"
    UUID:                      a5a68ae5-4a70-2f52-bd0b-cea491a46475


    将/dev/sdb1挂载到mnt上
    # mount /dev/sdb1 /mnt
    # cd /mnt
    # ls
    # mount
    /dev/mapper/vg_node2-root on / type ext4 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    devpts on /dev/pts type devpts (rw,gid=5,mode=620)
    tmpfs on /dev/shm type tmpfs (rw)
    /dev/sda1 on /boot type ext4 (rw)
    /dev/mapper/vg_node2-data on /data type ext4 (rw)
    /dev/mapper/vg_node2-usr on /usr type ext4 (rw)
    /dev/mapper/vg_node2-web on /web type ext4 (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    none on /sys/kernel/config type configfs (rw)
    /dev/sdb1 on /mnt type gfs2 (rw,relatime,hostdata=jid=0)


    将fstab拷贝到当前目录
    # cp /etc/fstab ./
    并编辑fstab加入新内容


    在node3和Node4上分别挂载到/mnt下
    # partx -a /dev/sdb
    # mount -t gfs2 /dev/sdb1 /mnt
    可以看到各节点的fstab文件已经OK
    # cat /mnt/fstab


    在其中一个节点观察fstab文件
    # tail -f /mnt/fstab 
    /dev/mapper/vg_node2-data /data                   ext4    defaults        1 2
    /dev/mapper/vg_node2-usr /usr                    ext4    defaults        1 2
    /dev/mapper/vg_node2-web /web                    ext4    defaults        1 2
    /dev/mapper/vg_node2-swap swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    new line
    node2.chinasoft.com
    hello world
    hello world2



    在另外的节点写入内容,其他节点能同步
    # echo "hello world" >> /mnt/fstab
    # echo "hello world2" >> /mnt/fstab


    添加日志
    # gfs2_jadd -j 1 /dev/sdb1
    Filesystem:            /mnt
    Old Journals           3
    New Journals           4


    将文件系统锁住
    # gfs2_tool freeze /mnt
    文件无法写入内容
    # echo "hllo world 3" >> /mnt/fstab
    解冻后可以看到顺利写入数据
    # gfs2_tool unfreeze /mnt
    获取信息
    # gfs2_tool gettune /mnt
    incore_log_blocks = 8192
    log_flush_secs = 60
    quota_warn_period = 10
    quota_quantum = 60
    max_readahead = 262144
    complain_secs = 10
    statfs_slow = 0
    quota_simul_sync = 64
    statfs_quantum = 30
    quota_scale = 1.0000   (1, 1)
    new_files_jdata = 0


    将日志的写入时间调整为120秒
    # gfs2_tool settune /mnt log_flush_secs 120


    获取日志文件的信息
    # gfs2_tool journals /mnt
    journal2 - 128MB
    journal3 - 128MB
    journal1 - 128MB
    journal0 - 128MB
    4 journal(s) found.


    在各节点上将文件系统添加到挂载配置中
    # vim /etc/fstab


    /dev/sdb1               /mnt                    gfs2    defaults        0 0


    添加一个10G的分区,并调整为LVM格式
    # fdisk /dev/sdb
    
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (10242-20489, default 10242): 
    Using default value 10242
    Last cylinder, +cylinders or +size{K,M,G} (10242-20489, default 20489): +10G
    
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    
    Command (m for help): w
    The partition table has been altered!
    
    
    Calling ioctl() to re-read partition table.
    
    
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    Syncing disks.
    
    
    # partx -a /dev/sdb
    BLKPG: Device or resource busy
    error adding partition 1
    # partx -a /dev/sdb
    BLKPG: Device or resource busy
    error adding partition 1
    BLKPG: Device or resource busy
    error adding partition 2

    执行两次 partx -a /dev/sdb 让各节点能够识别sdb2
    # ansible rhcs -m shell -a "partx -a /dev/sdb"

    五、配置使用cLVM(集群逻辑卷)

    RHCS的核心组件为cman和rgmanager,其中cman为基于openais的“集群基础架构层”,rgmanager为资源管理器。RHCS的集群中资源的配置需要修改其主配置文件/etc/cluster/cluster.xml实现,这对于很多用户来说是比较有挑战性的,因此,RHEL提供了system-config-cluster这个GUI工具,其仅安装在集群中的某一节点上即可,而cman和rgmanager需要分别安装在集群中的每个节点上。这里选择将此三个rpm包分别安装在了集群中的每个节点上,这可以在ansible跳板机上执行如下命令实现:
    # ansible rhcs -m yum -a "name=lvm2-cluster state=present"


    编辑各节点上的/etc/lvm/lvm.conf文件,将locking_type改为3
    因为3类型可以用在集群锁中(Type 3 uses built-in clustered locking)
    # ansible rhcs -m shell -a 'sed -i "s@^([[:space:]]*locking_type).*@1 = 3@g" /etc/lvm/lvm.conf'

    或者执行

    # ansible rhcs -m shell -a "lvmconf --enable-cluster"


    设置clvmd开机自启动
    # ansible rhcs -m service -a "name=clvmd state=started enabled=yes"


    在node2节点上配置clvm
    创建卷组和逻辑卷:
    # cd
    # pvcreate /dev/sdb2


    # pvs
      PV         VG       Fmt  Attr PSize   PFree 
      /dev/sda2  vg_node2 lvm2 a--  119.51g 22.83g
      /dev/sdb2           lvm2 a--   10.00g 10.00g


    # vgcreate clustervg /dev/sdb2
    # lvcreate -L 5G -n clusterlv clustervg
    -j 2即指定两个日志系统
    # mkfs.gfs2 -p lock_dlm -j 2 -t mycluster:clvm /dev/clustervg/clusterlv


    在各个节点上执行以下命令进行挂载
    # mount /dev/clustervg/clusterlv /media/ -t gfs2


    当挂载到第三个节点的时候报错,前面格式化的时候-j 2起到了作用
    # mount /dev/clustervg/clusterlv /media
    Too many nodes mounting filesystem, no free journals


    通过在已经成功挂载的节点上执行添加日志系统,重新挂载成功
    # gfs2_jadd -j 1 /dev/clustervg/clusterlv 
    Filesystem:            /media
    Old Journals           2
    New Journals           3


    扩容,将clusterlv增加2G空间
    # lvextend -L +2G /dev/clustervg/clusterlv
    # gfs2_grow /dev/clustervg/clusterlv 

    至此,基于corosync+cman实现iscsi设备的分布式文件系统配置已完成

  • 相关阅读:
    SQL舊面版與標准版不能互導數據
    今天總算可以繼續寫日記了
    MDAC2.7没有安装,控件不能运行
    希望5月份网络能开通
    SQLITE入门逐步讲解SQLITE命令行(一)
    C#使用SQLite数据库的代码示例
    红外遥控 Arduino 实例
    SQLite数据库是中小站点CMS的最佳选择
    防止 SQLite 数据库被下载的方法
    关于Linux下的Grep命令简介
  • 原文地址:https://www.cnblogs.com/reblue520/p/6239805.html
Copyright © 2011-2022 走看看