Keepalived+Glustefs分布式存储

环境

CentOS-7.6
IP: 192.168.2.7[1-3]
VIP: 192.168.2.80
hostname=node[1-3].local

配置解析

node[1-3].local

cat >> /etc/hosts  <<'EOF'
192.168.2.71    node1.local
192.168.2.72    node2.local
192.168.2.73    node3.local
EOF

hostnamectl set-hostname node1.local
hostnamectl set-hostname node2.local
hostnamectl set-hostname node3.local

selinux firewalld

node[1-3].local

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/conf
firewall-cmd --set-default-zone=trusted
firewall-cmd --complete-reload

配置软件源

node[1-3].local

rm -f /etc/yum.repos.d/*.repo
curl -so /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -so /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i '/aliyuncs.com/d' /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/epel-7.repo
yum install -y centos-release-gluster41

安装 glusterfs

node[1-3].local

yum install -y glusterfs-server

启动服务跟随系统启动

node[1-3].local

systemctl start glusterd
systemctl enable glusterd

配置集群

node1.local

配置信任池

gluster peer probe node2.local
gluster peer probe node3.local

从信任池中删除

gluster peer detach node3.local force

检查信任池状态

gluster peer status
netstat -antp | grep glusterd
配置分布式卷

node1.local

存储空间为所有设备的容量之和

配置存储位置

# node[1-3].local
mkdir -p /data/glusterfs/gv0

创建Gluster卷

gluster volume create gv0 transport tcp node1.local:/data/glusterfs/gv0 node2.local:/data/glusterfs/gv0 node3.local:/data/glusterfs/gv0 force

启动GlusterFS卷

gluster volume start gv0
gluster volume status
gluster volume info gv0

安装配置 keepalived

node[1-3].local

安装

yum install -y keepalived

配置

cat > /etc/keepalived/keepalived.conf <<'EOF'
! Configuration File for keepalived

global_defs {
   router_id 10
}

vrrp_instance VI_1 {
  state BACKUP
      interface eth0
    virtual_router_id 110
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 125
    }
    virtual_ipaddress {
        192.168.2.80
    }
}
EOF

启动服务 跟随系统启动

systemctl start keepalived
systemctl enable keepalived

挂载

mount -t glusterfs -o defaults,_netdev 192.168.2.80:/gv0 /mnt

GlusterFS 五种卷

Distributed:分布式卷,文件通过 hash 算法随机分布到由 bricks 组成的卷上。 Replicated: 复制式卷,类似 RAID 1,replica 数必须等于 volume 中 brick 所包含的存储服务器数,可用性高。 Striped: 条带式卷,类似 RAID 0,stripe 数必须等于 volume 中 brick 所包含的存储服务器数,文件被分成数据块,以 Round Robin 的方式存储在 bricks 中,并发粒度是数据块,大文件性能好。 Distributed Striped: 分布式的条带卷,volume中 brick 所包含的存储服务器数必须是 stripe 的倍数(>=2倍),兼顾分布式和条带式的功能。 Distributed Replicated: 分布式的复制卷,volume 中 brick 所包含的存储服务器数必须是 replica 的倍数(>=2倍),兼顾分布式和复制式的功能。 分布式复制卷的brick顺序决定了文件分布的位置,一般来说,先是两个brick形成一个复制关系,然后两个复制关系形成分布。 企业一般用后两种,大部分会用分布式复制(可用容量为 总容量/复制份数),通过网络传输的话最好用万兆交换机,万兆网卡来做。这样就会优化一部分性能。它们的数据都是通过网络来传输的。

配置分布式卷

node1.local

存储空间为所有设备的容量之和

配置存储位置

mkdir -p /data/glusterfs/gv0

创建Gluster卷

gluster volume create gv0 transport tcp node1.local:/data/glusterfs/gv0 node2.local:/data/glusterfs/gv0 node3.local:/data/glusterfs/gv0 force

启动GlusterFS卷

gluster volume start gv0
gluster volume status
gluster volume info gv0
配置复制卷

存储空间为总容量的一半

# 注:复制模式,既AFR, 创建volume 时带 replica x 数量: 将文件复制到 replica x 个节点中
# gluster volume create gv2 replica 2 node1.local:/data/glusterfs/gv2 node2.local:/data/glusterfs/gv2 force
# gluster volume start gv2
# gluster volume info gv2   # 查看gv2信息 Type
配置条带卷

写入的时候是循环地一点一点在node01和node02的磁盘上

# gluster volume create gv3 stripe 2 node1.local:/data/brick3 node2.local:/data/brick3 force
# gluster volume start gv3
# gluster volume info gv3  # 查看gv2信息 Type
配置分布式复制

最少需要4台服务器才能创建

# 将原有的复制卷gv2进行扩容,使其成为分布式复制卷
# gluster volume stop gv2
# gluster volume add-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force
# gluster volume start gv2
# gluster volume info gv2   # 查看gv2信息 Type

注意:当你给分布式复制卷和分布式条带卷增加 bricks 时,你增加的 bricks 数目必须是复制或条带数目的倍数, 例如:你给一个分布式复制卷的 replica 为 2,你在增加 bricks 的时候数量必须为2、4、6、8等。 扩容后进行测试,发现文件都分布在扩容前的卷中。

配置分布式条带卷
# 将原有的复制卷gv3进行扩容,使其成为分布式条带卷
# gluster volume stop gv3
# gluster volume add-brick gv3 stripe 2 node3.local:/data/glusterfs/gv3 node4.local:/data/glusterfs/gv3 force
# gluster volume start gv3
# gluster volume info gv3  # 查看gv3信息 Type

分布式复制卷的最佳实践

1)搭建条件

  • 块服务器的数量必须是复制的倍数
  • 将按块服务器的排列顺序指定相邻的块服务器成为彼此的复制
  • 例如,8台服务器:
  • 当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,3和4作为一个复制,5和6作为一个复制,7和8作为一个复制
  • 当复制副本为4时,按照服务器列表的顺序,服务器1/2/3/4作为一个复制,5/6/7/8作为一个复制

2)创建分布式复制卷

磁盘存储的平衡 平衡布局是很有必要的,因为布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。

磁盘存储平衡

# gluster volume rebalance gv2 start

查看平衡存储状态

# gluster volume rebalance gv2 status

移除 brick

你可能想在线缩小卷的大小,例如:当硬件损坏或网络故障的时候,你可能想在卷中移除相关的 bricks。 注意:当你移除 bricks 的时候,你在 gluster 的挂载点将不能继续访问数据,只有配置文件中的信息移除后你才能继续访问 bricks 中的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的 bricks 数目必须是 replica 或者 stripe 的倍数。 但是移除brick在生产环境中基本上不做的,如果是硬盘坏掉的话,直接换个好的硬盘即可,然后再对新的硬盘设置卷标识就可以使用了,后面会演示硬件故障或系统故障的解决办法。

# gluster volume stop gv2
# gluster volume remove-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force
# gluster volume start gv2

如果误操作删除了后,其实文件还在 /storage/brick1 里面的,加回来就可以了

# gluster volume add-brick gv2 replica 2 node3.local:/data/glusterfs/gv2 node4.local:/data/glusterfs/gv2 force
# gluster volume info gv2

删除卷

gluster volume stop gv1
gluster volume delete gv1

模拟误删除卷信息故障及解决办法

rm -rf /data/glusterfs/gv3
gluster volume sync node2.local

节点故障

物理故障 同时有多块硬盘故障,造成数据丢失 系统损坏不可修复 解决方法:

找一台完全一样的机器,至少要保证硬盘数量和大小一致,安装系统,配置和故障机同样的 IP,安装 gluster 软件, 保证配置一样,在其他健康节点上执行命令 gluster peer status,查看故障服务器的 uuid 例如 node2 故障可在其他节点查看

[root@node1 ~]# gluster peer status
Number of Peers: 2

Hostname: node2.local
Uuid: a2d1e5a4-56ff-498b-aed1-2377b27b1ee6
State: Peer in Cluster (Connected)

Hostname: node3.local
Uuid: c6aae718-c73d-4585-8f02-d1fec473fd38
State: Peer in Cluster (Connected)


[root@node2 ~]# sed -i 's/UUID=.*/UUID=a2d1e5a4-56ff-498b-aed1-2377b27b1ee6/' /var/lib/glusterd/glusterd.info

