Glusterfs(distribute) + DRBD + heartbeat + mon 实现分布式文件系统2

简介:
//看看刚启动后的drbd状态:

 

Drbd-1# cat /proc/drbd

version: 8.3.5 (api:88/proto:86-91)

GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29

 

 1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----

    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:6289188

 

drbd-2 # cat /proc/drbd

version: 8.3.5 (api:88/proto:86-91)

GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@rac02, 2010-04-15 15:28:19

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----

ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:6289188

 

//第一行的ro表示两台主机的状态,都是备机状态.ds是磁盘状态,都是不一致状态.我们设置drbd-1为主节点:

drbd-1 # drbdsetup /dev/drbd0  primary –o   //先用drbdsetup 来做,以后就可以用 drbdadm . #drbdadm primary db

 

drbd-1 # cat /proc/drbd

version: 8.3.5 (api:88/proto:86-91)

GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29

 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----

   ns:21420 nr:0 dw:0 dr:29600 al:0 bm:1 lo:1 pe:8 ua:256 ap:0 ep:1 wo:b oos:6268004

   [>....................] sync'ed:  0.4% (6120/6140)M       //表示同步了0.4%

   finish: 0:14:46 speed: 7,060 (7,060) K/sec

 

drbd-1 # cat /proc/drbd

version: 8.3.5 (api:88/proto:86-91)

GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C
ns:6289188 nr:0 dw:0 dr:6289188 al:0 bm:384 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

 

//第一次同步完成之后,就可以对drbd的设备创建文件系统了

 

drbd-1 # mkfs.ext3 /dev/drbd0       //这里你要是还没有格式化过,就进行格式化

drbd-1 # mount /dev/drbd0 /home/gluster/

drbd-1 # df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             9.5G  3.3G  5.8G  37% /

/dev/sda3             9.0G  273M  8.3G   4% /home

tmpfs                  62M     0   62M   0% /dev/shm

/dev/drbd0            6.0G  541M  5.0G   3% /home/gluster

 

//这里恢复我们之前保存的数据

#dd if=/root/backup  of=/dev/drbd0


//
测试2个节点的数据同步,先在1节点上创建3个文件 1  2  3 ,把第一个节点设置为从节点并且卸载第一个节点的磁盘2节点上设置为主节点并且进行挂载,看数据有没有同步过来,在节点2上创建3个文件 4 5 6 ,再到节点1上看文件有没有同步过来,要是都可以同步,那就说明drbd的同步已经成功了.我这里就不输出相关信息了.

 

//glusterfs客户端的配置信息

 

#vi /usr/local/etc/glusterfs/glusterfs.vol

 

volume client1

  type protocol/client

  option transport-type tcp/client

  option remote-host 192.168.0.70       //这里是heartbeat
                                          虚拟IP

  option remote-port 6996

  option remote-subvolume locker

end-volume

 

volume bricks

type cluster/distribute

subvolumes client1

end-volume

 

#glutserfs  -l /tmp/glutser.log -f /usr/local/etc/glusterfs/glusterfs.vol  /home/gluster

# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2              30G  3.3G   25G  12% /

udev                  4.0G  116K  4.0G   1% /dev

/dev/sda3              89G   77G  7.5G  92% /home

glusterfs#/usr/local/etc/glusterfs/glusterfs.vol

                      6.0G  541M  5.0G   3% /home/gluster

 

//可以看到glusterfs客户端已经挂载成功.

 

 

//heartbeat的配置,在每个节点上执行下面的命令

 

# cp   /usr/share/doc/heartbeat-2.0.7/ha.cf  /etc/ha.d/

# cp   /usr/share/doc/heartbeat-2.0.7/authkeys  /etc/ha.d/

# cp   /usr/share/doc/heartbeat-2.0.7/ha  /etc/ha.d/

# useradd  hacluster

# useradd  haclient

# cd /etc/ha.d/

# vi ha.cf

 

#日志文件位置

logfile /var/log/ha-log

#指定主备服务器多久发送一次心跳

keepalive 2

#指定30秒没有收到对方心跳就认为对方已经DOWN

deadtime 30

#10秒没有收到心跳,便发出警报。

warntime 10

#对方DOWN120秒重新检测一次。

initdead 120

#指定监听端口

udpport 694

#心跳监听网口,这里为eth0

bcast   eth0  

#主节点恢复后,自动收回资源。

auto_failback off

#指定主备服务器的主机名称,即在hosts文件中指定的

第一个node为主服务器,第二个node为备服务器。

node        drbd-1      //服务器的主机名

node        drbd-2

#192.168.0.59,192.168.0.60这两个IP都不能ping通时对方即开始接管资源.

ping_group group1 192.168.0.59 192.168.0.60

#启用ipfail脚本

respawn root /usr/lib/heartbeat/ipfail

#指定运行ipfail的用户

apiauth ipfail gid=root uid=root

 

# vi authkeys

 

auth 1

1 crc

 

 # chmod 600 authkeys

 

# vi haresources

 

drbd-1 drbddisk   Filesystem::/dev/drbd0::/home/gluster::ext3    192.168.0.70

 

