KVM+GFS 分布式存储系统构建 KVM 高可用群集
一:理论概述
1.1:Glusterfs 简介
Glusterfs 文件系统是由 Gluster 公司的创始人兼首席技术官 Anand Babu Periasamy编写。 一个可扩展的分布式文件系统, 用于大型的、 分布式的、 对大量数据进行访问的应用。
它运行于廉价的普通硬件上, 并提供容错功能。 它可以给大量的用户提供总体性能较高的服务。
Glusterfs 可以根据存储需求快速调配存储, 内含丰富的自动故障转移功能, 且摒弃集中元数据服务器的思想。
适用于数据密集型任务的可扩展网络文件系统, 免费开源。
Gluster于 2011 年 10 月 7 日被 red hat 收购。
1.2:Glusterfs 特点
Glusterfs 体系结构, 将计算、 存储和 I/O 资源聚合到全局名称空间中, 每台服务器都被视为节点, 通过添加附加节点或向每个节点添加额外存储来扩展容量。 通过在更多节点之间部署存储来提高性能。
Glusterfs 支持基于文件的镜像和复制、 分条、 负载平衡、 故障转移、 调度、 磁盘缓存、存储配额、 卷快照等。
Glusterfs 各客户端之间无连接, 本身依赖于弹性哈希算法, 而不是使用集中式或分布式元数据模型。
Glusterfs 通过各种复制选项提供数据可靠性和可用性: 复制卷、 分布卷。
4台服务器部署GFS分布式文件系统
1台服务器部署GFS客户端及KVM虚拟机搭建,4G4核
4台GFS服务器各添加一块20G的磁盘,分区并进行挂载
实验环境
主机名 / IP / 磁盘:挂载点
node01 / 192.168.107.136/ sdb1:/data_kvm
node02 / 192.168.107.137 / sdb1:/data_kvm
node03 / 192.168.107.138 / sdb1:/data_kvm
node04 / 192.168.107.139 / sdb1:/data_kvm
kvm / 192.168.107.140
关闭防火墙和selinux
systemctl disable firewalld
systemctl stop firewalld
setenforce 0
5台服务器都添加hosts文件
cat >> /etc/hosts << EOF
192.168.107.136 node01
192.168.107.137 node02
192.168.107.138 node03
192.168.107.139 node04
192.168.107.140 kvm
时间同步 yum -y install chrony
systemctl start chronyd
chronyc sources -v
1.3 部署GFS
1.1.1 node节点安装gluster
所有node节点上操作
# 安装yum源
[root@node1 ~]# yum -y install centos-release-gluster
# 安装gluster相关软件
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
1.1.2 启动GlusterFS
所有node节点上操作
[root@node1 ~]# systemctl enable --now glusterd
# 出现以下错误可以尝试升级systemd和openssl
[root@node1 ~]# yum -y install systemd openssl
# 报错信息:
[root@node1 ~]# systemctl status glusterd -l
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 六 2021-07-24 15:02:18 CST; 26s ago Docs: man:glusterd(8)
7月 24 15:02:18 node3 systemd[1]: Starting GlusterFS, a clustered file-system server...
7月 24 15:02:18 node3 systemd[1]: glusterd.service: control process exited, code=exited status=1
7月 24 15:02:18 node3 systemd[1]: Failed to start GlusterFS, a clustered file- system server.
7月 24 15:02:18 node3 systemd[1]: Unit glusterd.service entered failed state.
7月 24 15:02:18 node3 systemd[1]: glusterd.service failed.
7月 24 15:02:20 node3 systemd[1]: [/usr/lib/systemd/system/glusterd.service:4] Unknown lvalue 'StartLimitBurst' in section 'Unit'
7月 24 15:02:20 node3 systemd[1]: [/usr/lib/systemd/system/glusterd.service:5] Unknown lvalue 'StartLimitIntervalSec' in section 'Unit
所有node节点上都创建分区,以下以node1为例
[root@node1 ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@node1 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):输入n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):按enter
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):w
[root@node1 ~]# fdisk -l /dev/sdb1
1.1.3 添加节点
仅在node1上执行以下操作,添加node1~node4节点。
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
1.1.4 查看群集状态
通过以下命令在每个节点上查看群集状态,正常情况下每个节点的输出结果均为“State: Peer in Cluster(Connected)”。如果显示 Disconnected,请检查 hosts 文件配置
[root@node1 ~]# gluster peer status
1.1.5 创建分布式复制卷
# 创建分布式复制卷
[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/data_kvm node2:/data_kvm node3:/data_kvm node4:/data_kvm force
# 查看卷的详细信息
[root@node1 ~]# gluster volume info dis-rep
# 启用GlusterFS逻辑卷
[root@node1 ~]# gluster volume start dis-rep
# 查看卷列表,显示所有的卷
[root@node1 ~]# gluster volume list
1.2 部署Gluster客户端即kvm节点
1.2.1 安装客户端软件
# 安装yum源
[root@kvm ~]# yum -y install centos-release-gluster
# 安装gluster相关软件
[root@kvm ~]# yum -y install glusterfs glusterfs-fuse
1.2.2 创建挂载点
[root@kvm ~]# mkdir /data_kvm
1.2.3 挂载Gluster文件系统
# 手动挂载
[root@kvm ~]# mount -t glusterfs node1:dis-rep /data_kvm
# 自动挂载
[root@kvm ~]# vim /etc/fstab
node1:dis-rep /data_kvm glusterfs defaults,_netdev 0 0
[root@kvm ~]# mount -a
[root@kvm ~]# df -Th
1.3 部署kvm
1.3.1 部署KVM
仅在kvm节点部署
# 安装需要的软件包
[root@kvm ~]# yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt virt-manager virt-viewer
# 启动libvirt服务
[root@kvm ~]# systemctl enable --now libvirtd
# 配置桥接网络
[root@kvm ~]# cd /etc/sysconfig/network-scripts/
[root@kvm network-scripts]# vim ifcfg-ens33
#IPADDR=192.168.107.140 ## 这几行注释掉
#NETMASK=255.255.255.0
#GATEWAY=192.168.107.2
#DNS1=192.168.107.2
BRIDGE=br0
[root@kvm01 network-scripts]# vim ifcfg-br0
TYPE=Bridge ##类型为 桥接
NAME=br0
DEVICE=br0
IPADDR=192.168.107.140
NETMASK=255.255.255.0
GATEWAY=172.16.10.2
DNS1=172.16.10.2
UUID=famjoaflajoagm75979afarw ## 注释掉uuid
[root@kvm01 network-scripts]# systemctl restart network
[root@kvm01 network-scripts]# ip a
# 在gluster挂载点下创建存储目录
[root@kvm~]# mkdir /data_kvm/store
[root@kvm ~]# mkdir /data_kvm/iso
# 上传镜像并将镜像移动到/data_kvm/iso/目录下
[root@kvm01 ~]# mv CentOS-7-x86_64-Minimal-1810.iso /data_kvm/iso/
1.3.2 创建虚拟机test01
# 创建虚拟机
[root@kvm01 ~]# virt-install --name test01 -r 3024 --vcpus=4 \
--disk path=/data_kvm/store/test01.qcow2,size=10 -w bridge:br0 \
--virt-type=kvm --accelerate --autostart \
-c /data_kvm/iso/CentOS-7-x86_64-Minimal-1810.iso \
--vnc --vncport=5901 --vnclisten=0.0.0.0
WARNING 无法连接到图形控制台:没有安装 virt-viewer。请安装 'virt-viewer' 软件包。
WARNING 没有控制台用于启动客户机,默认为 --wait -1
开始安装......
正在分配 'test01.qcow2' | 10 GB 00:00:00
ERROR unsupported format character '奠(0xffffffe7) at index 47
域安装失败,您可以运行下列命令重启您的域:
'virsh start virsh --connect qemu:///system start test01'
否则请重新开始安装。
# vnc连接虚拟机进行安装
ip:192.168.107.136:5901 (注意”:”用英文输入法)
名字:test01
# 安装好之后回到kvm主机上开启虚拟机test01
[root@kvm01 ~]# virsh start test01
1.3.3 验证存储
查看4台node节点上的目录里是否存在虚拟机文件
[root@node1 ~]# ll /data_kvm/store
总用量 4168
-rw-------. 2 root root 21478375424 8 月 29 10:40 test01.qcow2
[root@node2 ~]# ll /data_kvm/store
总用量 4168
-rw-------. 2 root root 21478375424 8 月 29 10:40 test01.qcow2
[root@node3 ~]# ll /data_kvm/store
总用量 0
[root@node4 ~]# ll /data_kvm/store