glusterfs高可用--IP Failover(五)

glusterfs高可用--IP Failover

    IP Failover原理类似于双网卡的bond、应用的负载IP。

    1)通过ctdb实现vip访问卷

    2)vip访问卷的方式:不适合分布式,只适用于复制式

    3)在分布式环境中测试,同时创建多个文件时,

        由于glusterfs volume中故障节点的目录未删除,依然会往故障节点分布数据,

        然而节点已经故障无法写入,这时会报错,数据丢失。

上草图~

   glusterfs高可用--IP Failover(五)

这里我们使用CTDB(cluster trivial database)实现---属于samba里面的东西

1、安装CTDB包(node1、node2都安装)

    # yum -y install ctdb

2、配置CTDB(指定给哪个卷配置CTDB)

    # cd /var/lib/glusterd/hooks/1/start/post/

    # vim S29CTDBsetup.sh

        META="v1"    #也可以写all,所有的卷

    # cd /var/lib/glusterd/hooks/1/stop/pre

    # vim S29CTDB-teardown.sh

        META="v1"    #也可以写all,所有的卷

3、在/etc/ctdb目录下创建配置文件

     nodes:组成卷的所有节点IP地址

     public_addresses:设置VIP地址,指定关联节点的网卡

        # cd /etc/ctdb

        # echo 192.168.122.101 > nodes

        # echo 192.168.122.102 >> nodes

        # echo "192.168.122.210/24 eth0" > public_addresses  #指定VIP地址;关联节点上的哪个网卡

    # systemctl start ctdb

    # systemctl enable ctdb

    日志文件:/var/log/log.ctdb

    节点1上查看VIP信息

    # ctdb -v ip 

        Public IPs on node 0

        192.168.122.210 node[0] active[eth0] available[eth0] configured[eth0]

    节点2上查看VIP信息

    # ctdb -v ip 

        Public IPs on node 1

        192.168.122.210 node[0] active[] available[eth0] configured[eth0]

4、安装samba包

    # yum -y install samba

    # vim /etc/samba/smb.conf

        workgroup = MYGROUP

        server string = Samba Server Version %v

        clustering = yes     #增加这行

5、停止卷    

    # gluster volume stop v1

6、关闭stat-prefetch预取功能

    # gluster volume set v1 stat-prefetch off

7、开启非安全访问模式

    # gluster volume set v1 server.allow-insecure on 

8、启动samba、设置开机自启

    # systemctl restart smb

    # systemctl enable smb

9、启动卷

    # gluster volume start v1

    # gluster volume info v1

        Volume Name: v1

        Type: Distribute

        Status: Started

        Brick1: node1:/xx/data

        Brick2: node2:/yy/data

        Options Reconfigured:

        server.allow-insecure: on

        performance.stat-prefetch: off

        performance.readdir-ahead: on

10、客户端挂载测试

    # showmount -e 192.168.122.210

        Export list for 192.168.122.210:

        /v1 *

    # mount 192.168.122.210:/v1 /mnt

    # touch /mnt/aa{1..10}

    节点1上查看

    # ls /xx/data/

        aa1  aa3  aa4  aa8

    节点2上查看

    # ls /yy/data/

        aa10  aa2  aa5  aa6  aa7  aa9  lockfile

11、模拟node1故障

    # shutdown -h now

    注意:节点故障时,会有个切换过程,会出现闪断

    节点2上查看VIP信息

    # ctdb -v ip

        Public IPs on node 1

        192.168.122.210 node[1] active[eth0] available[eth0] configured[eth0]

    节点2上查看数据(node1中的数据不会迁移,数据丢失)

    # ls /yy/data/

        aa10  aa2  aa5  aa6  aa7  aa9  lockfile

    客户端测试:继续写入(创建单个文件时正常,同时创建多个文件时报错)

    # touch /mnt/bb

    # touch /mnt/cc

    # touch /mnt/dd{1..10}     #部分文件写入报错,丢失

       touch: 无法创建"/mnt/dd3": 输入/输出错误

       touch: 无法创建"/mnt/dd5": 输入/输出错误

       touch: 无法创建"/mnt/dd6": 输入/输出错误

       touch: 无法创建"/mnt/dd7": 输入/输出错误

    结论:

        由于gluster volume未删除故障节点的目录,

        在多个文件同时写入时,依然会使用分布的方式,

        而此时故障节点的目录已经不能访问了,所以分配给故障节点的文件报错,丢失。

        

        这种vip访问卷的方式,不适用于分布式环境,只适用于复制式。


上一篇:分布式文件系统--GlusterFS架构介绍


下一篇:c# – 在Windows 10中向Text to Speech Engine添加新语音