一、目的
实现多客户端(不支持windows)同时读写一个rbd块设备
二、实现原理
通过RHCS集群套件搭建GFS2集群文件系统,保证不同节点能够同时对GFS2集群文件系统进行读取和写入。GFS2 是一个基于 GFS的先进的集群文件系统,能够同步每台主机的集群文件系统的metadata,能够进行文件锁的管理,并且必须要redhat cluster suite支持,GFS2可以grow,进行容量的调整;不过这是在disk 动态容量调整的支持下,也就是本文所要实现的CLVM。
三、实现环境机器IP
集群: IP: 192.168.0.243? hostname: three
IP:192.168.0.244? hostname: four???? iscsi服务端
客户端:ip: 192.168.0.166?????? node1
192.168.0.157?????? node2
192.168.0.130???????????? ghg
四、架构图
五、部署步骤
1、同步hosts文件
同步hosts文件:让准备挂载rbd的集群机器与另外3台客户端的hosts文件都有各自的ip与主机名的映射关系。如下图
2、配置集群服务端与客户端的ssh互联
Four机器上生成ssh公钥,私钥。并将其公钥文件传到其他客户端机器上。
因本机已经有了公钥文件,故退出了。若是没有的话,则连续敲击回车键即可。然后运行
[root@four ~]# ssh-copy-id -i node1
[root@four ~]# ssh-copy-id -i node2
[root@four ~]# ssh-copy-id -i ghg
将公钥文件传到其他客户端。这样,服务端与客户端的ssh互联就完成了。
验证:
3、同步时间
前提条件:所有主机必须连接外网,配置过程省略。
每台机器运行:ntpdate time.windows.com
4、iscsi管理端 four安装luci
通过luci可以很方便的配置整个rhcs集群,每一步操作都会在/etc/cluster/cluster.conf生成相应的配置信息。
[root@node1 ~]# yum install luci –y?? ###注意:安装luci会安装很多python包
[root@node1 ~]# /etc/init.d/luci start ??###生成以下信息,说明配置成功。
正在启动 saslauthd:?????????????????????????????????????? [确定]
Start luci...????????????????????????????????????????????? [确定]
Point your web browser to https://four:8084 (or equivalent) to access luci
5、客户端安装ricci
[root@four ~]# for i in {node1,node2,ghg}; do ssh $i "yum install ricci -y"; done
[root@four ~]# for i in { node1,node2,ghg }; do ssh $i "chkconfig ricci on && /etc/init.d/ricci start"; done
[root@four ~]# for i in { node1,node2,ghg }; do ssh $i "echo '123456' | passwd ricci --stdin"; done? ##ricci设置密码,在 web页面添加节点的时候需要输入ricci密码。
5、通过luci?web管理界面安装RHCS集群套件
用户名为four机器root用户,密码为root密码
b ) 点击创建集群 create
集群名字为vcfsclustat,Node name 输入3个客户端的主机名。password为各节点ricci的密码,然后勾选“Download?Packages”(在各节点yum配置好的基础上,自动安装cman和rgmanager及相关的依赖包),勾选“Enable?Shared?Storage?Support”,安装存储相关的包,并支持gfs2文件系统、DLM锁、clvm逻辑卷等
c )完成后查看
d ) 点击其中一个节点查看
点开一个节点,可以看到这个节点上所有相关服务都处于运行状态。
6、登入各节点查看各服务开机启动
[root@node1 ~]# chkconfig --list|grep cman
cman?????????? ????? 0:off? 1:off? 2:on? 3:on? 4:on? 5:on? 6:off
[root@node1 ~]# chkconfig --list|grep rgmanager
rgmanager????? ?????? 0:off? 1:off? 2:on? 3:on? 4:on? 5:on? 6:off
[root@node1 ~]# chkconfig --list|grep clvmd
clvmd????????? ??????? 0:off? 1:off? 2:on? 3:on? 4:on? 5:on? 6:off
查看集群配置文件,每台都是一样的。
7、查看集群状态
8、创建集群rbd块
在集群节点four上创建rbd块,并映射到本地磁盘。
[root@four ~]# rbd create image1 -p rbd --size=10240
[root@four ~]# rbd map image1
/dev/rbd1
9、安装iscsi相关软件以及配置
?1、安装并编辑其配置文件
[root@four ~]# yum install -y scsi-target-utils
[root@four ~]# cat /etc/tgt/targets.conf
<target iqn.2013.05.org.mycluster:storage1.rbd>
backing-store /dev/rbd0????? #backing-store 制定后台实际块设备路径
</target>
iSCSI的target名称的命名方式:
iqn.yyyy-mm.<reversed domain name>[:identifier]
其含义:
iqn表示“iSCSI Qualified Name”,简称iqn。yyyy-mm表示“年-月”。reversed domain name表示倒过来的域名。identifier是识别名称。
此例:?reversed domain name? 为 org.mycluster
identifier 为 storage1.rbd
2、重启服务并添加开机启动
[root@four~]# /etc/init.d/tgtd start? && chkconfig tgtd on
3、查看导出
[root@four~]# tgtadm --lld iscsi --mode target --op show? \\查看是否导出成功
4、客户端安装
[root@node2 ~]#?for i in {node1,node2,ghg}; do ssh $i "yum -y install iscsi-initiator-utils"; done
也可以每台独立运行yum -y install iscsi-initiator-utils
5、客户端查询iscsi并连接
查询
[root@node2 ~]# iscsiadm -m discovery -t st -p 192.168.0.244
192.168.0.244:3260,1 iqn.2013.05.org.mycluster:storage1.rbd
[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.0.244
192.168.0.244:3260,1 iqn.2013.05.org.mycluster:storage1.rbd
[root@ghg ~]# iscsiadm -m discovery -t st -p 192.168.0.244
192.168.0.244:3260,1 iqn.2013.05.org.mycluster:storage1.rbd
连接
[root@node2 ~]# iscsiadm -m node -T iqn.2013.05.org.mycluster:storage1.rbd? -p 192.168.0.244 –l
[root@node1 ~]# iscsiadm -m node -T iqn.2013.05.org.mycluster:storage1.rbd? -p 192.168.0.244 -l
[root@ghg ~]# iscsiadm -m node -T iqn.2013.05.org.mycluster:storage1.rbd? -p 192.168.0.244 -l
其中iqn.2013.05.org.mycluster:storage1.rbd为之前查询到的。-l 为登入。-u为取消登陆
查看是否挂载
![]()
就看到下面增加了一块磁盘,即为服务端four机器提供的。查看每台都会增加一个磁盘。
6、服务端four查看连接信息
[root@four ~]# tgtadm --lld? iscsi --op show --mode conn --tid 1
10、在客户端创建逻辑卷clvm并创建gfs2文件系统
只需要在其中一台客户端中操作就可以了
创建pv? ???[root@node2 ~]# pvcreate /dev/sdb
创建卷组?? [root@node2 ~]# vgcreate vg0 /dev/sdb
##vg0位卷组名称
创建逻辑卷?? [root@node2 ~]# lvcreate -L +10G vg0 -n lv0
##lv0位逻辑卷名称,10G为之前rbd通过iscsi映射sdb磁盘容量
将逻辑卷格式化文件系统
[root@node2 ~]# mkfs.gfs2 -j 3 -p lock_dlm -t vcfsclv:rbd /dev/vg0/lv0
This will destroy any data on /dev/vg0/lv0.
It appears to contain: symbolic link to `../dm-0'
Are you sure you want to proceed? [y/n]输入y 等待一分钟左右即可。
##########
mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:
-b BlockSize:指定文件系统块大小,最小为512,默认为4096;
-J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;
-j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;这里设置为3 既3个客户端
-p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;
-t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群文件系统;此外,同一个集群内,每个文件系统的名称必须惟一。
11、挂载
在每台客户端上都执行。挂载到/mnt下面
[root@node2 ~]# mount /dev/vg0/lv0 /mnt
[root@node1 ~]# mount /dev/vg0/lv0 /mnt
[root@ghg ~]# mount /dev/vg0/lv0 /mnt
注:若是不能挂载,则将其重启,重启后执行如下命令查看服务是否启动。
[root@node2 ~]# service cman status??? ##service cman start 启动服务,此服务比rgmanager先启动
[root@node2 ~]# service rgmanager status
[root@node2 ~]# service iscsi status
[root@node2 ~]# service clvmd status
[root@node2 ~]# service ricci status
知道执行如下命令,查看如下状态
[root@node2 ~]# clustat
12、多客户端同时读写测试
同时在3个客户端上写文件,创建文件夹,dd写,其他客户端都能刷新看到。若是同时编辑同一个文件的时候,会有提示。GFS2的文件锁机制。下面为我测试的截图
13、总结
此文档操作部署,都是基本的iscsi多客户端实现网络存储功能。生产环境中,配置更为复杂,得考虑数据安全性,既备份机制。高可靠性等待。