GlusterFS 分布式存储部署使用

GlusterFS是一款非常易于使用的分布式文件存储系统,实现了全部标准POSIX接口,并用fuse实现虚拟化,让用户看起来就像是本地磁盘一样。因此程序想从本地磁盘切换到GlusterFS时是不用修改任何代码的,做到了无缝切换。并且让多台电脑的程序看起来在使用同一块硬盘,简化了很多逻辑。如果您的应用单机磁盘不够放时,不妨考虑下GlusterFS。

一、    GlusterFS源码安装

1. glusterfs 依赖安装

a. CentOS下yum安装

yum install -y flex bison openssl-devel libacl-devel sqlite-devel libxml2-devel libtool automake autoconf gcc attr

liburcu-bp需源码安装,yum源里面没有

先执行常规命令安装,进入源码目录后

./bootstrap

./configure

make

sudo make install

执行完常规安装命令后需要执行下面两个命令,才可以让系统找到urcu.

sudo ldconfig

sudo pkg-config --libs --cflags liburcu-bp liburcu

b. Ubuntu下 apt-get安装

sudo apt-get install flex bison libssl-dev libacl1-dev  libsqlite3-dev libxml2-dev liburcu-dev automake autoconf gcc attr

d. 可选安装

此外如果要geo 复制功能,需要额外安装,并开启ssh服务:

yum install -y passwd openssh-client openssh-server

e. docker下安装额外操作

如果机器只有一台,又想测试集群,可以考虑用docker,然而docker对应用有些功能限制,所以不能直接使用,需要多操作一些。

①需要安装attr

yum install attr -y

②没有fuse的时候需要手动建一个

mknod /dev/fuse c 10 229

③运行容器的时候需要提升权限

docker run --privileged=true

例如:

sudo docker run --privileged=true -it -h glfs0 -v /dk/d0:/d --name=glfs0  gfs7:2  /bin/bash

sudo docker run --privileged=true -it --rm -v /dk/rm0:/d gfs7:2 /bin/bash

④. 需要加载一个本地卷,将数据文件放在本地卷的目录中,否则磁盘的额外属性不能使用。

2. glusterfs编译安装

安装完以上依赖后,我们从官网 下载源码,再编译glusterfs,gluserfs编译命令为常规命令,配置时加上--enable-debug表示编译为带debug信息的调试版本

./configure --prefix=/usr

make

sudo make install

二、    GlusterFS服务启停

glusterfs的大部分命令都需要在root权限下运行,没有root权限会出现各种错误,因此我这里的命令前面都加了sudo,如果您直接用root登录,需免去sudo。

1. 启动命令

sudo service glusterd start

sudo /etc/init.d/glusterd start

sudo glusterd

2. 停止命令

sudo service glusterd stop

sudo /etc/init.d/glusterd stop

ps aux|grep glusterd

sudo kill xxxxxx-pid

或ubuntu下

sudo killall glusterd

直接kill需要先停止各volume才比较安全。

三、    集群关联

1. 准备机器(或虚拟机、docker)若干台,我这里启动了4个docker,IP为172.17.0.2 ~ 172.17.0.5

2. 在每台机器上启动glusterFS服务,如上一节。

3. 得到每一台机器的ip或hostname

4. 在第一台机器(172.17.0.2)上执行关联命令,

sudo gluster peer probe 172.17.0.3

sudo gluster peer probe 172.17.0.4

sudo gluster peer probe 172.17.0.5

......

这样所有机器已经连在一起,注意该命令的意思相当于集群邀请某人加入自己的组织。

四、    卷/volume操作

1.创建volume

a. 单磁盘,调试环境推荐

sudo gluster volume create vol_name 172.17.0.2:/d/disk0

b. 多磁盘,无raid,试验、测试环境推荐。

sudo gluster volume create vol_name 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0

c. 多磁盘,有raid1。线上高并发环境推荐。

sudo gluster volume create vol_name replica 2 172.17.0.2:/d/disk0 172.17.0.3:/d/disk0 172.17.0.4:/d/disk0 172.17.0.5:/d/disk0

注意:以上命令中,磁盘数量必须为复制份数的整数倍。

此外有raid0,raid10,raid5,raid6等方法,但是在线上小文件集群不推荐使用。

2.启动volume

刚创建好的volume还没有运行,需要执行运行命令方可使用。

sudo gluster volume start vol_name

3.挂载volume

sudo mkdir /local_mount_dir

sudo mount -t glusterfs -o acl 172.17.0.2:/vol_name /local_mount_dir

4.使用GlusterFS

a. 挂载了GlusterFS的某个卷后,就可以将其当做本地文件访问,代码中只需使用原生的文件api即可。这种方式使用不一定需要root权限,只要拥有对应目录或文件的权限即可。

b. 直接API方式,这种方式需要root权限才能使用,并且JavaPython、ruby的api包装目前都不够完整,一般情况不推荐使用。

5.卸载volume

卸载与挂载操作是一对。虽然没有卸载也可以停止volume,但是这样做是会出问题,如果集群较大,可能导致后面volume启动失败。

sudo umount /local_mount_dir

6.停止volume

停止与启动操作是一对。停止前最好先卸载所有客户端。

sudo gluster volume stop vol_name

7.删除volume

删除与创建操作是一对。删除前需要先停止volume。在生产上一般不会删除volume

sudo gluster volume delete vol_name

8.在线修复

当某块磁盘损坏后,需要换一块新的磁盘回去,这时集群中恰好还预留了备用磁盘,因此用备用磁盘替换损坏的磁盘,命令如下两条命令

sudo gluster volume replace-brick vol_name 172.17.0.3:/d/damaged_disk 172.17.0.16:/d/new_disk commit

sudo gluster volume heal vol_name full

9.在线扩容

随着业务的增长,集群容量不够时,需要添加更多的机器和磁盘到集群中来。

a. 普通情况只需要增加分布的广度就可以,增加的磁盘数量必须为最小扩容单元的整数倍,即replica×stripe,或disperse数的整数倍:

sudo gluster volume add-brick vol_name 172.17.0.11:/d/disk0 172.17.0.12:/d/disk0  172.17.0.13:/d/disk0  172.17.0.14:/d/disk0

该方法执行完后,需要新增的磁盘可能还没有被实际使用,这时需要平衡数据:

sudo gluster volume rebalance vol_name start

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/08ea097cd91e49569bd75b94b692f4fe.html