一、分布式文件系统和单机文件系统的区别:


单机文件系统的分区只能被一台主机所挂载,不能同时被多台主机挂载使用,因为单机文件系统是通过系统内核层的锁机制来完成的,所以一个系统上可以有多个进程访问,但只能在一个时间点上有一个进行写操作。

分布式文件系统和单机最大区别就是,它的锁机制是在不同的主机内核层可以相互通信,保证只有一个进程写操作的。

分布式锁的实现要通过分布式程序来完成,可以通过zookeeper(分布式应用程序协调服务)来完成,也可以通过高可用来完成,也就是在多个节点(使用分布式文件系统的主机)间建立一个高可用信息通信层,比如corosync、cman,通过cman或者corosync来实现分布式锁的通信功能。分布式锁管理器(DLM),是在系统的内核层中实现的功能,这种功能也并不是所有系统都有,有的需要安装,DLM和高可用的信息通信层程序(corosync,cman)配合完成分布式锁功能

这时使用的文件系统就不能是ext3、ext4这样的单机文件系统了,否则无法实现分布式文件系统的功能了,那么常见的分布式文件系统就是GFS2、OCFS2啦。

centos6.5实现高可用的方式:

1、corosync+pacemaker

corosync1.0使用cman的投票系统,而到了corosync2.0则使用了自己的投票系统。实际上的cman已经取代了corosync的地位。

2、heartbearv3+pacemaker

3、cman+rgmanager

4、cman+pacemaker

二、常见硬盘接口讲解:

IDE:并行、133MB/S

/dev/hd

SCSI:小型机系统接口

并行,多类型接口,Ultra320 320MB/S,SCSI总线是scsi设备间传输数据的通路。scsi设备通过scsi总线和scsi控制器通信,这个控制器就是一个scsi的板卡,总线分为宽总线和窄总线之分,这个也是和控制器有关的,那窄总线来说可以最多接8个scsi设备,这个scsi设备并非狭义的硬盘可以是其他设备,所以这里被称为target,而target下面可以最多接32个LU(逻辑单元)设备,这个LU 设备往往是硬盘。

数据的存储是由scsi控制器来进行编码存储的。也就是说数据在scsi总线上传输是有总线协议的,这里就是scsi协议。这个协议就包括如何编码,定义各个接口针的用途等等。

SATA:最为IDE的下一代产品,串行接口(6G/bps,实际速率也不到768MB/S)

SAS:最为SCSI的下一代产品,同样是串行接口

SSD:固态硬盘,接口有SATA,PCI-E,当然PCI-E的接口直接连接在总线上,速度更快。

三、存储模型讲解

1、DAS存储

2、SAN存储

存储区域网,为多台主机提供公共存储空间,但不能使用相同的存储空间。常见类型有FC-SAN、ISCSI-SAN,IP-SAN(所有使用ip协议的都称为ipsan,包括iscsi)PCOE。

FC-SAN,就是在主机和存储设备直接通过光纤进行连接,这时主机上需要光纤HBA卡,SAN交换机,用于专门在光纤上通讯,光信号到SAN交换机之后转换为scsi存储设备可以接受的信号,然后有sCSI控制器进行编码存储。

iSCSI-SAN,则是对光纤存储的廉价处理方法,因为光纤适配器和交换机成本都很高,所以才有了ISCSI的方法,此方式是以太网传输方法,在主机端(initiator)先在内核中增加模块来封装scsi协议,这个就是iSCSI啦,然后封装tcp、ip等层协议。存储端同样提供iscsi的服务,端口是3260。将主机端发送过来的tcp/ip报文进行解封,然后到iSCSI协议时会知道是发给存储的,然后再有scsi控制器进行存储。这个存储端可以是非scsi接口设备,而主机端挂载存储端的分区后被识别为“本地硬盘”,这就是块级别设备的特征,主机端可以对这个“硬盘”进行分区格式化的操作。iscsi的HBA卡,TOE卡,都是将由内核完成的iscsi协议封装和驱动交给这个卡来完成,以减少CPU的负载。

FCOE:是cisco专有的存储协议,性能和iscsi差不多。

infiniband:应用于高端存储中,性能高于FC-SAN。

3、NAS

通过nfs、cifs、smb等协议提供网络文件共享的协议。

四、linux实现iscsi服务

1、安装软件

服务器端:centos6.5本身是自带这个scsi-target-utils软件包的,服务内核本身就支持,utils只是管理工具。启动的服务名是tgtd服务,配置文件是/etc/tgt/target.conf文件,监听的端口是3260。