# 在信任存储池中任意节点执行 就会自动开始同步,但在同步的时候会影响整个系统的性能
# gluster volume heal gv2 full

# 查看状态
# gluster volume heal gv2 info

glustefs分布式存储优化

优化参数

Auth_allow                         # IP访问授权;缺省值(*.allow all);合法值:Ip地址
Cluster.min-free-disk              # 剩余磁盘空间阀值;缺省值(10%);合法值:百分比
Cluster.stripe-block-size           # 条带大小;缺省值(128KB);合法值:字节
Network.frame-timeout              # 请求等待时间;缺省值(1800s);合法值:1-1800
Network.ping-timeout               # 客户端等待时间;缺省值(42s);合法值:0-42
Nfs.disabled                       # 关闭NFS服务;缺省值(Off);合法值:Off|on
Performance.io-thread-count          # IO线程数;缺省值(16);合法值:0-65
Performance.cache-refresh-timeout  # 缓存校验时间;缺省值(1s);合法值:0-61
Performance.cache-size             # 读缓存大小;缺省值(32MB);合法值:字节

Performance.quick-read               # 优化读取小文件的性能
Performance.read-ahead               # 用预读的方式提高读取的性能,有利于应用频繁持续性的访问文件
Performance.write-behind             # 先写入缓存内,在写入硬盘,以提高写入的性能。
Performance.io-cache                 # 缓存已经被读过的、

优化参数调整

# 命令格式:
# gluster.volume set <卷><参数>

# 例如:
# 打开预读方式访问存储
[root@node01 ~]# gluster volume set gv2 performance.read-ahead on

# 调整读取缓存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M

常用命令

#看下节点有没有在线
gluster volume status nfsp

#启动完全修复
gluster volume heal gv2 full

#查看需要修复的文件
gluster volume heal gv2 info

#查看修复成功的文件
gluster volume heal gv2 info healed

#查看修复失败的文件
gluster volume heal gv2 heal-failed

#查看主机的状态
gluster peer status

#查看脑裂的文件
gluster volume heal gv2 info split-brain

#激活quota功能
gluster volume quota gv2 enable

#关闭quota功能
gulster volume quota gv2 disable

#目录限制(卷中文件夹的大小)
gluster volume quota limit-usage /data 30MB --/gv2/data

#quota信息列表
gluster volume quota gv2 list

#限制目录的quota信息
gluster volume quota gv2 list /data

#设置信息的超时时间
gluster volume set gv2 features.quota-timeout 5

#删除某个目录的quota设置
gluster volume quota gv2 remove /data

quota功能,主要是对挂载点下的某个目录进行空间限额。如:/mnt/gulster/data目录,而不是对组成卷组的空间进行限制。

转载于:https://my.oschina.net/yx571304/blog/3034184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值