iSCSI实现存储的多路经访问
/ eth0 ------- eth0 \ 应用节点 iscsi \ eth1 ------- eth1 /
应用节点: eth0 192.168.29.11 eth1 192.168.89.11
iscsi 网卡1 192.168.29.1 网卡2 192.168.89.1
一、配置存储
本例子使用宿主机实现iscsi存储,导出一个target # vim/etc/tgt/targets.conf ... <target iqn.2013-01.com.upl:mysqldata> backing-store /dev/sda7 </target>
#service tgtd start
二、配置应用节点
实验前,把该应用节点之前发现过、登录过的target删除掉,免得影响实验 # iscsiadm -m node -o delete
1、给iscsi客户端建立两个不同的接口 # iscsiadm -m iface -I iface0 -o new #iscsiadm -m iface -I iface1 -o new
给这两个接口分别绑定不同网络的物理网卡 # iscsiadm -m iface -I iface0 -n iface.net_ifacename -v eth0 -oupdate #iscsiadm -m iface -I iface1 -n iface.net_ifacename -v eth1 -o update
作用:用于指导iscsi客户端分别使用不同的网卡去发现、登录targer(存储)
2、从不同的接口去发现存储 # iscsiadm -m discovery -t st -p 192.168.29.1 -I iface0 192.168.29.1:3260,1iqn.2013-01.com.upl:mysqldata
# iscsiadm -mdiscovery -t st -p 192.168.89.1 -I iface1 192.168.89.1:3260,1iqn.2013-01.com.upl:mysqldata
3、登录 #iscsiadm -m node -l
你会发现本机多了两个scsi硬盘 sda sdb
执行 删除登录过的target 目的:下次启动iscsi服务的时候,不会自动登录这些target # iscsiadm -m node -u # iscsiadm -m node -o delete (删除所有发现过的target) 4、配置多路经服务
原理:根据存储设备的vdp(产品关键数据) sda -----\ mpatha(默认生成的设备名字) sdb -----/
#yum install device-mapper-multipath -y
# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf
启动服务 # service multipathd start
#ls /dev/mapper/mpatha* 我在此步失败 中不到原因 /dev/mapper/mpatha(硬盘) /dev/mapper/mpathap1(分区)
#multipath -ll 提示 DM multipath kernel driver not loaded 找不核驱动
mpatha (1IET 00010001) dm-2 IET,VIRTUAL-DISK (高可用模式) size=2.0Gfeatures='0' hwhandler='0' wp=rw |-+-policy='round-robin 0' prio=1 status=active | `- 2:0:0:1 sda8:0 active ready running (活动) `-+-policy='round-robin 0' prio=1 status=enabled `- 3:0:0:1 sdb 8:16 active ready running (备用)
需要修改multipahtd.conf配置,实现负载均衡模式(两条链路同时使用)
# vim /etc/multipath.conf
defaults { udev_dir /dev polling_interval 10 # selector "round-robin 0" <---注释掉,语法错误的 path_grouping_policy multibus getuid_callout "/lib/udev/scsi_id --whitelisted--device=/dev/%n" # prio alua path_checker readsector0 rr_min_io 100 max_fds 8192 rr_weight priorities failback immediate no_path_retry fail user_friendly_names yes }
multipaths { multipath { wwid "1IET 00010001" alias mysqldata <---自定义多路经设备文件的名字 path_grouping_policy multibus # path_checker readsector0 # 注释掉,语法错误 path_selector "round-robin 0" failback manual rr_weight priorities no_path_retry 5 }
}
重新启动服务 #service multipathd restart 如果看不到多路经设备文件的信息,那么重新登录iscsi存储,就能触发硬件发现事件。 # service iscsi restart
# multipath -ll mysqldata(1IET 00010001) dm-2 IET,VIRTUAL-DISK size=2.0Gfeatures='0' hwhandler='0' wp=rw `-+-policy='round-robin 0' prio=1 status=active (负载均衡模式) |- 4:0:0:1 sda 8:0 active ready running `- 5:0:0:1 sdb 8:16 active ready running
# ll/dev/mapper/mysqldata mysqldata mysqldatap1
实时挂载去验证多路经的特点:负载均衡的IO,链路故障 # mount -o sync/dev/mapper/mysqldatap1 /mnt
例子2:在共享存储上实现集群文件系统
本实验要求使用rhel5的操作系统
node1 node2 |-------|--------| 共享存储
必须做好的准备: 静态IP FQDN主机名 设定网关 @@@@ hosts文件绑定集群节点的主机名(包括自己和其余节点)
node1.upl.com 192.168.89.11 node2.upl.com 192.168.89.12
设定yum源 [core-0] name=core-0 baseurl=ftp://10.1.1.21/el5/Server enabled=1 gpgcheck=0
[core-1] name=core-1 baseurl=ftp://10.1.1.21/el5/VT enabled=1 gpgcheck=0
[core-2] name=core-2 baseurl=ftp://10.1.1.21/el5/ClusterStorage enabled=1 gpgcheck=0
[core-3] name=core-3 baseurl=ftp://10.1.1.21/el5/Cluster enabled=1 gpgcheck=0
# yum groupinstall"Clustring" "Cluster Storage" -y
安装源: ftp://10.1.1.21/el5
集群文件系统必须使用在集群环境中,所以必须先把集群环境搭建。
一、配置存储
导出一个target: 略
二、集群节点连接存储
说明:如果之前已经登录过target,先把旧的target删除掉 # iscsiadm -m node -o delete
强烈建议使用udev规则固定设备的路径 /etc/udev/rules.d/55-iscsi.rules /etc/udev/scripts/iscsidev.sh 《---755权限 1、发现 # service iscsistart # iscsiadm -m discovery -t st -p 192.168.89.1 2、登录 # iscsiadm -m node -l
生产环境可以让机器开机自动启动iscsi服务,这样就能自动登录target # ls/dev/iscsi/mysqldata/part1
三、在其中一个节点上配置集群,然后同步配置文件到另外的节点
#system-config-cluster
建立集群,名字随意,但不能有特殊字符,不能太长: ShareStorage
添加集群节点 添加节点的时候必须填写节点的主机名,而且主机名必须已经绑定在hosts文件
保存配置文件,并且同步到另外的节点 # scp/etc/cluster/cluster.conf 192.168.89.12:/etc/cluster/
所有节点依次同时启动cman服务 cman作用: 读取配置文件,建立集群关系
# service cmanstart Starting cluster: Loading modules... done Mounting configfs... done Starting ccsd... done Starting cman... done Starting daemons... done Starting fencing... done [确定] 如果启动该服务失败: 失败原因:没有绑定主机名,没有设定网关 解决: ctrl + c 停止启动 # service cman stop 如果停止也卡住了 # cman_tool leaveforce 强制离开集群 如果强制离开集群都卡中,只能硬重启计算机
# clustat -i2 Cluster Status forShareStorage @ Sun Sep 8 07:09:18 2013 Member Status:Quorate
Member Name ID Status ------ ---- ---- ------ node1.upl.com 1 Online node2.upl.com 2 Online, Local
四、其中一个节点去格式化存储为gfs2(集群文件系统)
# mkfs.gfs2 -j 2-p lock_dlm -t ShareStorage:upl /dev/iscsi/mysqldata/part1 Device: /dev/iscsi/mysqldata/part1 Blocksize: 4096 Device Size 2.01 GB (525992 blocks) FilesystemSize: 2.01 GB (525991 blocks) Journals: 2 ResourceGroups: 9 LockingProtocol: "lock_dlm" Lock Table: "ShareStorage:upl" UUID: D7222C8F-B205-7EF1-FA9F-E426A0FC350D
-j 2 最多同时允许两个节点挂载该文件系统
-t 集群名字:随意
格式化完毕,所有节点都可以同时挂载使用。
==========================================================================
MFS分布式存储文件系统
查看文件信息 # mfsgetgoal/mnt/mfs/* /mnt/mfs/fstab: 1 /mnt/mfs/hosts: 1
# mfsfileinfo /mnt/mfs/* /mnt/mfs/fstab: chunk 0: 0000000000000002_00000001 /(id:2 ver:1) copy 1: 10.1.1.20:9422 /mnt/mfs/hosts: chunk 0: 0000000000000003_00000001 /(id:3 ver:1) copy 1: 10.1.1.7:9422
设定文件副本数 # mfssetgoal 2/mnt/mfs/hosts /mnt/mfs/hosts: 2
# mfsfileinfo /mnt/mfs/* /mnt/mfs/fstab: chunk 0: 0000000000000002_00000001 /(id:2 ver:1) copy 1: 10.1.1.20:9422 /mnt/mfs/hosts: chunk 0: 0000000000000003_00000001 /(id:3 ver:1) copy 1: 10.1.1.7:9422 copy 2: 10.1.1.20:9422
查看文件被删除后的回收时间 # mfsgettrashtime/mnt/mfs/* /mnt/mfs/fstab:86400 <---文件被删除后会保留在回收站一天,然后才会被彻底删除 /mnt/mfs/hosts:86400
# mfssettrashtime300 /mnt/mfs/hosts /mnt/mfs/hosts:300 <--- 删除后,300秒后如果不会它进行恢复,文件就会被彻底删除
如何恢复被删除的文件 1、元数据服务器要允许挂载和访问元数据 # vim/usr/local/mfs/etc/mfsexports.cfg * . rw,password=123
# mfsmaster stop # mfsmaster start
2、客户端挂载元数据,对文件进行恢复 # mfsmount -m -H 10.1.1.5/mnt/metadata/ -p MFS Password:
# ls/mnt/metadata/trash/ <---所有被删除的文件都存放在此目录下 00000002|hosts 00000003|fstab undel
恢复某个文件 # mv/mnt/metadata/trash/'00000003|fstab' /mnt/metadata/trash/undel/ # ls /mnt/mfs/ fstab 恢复成功
对mfs分布式文件系统进行灾难恢复:
每次启动元数据服务器的进程的时候,都会读取/usr/local/mfs/var/mfs/metadata.mfs 元数据文件,把该文件加载到内存。并且把该文件重命名为metadata.mfs.back. 元数据服务器在工作的过程中,如果元数据发生变化,变化都是在内存上发生、生效的。但是这些变更同时也会记录到该目录下的变更日志中changelog.??.mfs。元数据日志服务器会不断去实时下载这些变更日志,然后会定时下载元数据备份文件metadata.mfs.back。 如果元数据服务正常关闭,会把内存中元数据文件保存为metadata.mfs文件中,把之前的备份文件删除。
一、简单的故障 mfs元数据服务器意外的关机,或者意外的结束相关进程,导致再次启动服务的时候出错 会导致没有能够即使地把最新的元数据从内存中保存到metadata.mfs文件中,所以再次启动的时候就会报错:找不到元数据文件 恢复的原理:让旧的元数据备份文件应用变更日志恢复到最新的元数据文件
模拟故障 # skill -9mfsmaster
启动报错 # mfsmaster start working directory:/usr/local/mfs/var/mfs lockfile createdand locked initializingmfsmaster modules ... loading sessions... ok sessions file hasbeen loaded exports file hasbeen loaded loading metadata... can't openmetadata file 找不到元数据 if this is newinstalation then rename metadata.mfs.empty as metadata.mfs init: file systemmanager failed !!! error occuredduring initialization - exiting
恢复 #mfsmetarestore -a
重启启动服务 # mfsmaster start
二、严重的故障 元数据服务器彻底崩溃,整机数据无法恢复,无法取出原来的元数据备份文件和日志文件。
恢复依据:只要有元数据日志服务器,而且日志服务器上有一个旧的元数据备份文件 # ls/usr/local/mfs/var/mfs/ changelog_ml.0.mfs metadata.mfs.back(这个文件必须要有,默认是服务启动24小时候才会从元数据服务器上下载) sessions_ml.mfs changelog_ml.1.mfs metadata.mfs.empty
恢复原理:备份文件 + 应用变更日志
从日志服务器把备份文件和日志文件同步到元数据服务器的数据目录 # rsync -alvR/usr/local/mfs/var/mfs/ 10.1.1.5:/
在元数据服务器上执行恢复操作 # cd/usr/local/mfs/var/mfs/ # mfsmetarestore-m metadata.mfs.back -o metadata.mfs changelog_ml.*
# mfsmaster start
|