客户端:安装iscsi-initiator-utils,本地有一个iscsi数据库用来存储记录之前记录的服务器链接,保证数据不丢失,由于客户端和服务器端存在持续链接,所以同样需要一个服务来管理链接,服务名是iscsi(iscsid)

客户端和服务器端的安全认证:

基于ip的认证:

基于用户的认证:CHAP认证

注意:同高可用及负载均衡一样,都需要时间同步、关闭iptables、关闭enlinux等功能。

1.1服务器端:

[root@localhost ~]# yum install scsi-target-utils

1.2管理工具的使用tgtadm

服务器端要使用iscsi存储服务,需要先创建“target”,然后创建“lun”,之后才可以被客户端使用。

三种模式:target

选项:show(显示)、new(创建)、update(更新,修改)、bind(绑定访问地址)、unbind(解除绑定),delete.

logicalunit

选项:new、delete

account

选项:show(显示)、new(创建)、update(更新,修改)、bind(绑定访问地址)、unbind(解除绑定),delete.

选项和参数缩写对照

-L ———  lld<driver>

-o———   op

-m———  mode

-t———— tid

-T————targetname

-l———— lun

-b————backing-store

-E————bstype

-I———— initiator-address

知识点:

IQN:用来标识iscsi里面每一个target的设备名称,也称为完全限定名。命名方式:iqn.<date.code>.<reverse_domain>.<string>,其中日期是创建的年月比如2012-21,然后是域名的反写形式,如com.dtedu.www

创建一个target,需要先启动tgtd服务。

[root@localhost ~]# service tgtd start

Starting SCSI target daemon:                               [  OK  ]

[root@localhost ~]# tgtadm -L iscsi -m target -o new -t 1 -T iqn.2017-04.com.dtedu.tgt1:disk1

查看target创建情况。

[root@localhost ~]# tgtadm -L iscsi -m target -o show

Target 1: iqn.2017-04.com.dtedu.tgt1:disk1

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:

Account information:

ACL information:

创建一个LUN,当然可以创建多个LUN,每个LUN编号不同,也可以将lun指向不同的target上。

