分布式文件系统---GlusterFS
1.1 分布式文件系统
1.1.1 什么是分布式文件系统
相对于本机端的文件系统而言,分布式文件系统(英语:Distributed file system, DFS),或是网络文件系统(英语:Network File System),是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
在这样的文件系统中,客户端并非直接访问底层的数据存储区块,而是通过网络,以特定的通信协议和服务器沟通。借由通信协议的设计,可以让客户端和服务器端都能根据访问控制清单或是授权,来限制对于文件系统的访问。
1.1.2 glusterfs是什么
Gluster是一个分布式文件系统。它是各种不同的存储服务器之上的组合,这些服务器由以太网或无限带宽技术Infiniband以及远程直接内存访问RDMA互相融汇,最终所形成的一个大的并行文件系统网络。
它有包括云计算在内的多重应用,诸如:生物医药科学,文档存储。Gluster是由GNU托管的自由软件,证书是AGPL。Gluster公司是Gluster的首要商业赞助商,且提供商业产品以及基于Gluster的解决方案。
1.2 快速部署GlusterFS
1.2.1 环境说明
注意:最少需要拥有两块硬盘
系统环境说明
glusterfs01信息
[root@glusterfs01 ~]# hostname
glusterfs01
[root@glusterfs01 ~]# uname -r
3.10.0-693.el7.x86_64
[root@glusterfs01 ~]# sestatus
SELinux status: disabled
[root@glusterfs01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@glusterfs01 ~]# hostname -I
10.0.0.120 172.16.1.120
glusterfs02信息
[root@glusterfs02 ~]# uname -r
3.10.0-693.el7.x86_64
[root@glusterfs02 ~]# sestatus
SELinux status: disabled
[root@glusterfs02 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@glusterfs02 ~]# hostname -I
10.0.0.121 172.16.1.121
注意配置好hosts解析
1.2.2 前期准备
gluster01主机挂载磁盘
[root@glusterfs01 ~]# mkfs.xfs /dev/sdb
[root@glusterfs01 ~]# mkdir -p /data/brick1
[root@glusterfs01 ~]# echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
[root@glusterfs01 ~]# mount -a && mount
gluster02主机挂载磁盘
[root@glusterfs02 ~]# mkfs.xfs /dev/sdb
[root@glusterfs02 ~]# mkdir -p /data/brick1
[root@glusterfs02 ~]# echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
[root@glusterfs02 ~]# mount -a && mount
1.3 部署GlusterFS
1.3.1 安装软件
在两个节点上操作
yum install centos-release-gluster -y
# 修改镜像源加速
sed -i 's#http://mirror.centos.org#https://mirrors.shuosc.org#g' /etc/yum.repos.d/CentOS-Gluster-3.12.repo
yum install -y glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
软件版本
[root@glusterfs01 ~]# rpm -qa glusterfs
glusterfs-3.12.5-2.el7.x86_64
1.3.2 启动GlusterFS
在两个节点上都进行操作
[root@glusterfs01 ~]# systemctl start glusterd.service
[root@glusterfs01 ~]# systemctl status glusterd.service
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/usr/lib/systemd/system/glusterd.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2018-02-07 21:02:44 CST; 2s ago
Process: 1923 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 1924 (glusterd)
CGroup: /system.slice/glusterd.service
└─1924 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO
2月 07 21:02:44 glusterfs01 systemd[1]: Starting GlusterFS, a clustered file-system server...
2月 07 21:02:44 glusterfs01 systemd[1]: Started GlusterFS, a clustered file-system server.
Hint: Some lines were ellipsized, use -l to show in full.
1.3.3 配置互信(可信池)
在glusterfs01上操作
[root@glusterfs01 ~]# gluster peer probe glusterfs02
peer probe: success.
在glusterfs02上操作
[root@glusterfs02 ~]# gluster peer probe glusterfs01
peer probe: success.
注意:一旦建立了这个池,只有受信任的成员可能会将新的服务器探测到池中。新服务器无法探测池,必须从池中探测。
1.3.4 检查对等状态
[root@glusterfs01 ~]# gluster peer status
Number of Peers: 1
Hostname: 10.0.0.121
Uuid: 61d043b0-5582-4354-b475-2626c88bc576
State: Peer in Cluster (Connected)
Other names:
glusterfs02
注意:看到的UUID应不相同。
[root@glusterfs02 ~]# gluster peer status
Number of Peers: 1
Hostname: glusterfs01
Uuid: e2a9367c-fe96-446d-a631-194970c18750
State: Peer in Cluster (Connected)
1.3.5 建立一个GlusterFS卷
在两个节点上操作
mkdir -p /data/brick1/gv0
在任意一个节点上执行
[root@glusterfs01 ~]# gluster volume create gv0 replica 2 glusterfs01:/data/brick1/gv0 glusterfs02:/data/brick1/gv0
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.
Do you still want to continue?
(y/n) y
volume create: gv0: success: please start the volume to access data
启用存储卷
[root@glusterfs01 ~]# gluster volume start gv0
volume start: gv0: success
查看信息
[root@glusterfs01 ~]# gluster volume info
Volume Name: gv0
Type: Replicate
Volume ID: 865899b9-1e5a-416a-8374-63f7df93e4f5
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs01:/data/brick1/gv0
Brick2: glusterfs02:/data/brick1/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
至此,服务端配置结束
1.4 客户端测试
1.4.1 安装客户端工具
挂载测试
[root@clsn6 ~]# yum install centos-release-gluster -y
[root@clsn6 ~]# yum install -y glusterfs glusterfs-fuse
注意:要配置好hosts文件,否则连接会出错
[root@clsn6 ~]# mount.glusterfs glusterfs01:/gv0 /mnt
[root@clsn6 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 2.2G 16G 13% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
glusterfs01:/gv0 100G 33M 100G 1% /mnt
1.4.2 复制文件测试
[root@clsn6 ~]# for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
客户端检查文件
[root@clsn6 ~]# ls -lA /mnt/copy* | wc -l
10
服务节点检查文件
[root@glusterfs01 ~]# ls -lA /data/brick1/gv0/copy* |wc -l
100
服务节点检查文件
[root@glusterfs02 ~]# ls -lA /data/brick1/gv0/copy* |wc -l
100
至此Glusterfs简单配置完成
1.5 参考文献
[1] http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/ [2] https://www.cnblogs.com/jicki/p/5801712.html [3] https://mirrors.shuosc.org/centos/7/
- nginx域名访问的白名单配置梳理
- 老生常谈:利用Membership实现SSO(单点登录)
- nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
- Mysql高效插入/更新数据
- 宋小菜融资2.3亿元!域名保护意识强
- 世界最奇葩的7款机器人
- Mysql高效插入/更新数据
- 关于Membership/Role您可能不知道的细节
- Sqlite向MySql导入数据
- 未来3年,人工智能如何影响法律行业?5位权威专家给出趋势
- Java 常见内存溢出异常与代码实现
- nginx限制上传大小和超时时间设置说明/php限制上传大小
- Unity Application Block 1.2 学习笔记
- 苹果首个自动驾驶专利到底有什么来头?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 代码审计day10
- Hello! WordPress
- 用PHP写PHP7扩展,超级简单对吧!
- python时间日期格式化和反格式化
- 无锁编程 - Double-checked Locking
- Java_环境搭建、变量的使用
- golang string和[]byte的对比
- PHP中使用Redis长连接笔记
- 从外部设置传入Go变量
- 图解elasticsearch的_source、_all、store和index
- Stream API
- Lambda表达式
- ES的Query、Filter、Metric、Bucketing使用详解
- Golang的单引号、双引号与反引号
- CentOS配置docker和docker-compose