资源组的第一列是我们在ha.cf配置文件中的node之一,而且应该是当前准备作为primary节点的那一个node.

上面资源组中的各项含义如下:

 drbd-1            
当前primary节点名(uname -n
        
drbddisk          
告诉heartbeat要管理drbd的资源


Filesystem        
这里是告诉heartbeat需要管理文件系统资源,其实实际上就是执行mount/umount命令,后面的”::”符号之后是跟的Filesystem的参数设备名和mount

 

192.168.0.70      提供一个虚拟IP

 

# chkconfig heartbeat on

# service heartbeat start 

//moniter内容如下,我这里是把moniter放到chkconfig执行的,这个脚本是监控glutser是否挂掉的,要是挂掉,就进行heartbeat的切换.

 

#!/bin/bash    

# chkconfig: 345 99 33                                                    

# description: start gluster moniter                                     

logfile=/var/log/moniter.log    

date=`(date +%y-%m-%d--%H:%M:%S)`    

email=xxxxxxx@139.com 

sleeptime=60    

ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | head -1)    

while [ 0 ] 

do 

ps aux |grep gluster |grep -v "grep gluster" 

if [[ $? != 0 ]]    

then    

        mail -s "{$ip}_glusterfs connect lost the srcprits fix it now " $email 

        service heartbeat stop    

        glusterfs -f /usr/local/etc/glusterfs/glusterfsd.vol 

        ps aux |grep gluster |grep -v "grep gluster" 

        if [ $? == 0 ]    

        then    

             echo "==============>$date<=====================glusterfs UP complete!">>$logfile    

             mail -s "{$ip}_glusterfs up now " $email 

             sleep $sleeptime 

             service heartbeat start 

             netstat -lntpu | grep 694 

             if [ $? == 0 ] 

             then 

                    echo "heartbeat start complete!">>$logfile 

             else 

                    echo "heartbeat start fail!">>$logfile 

                    mail -s "{$ip} heartbeat can't to up please fix it !" 

             fi 

    

        else             

             echo "==============>$date<=====================glusterfs fail!">>$logfile 

             mail -s "{$ip}_glusterfs fail now " $email 

     fi    

else 

        echo " glusterfs healthy!" 

fi 

    sleep 10    

done 

 
//看下master节点磁盘是否挂载成功,如下表示启动heartbeat的时候磁盘会自动挂载上.

 

drbd-1# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             9.5G  3.3G  5.7G  37% /

/dev/sda3             9.0G  418M  8.1G   5% /home

tmpfs                  62M     0   62M   0% /dev/shm

/dev/drbd0            6.0G  541M  5.5G   3% /home/gluster

 

我们去客户端上进行挂载看下读写数据是否正常,然后看下数据有没有写到master节点的相关分区上.我这里进行了相关的测试是正常的.

 

然后接下来测试下heartbeat切换是否正常,我这里分3种情况情况进行测试:

 

1.   停掉masterheartbeat,看下磁盘有没有被释放到slave文件服务器上.我这里测试是正常的,切换大概需要10秒钟的样子,这里要提一点在这十秒钟里面客户端是无法访问文件系统的,当虚拟ip切换到slave服务器上之后,客户端自动就可以连接访问了.

2.   master服务器进行关闭,看是否正常的切换到slave服务器上

3.   master服务器中上gluster进程kill,看是否正常切换到slave服务器上.

 

下面测试读写速度,我在我这里测试写速度最高可以达到9M左右,写速度基本都在10M左右,由于我是用的虚拟机做的相关环境,在生产环境下应该读写速度应该更快些.

 

后面打算测试下高并发的情况下,heartbeat的切换以及drbd的同步是否依然可以正常运行.

希望此篇文章可以帮助到需要解决文件系统的朋友们,如果有什么疑问或者建议希望和大家一起讨论.

 



本文转自wiliiwin 51CTO博客,原文链接:http://blog.51cto.com/wiliiwin/303124



相关文章
|
存储 网络安全
分布式存储glusterfs详解
1.什么是glusterfs glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数pb存储容量和数千客户端,通过网络互联成一个并行的网络文件系统,具有可扩展性、高性能、高可用等特点 常用资源:
730 0
分布式存储glusterfs详解
|
9月前
|
存储 大数据
大数据数据存储的分布式文件系统的GlusterFS
在分布式文件系统 GlusterFS 中,数据的存储和管理是基于块的分布式存储。
50 0
|
存储 网络协议 RDMA
分布式文件系统---GlusterFS
1.1 分布式文件系统 1.1.1 什么是分布式文件系统   相对于本机端的文件系统而言,分布式文件系统(英语:Distributed file system, DFS),或是网络文件系统(英语:Network File System),是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
2634 0
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
154 0
|
1月前
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
58 1
|
3月前
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
161 1
|
29天前
|
NoSQL Java Redis
如何通俗易懂的理解Redis分布式锁
在多线程并发的情况下,我们如何保证一个代码块在同一时间只能由一个线程访问呢?
37 2
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
60 0

热门文章

最新文章