[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdb

[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o new -t 2 -l 1 -b /dev/sdc

显示创建的LUN

[root@localhost ~]# tgtadm -L iscsi -m target -o show

Target 1: iqn.2017-04.com.dtedu.tgt1:disk1

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: 10737 MB, Block size: 512

Online: Yes

Removable media: No

Prevent removal: No

Readonly: No

Backing store type: rdwr

Backing store path: /dev/sdb

Backing store flags:

Account information:

ACL information:

对客户端访问进行授权

ip地址授权

[root@localhost ~]# tgtadm -L iscsi -m target -o bind -t 1 -I 10.40.0.0/24

ACL information:

10.40.0.0/24

用户名授权

incominguser:服务器端提供的用户名密码

outgoinguser:客户端创建并提供的用户名密码

服务器端:

[root@localhost ~]# tgtadm -L iscsi -m account -o new --user gongbing --password 123123

[root@localhost ~]# tgtadm -L iscsi -m account -o bind --user gongbing -t 1

[root@localhost ~]# tgtadm -L iscsi -m target -o bind -t 1 -I 192.168.1.0/24

[root@localhost ~]# tgtadm -L iscsi -m target -o show

Account information:

gongbing

ACL information:

192.168.1.0/24

客户端:(/etc/iscsi/iscsi.conf)

# *************

# CHAP Settings

# *************

# To enable CHAP authentication set node.session.auth.authmethod

# to CHAP. The default is None.

node.session.auth.authmethod = CHAP

# To set a CHAP username and password for initiator

# authentication by the target(s), uncomment the following lines:

node.session.auth.username = gongbing 服务器端提供的用户名密码验证信息

node.session.auth.password = 123123

# To set a CHAP username and password for target(s)

# authentication by the initiator, uncomment the following lines:

#node.session.auth.username_in = username_in 客户端提供给服务器端用于验证的用户名密码信息。

#node.session.auth.password_in = password_in

2、客户端安装软件

[root@node5.dtedu.com ~]# yum install iscsi-initiator-utils

2.1安装目录介绍

[root@node5.dtedu.com ~]# rpm -ql iscsi-initiator-utils

/etc/NetworkManager

/etc/NetworkManager/dispatcher.d

/etc/NetworkManager/dispatcher.d/04-iscsi

/etc/iscsi

/etc/iscsi/iscsid.conf 客户端配置文件

/etc/logrotate.d/iscsiuiolog

/etc/rc.d/init.d/iscsi

/etc/rc.d/init.d/iscsid

/sbin/brcm_iscsiuio

/sbin/iscsi-iname

/sbin/iscsiadm

/sbin/iscsid

/sbin/iscsistart

/sbin/iscsiuio

/usr/lib64/libiscsi.so.0

/usr/lib64/python2.6/site-packages/libiscsimodule.so

/usr/share/doc/iscsi-initiator-utils-6.2.0.873

/usr/share/doc/iscsi-initiator-utils-6.2.0.873/README

/usr/share/man/man8/iscsi-iname.8.gz

/usr/share/man/man8/iscsiadm.8.gz

/usr/share/man/man8/iscsid.8.gz

/usr/share/man/man8/iscsistart.8.gz

/usr/share/man/man8/iscsiuio.8.gz

/var/lib/iscsi 此目录保存的是服务器端到客户端创建的链接信息及用户账户等,如果出现问题可以删除目录下内容,iscsi会重新相关内容。

/var/lib/iscsi/ifaces

/var/lib/iscsi/isns

/var/lib/iscsi/nodes

/var/lib/iscsi/send_targets

/var/lib/iscsi/slp

/var/lib/iscsi/static

/var/lock/iscsi

命令讲解:iscsiadm

模块化命令:

discovery

node

-t type:类型目前只是用st

-p IPAdress:port

-l 表示登录

2.2为客户端自定义命名iqn,需要命令iscsi-iname。

[root@node5.dtedu.com ~]# echo "InitiatorName=`iscsi-iname -p iqn.2017-04.com.dtedu`" >/etc/iscsi/initiatorname.iscsi

[root@node5.dtedu.com ~]# cat /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2017-04.com.dtedu:d027acd590fb

2.3客户端发现服务器端的磁盘设备。

[root@node5.dtedu.com ~]# iscsiadm -m discovery -t st -p 192.168.1.200:3260

192.168.1.200:3260,1 iqn.2017-04.com.dtedu.tgt1:disk1

2.4客户端将远程设备连接到本地,然后在mount挂载。

[root@node5.dtedu.com ~]# iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200:3260 -l

Logging in to [iface: default, target: iqn.2017-04.com.dtedu.tgt1:disk1, portal: 192.168.1.200,3260] (multiple)

Login to [iface: default, target: iqn.2017-04.com.dtedu.tgt1:disk1, portal: 192.168.1.200,3260] successful.

2.5卸载已经挂载的远程scsi设备

iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200 -u

2.6删除iscsi客户端的数据库,(下次就不会自动发现了)

iscsiadm -m node -T iqn.2017-04.com.dtedu.tgt1:disk1 -p 192.168.1.200 -o delete

2.7服务器端取消对某一个网段的授权访问规则。

[root@localhost ~]# tgtadm -L iscsi -m target -o unbind -t 1 -I 192.168.4.206

[root@localhost ~]# tgtadm -L iscsi -m target -o show

Target 1: iqn.2017-04.com.dtedu.tgt1:disk1

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: 10737 MB, Block size: 512

Online: Yes

Removable media: No

Prevent removal: No

Readonly: No

Backing store type: rdwr

Backing store path: /dev/sdb

Backing store flags:

Account information:

ACL information:

192.168.4.0/24

2.8删除服务器端的LUN

[root@localhost ~]# tgtadm -L iscsi -m logicalunit -o delete -t 1 -l 1

2.9删除服务器端的target

[root@localhost ~]# tgtadm -L iscsi -m target -o delete -t 1

注意:

此问题常常出现在非第一次发现远程scsi设备的情况,或者设备配置有变化的情况。通常会有以下错误信息:

[root@node5.dtedu.com ~]# iscsiadm -m discovery -t st -p 192.168.4.200 -d 3

iscsiadm: Max file limits 1024 4096

iscsiadm: starting sendtargets discovery, address 192.168.4.200:3260,

iscsiadm: connecting to 192.168.4.200:3260

iscsiadm: connected local port 55596 to 192.168.4.200:3260

iscsiadm: connected to discovery address 192.168.4.200

iscsiadm: login response status 0000

iscsiadm: discovery process to 192.168.4.200:3260 exiting

iscsiadm: disconnecting conn 0x15b5a78, fd 3

iscsiadm: No portals found

[root@localhost ~]# tail /var/log/messages

May  2 07:01:20 localhost tgtd: conn_close(101) connection closed, 0xcf6568 1

May  2 07:05:44 localhost tgtd: conn_close(101) connection closed, 0xcf6568 1

解决办法:

1、卸载挂载的scsi设备,并删除。

2、关键是删除此目录的内容

[root@node6.dtedu.com ~]# vi /var/lib/iscsi/send_targets/192.168.4.200,3260/st_config

通过/etc/tgt/targets.conf进行配置:

<target iqn.2017.05.com.dtedu.tgt2:disk2>

backing-store /dev/sdb

initiator-address 192.168.4.0/24

incominguser gongbing 123123

outgoinguser liu 123123

</target>

注意现实中,常常使用的iscsi解决方法是通过freeNAS(freebsd核心,独立的类似操作系统)、OpenFilter(centos核心,)、Nexenta

转载于:https://blog.51cto.com/137783/1968792

高可用集群之分布式文件系统相关推荐

  1. 部署Redis高可用集群

    目录 部署Redis高可用集群 Redis集群环境 拓扑结构 IP地址 环境准备 工作原理 创建Redis集群 部署管理主机 redis-trib.rb脚本 redis服务器开启集群功能 管理主机创建 ...

  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 09 缓存必问:Reids持久化,高可用集群

    09缓存必问:Reids持久化,高可用集群 宝剑锋从磨砺出,梅花香自苦寒来. 引言 Redis 的优点中提到 Redis 支持持久化数据,宕机后可恢复数据,持久化就是基于内存读写的 Redis 数据一 ...

  3. 部署Ceph分布式高可用集群中篇

    前言 如何快速部署Ceph分布式高可用集群 Ceph分布式存储底层实现原理 上文介绍了ceph的原理以及ceph的部署(部署了一个mon角色)本文继续介绍下ceph的部署 部署OSD 查看磁盘使用情况 ...

  4. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有一些要商城的,还有要springboot,springcloud,k8s等,几乎涵 ...

  5. 高可用集群技术之heartbeat应用详解(一)

    一.高可用集群基本概念   什么是高可用技术呢?在生产环境中我既要保证服务不间断的服务又要保证服务器稳定不down机,但是异常还是会发生,比如说:服务器硬件损坏...导致服务器down机,我该如何保证 ...

  6. HA高可用集群与RHCS集群套件

    一.HA基本概念 linux高可用集群(HA)原理详解:https://blog.csdn.net/xiaoyi23000/article/details/80163344 负载均衡.集群.高可用(H ...

  7. 内网环境下手动部署kubernetes(v1.26.3)高可用集群

    这篇博客主要是记录了手动部署一个高可用的Kubernetes集群的过程.旨在帮助自己及初学者学习kubernetes,并记录下具体的操作过程和总结的知识点.文中可能存在一些问题或不足之处,仅供参考. ...

  8. Centos7.6+Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    本文转自https://mshk.top/2019/03/centos-hadoop-zookeeper-hbase-hive-spark-high-availability/,因为原链接打不开,故在 ...

  9. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

最新文章

  1. IOS 自定义相机, 使用 AVFoundation(附实现部分腾讯水印相机功能 demo)
  2. 关于学习Python的一点学习总结(20->assert判断->while和for使用)
  3. 让Python不在mac的dock上显示火箭图标
  4. 一次从节点同步出错的解决
  5. Android之旅---广播(BroadCast)
  6. STM32——GPIO(1)
  7. Control的BeginInvoke和Invoke的区别
  8. 没使用Spring Cloud的版本管理导致Eureka服务无法注册到Eureka服务注册中心
  9. 概括计算机程序启动过程,计算机启动过程详解
  10. jdk API说明手册
  11. 单径瑞利信道中的BPSK相干解调的(理论)误码率性能
  12. linux weblogic部署项目路径,Weblogic部署web项目获取项目根目录为null
  13. 基于MATLAB语音分析处理系统
  14. 【转】博弈论——acm
  15. 【埋点】是什么埋点?简述埋点的操作流程
  16. OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)
  17. VS2017无法登录:我们无法刷新此账户的凭证、我们无法添加此账户发送请求时出错、评估期已结束,请登录以解除产品锁定
  18. 武汉计算机大学排名2018,2018年中国地质大学(武汉)世界排名、中国排名、专业排名...
  19. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B Coin (概率计算)
  20. 黑莓手机时代落幕;阿里巴巴为 Linux 内核调度器提出新概念;清理 Linux 内核“依赖地狱” | 开源日报

热门文章

  1. spring读取配置文件的几种方式
  2. [hadoop源码阅读][9]-mapreduce-概论
  3. Discuz!常用函数解析(续)
  4. 怎样在swift中创建CocoaPods
  5. Netty 粘包 拆包 编码 解码 序列化 介绍
  6. CART树 python小样例
  7. Spring MVC-ContextLoaderListener和DispatcherServlet
  8. 跟谁学这2年间做的六件事
  9. Spring Boot 学习(1)
  10. 【转载】云计算的三种服务模式:IaaS,PaaS和SaaS