本章内容:
学会KVM+GFS分布式存储高可用
1.0 案例环境
1.案例环境
大规模使用 KVM 虚拟机来运行业务,为了保证公司虚拟机能够安全稳定运行, 决定采用 KVM+GlusterFS 模式,来保证虚拟机存储的分布部署,以及分布冗余。避免当虚 拟机文件损坏,或者丢失。从而在损坏或就丢失时有实时备份,保证业务正常运行。
案例环境如表:
拓扑如下:
2.案例需求
1)部署GlusterFS 文件系统
2)实现KVM 虚拟主机不会因为宿主机宕机而宕机
3.案例实现思路
1)安装KVM
2)所有节点部署 GlusterFS
3)客户端挂载GlusterFS
4)KVM 使用挂载的 GlusterFS 目录创建虚拟机
1.1 安装部署KVM虚拟化平台
1)安装KVM 虚拟化平台
在 CentOS 的系统光盘镜像中,已经提供了安装 KVM 所需软件。通过部署基于光盘镜 像的本地 YUM 源,直接使用 YUM 命令安装所需软件即可,安装 KVM 所需软件具体包含 以下几个。
1)准备KVM装环境
cpu 2个4核心,内存32G,硬盘100G,配置CPU支持虚拟化
2) yum 安装 kvm
yum -y install qemu-kvm qemu-kvm-tools virt-install qemu-img bridge-utils libvirt
3)验证
重启系统后,查看 CPU 是否支持虚拟化,对于 Intel 的服务器可以通过以下命令查看, 只要有输出就说明 CPU 支持虚拟化;AMD 服务器可用 cat /proc/cpuinfo | grep smv 命令查 看。
检测KVM模块是否安装
[root@kvm03 ~]# lsmod | grep kvm
kvm_intel 183621 0
kvm 586948 1 kvm_intel
irqbypass 13503 1 kvm
[root@kvm03 ~]#
4)开启libvirtd 服务
[root@kvm03 ~]# systemctl start libvirtd
[root@kvm03 ~]# systemctl enable libvirtd
2)设置 KVM 网络
宿主服务器安装完成 KVM,首先要设定网络,在 libvirt 中运行 KVM 网络有两种方法: NAT 和 Bridge,默认是 NAT
关于两种网络模式的说明:
- 用户模式,即 NAT 方式,这种方式是默认网络,数据包由 NAT 方式通过主机的网卡接 口进行传送,可以访问外网,但是无法让外部主机访问虚拟机内部网络
- 桥接模式,这种模式允许虚拟机像一台独立的主机一样拥有网络,外部的机器可以直接 访问到虚拟机内部,但需要网卡支持,一般有线网卡都支持。
这里以 Bridge(桥接)为例进行操作演示。注:宿主机 IP 地址为 192.168.182.252 。
[root@kvm03 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm03 network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@kvm03 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="731875a9-a25c-427b-b06f-c5560e1830ed"
DEVICE="ens33"
ONBOOT="yes"
#IPADDR="192.168.182.252" //#号注释
#PREFIX="24"
#GATEWAY="192.168.182.2"
#DNS1="202.96.128.86"
#DNS2="119.29.29.29"
IPV6_PRIVACY="no"
BRIDGE=br0 //添加这行内容
[root@kvm03 ~]#
[root@kvm03 network-scripts]# cat ifcfg-br0
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.182.252
NETMASK=255.255.255.0
GATEWAY=192.168.182.2
DNS1=202.96.128.86
DNS2=119.29.29.29
TYPE=Bridge
[root@kvm03 network-scripts]#
重启 network 服务
[root@kvm03 ~]# systemctl restart network
确认IP地址信息
出现以上信息,说明网卡桥接成功了
1.2 部署GlusterFS
每台节点硬件 最少4G内存 多添加一个硬盘
所有节点执行如下命令
1)关闭防火墙SELinux,将4台服务器主机名分别改为node01,node02,node03,node04 下面在node01上操作演示
[root@node01 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@node01 ~]# setenforce 0
setenforce: SELinux is disabled
[root@node01 ~]#
2)编写 hosts 文件
[root@node01 ~]# vim /etc/hosts
[root@node01 ~]# cat /etc/hosts | grep node
192.168.182.102 node01
192.168.182.103 node02
192.168.182.104 node03
192.168.182.105 node04
[root@node01 ~]#
3)安装软件
件 本实验采用官方 YUM 源安装 GlusterFS 所需要软件,具体安装方法如下(在所有节点 上操作)。下面以 nod
[root@node01 ~]# yum -y install centos-release-gluster
[root@node01 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如果出现以下报错
执行如下命令
[root@node01 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma --skip-broken
4)启动 GlusterFS
在所有节点执行以下操作,下面以node01 为例进行操作演示
[root@node01 ~]# systemctl start glusterd && systemctl enable glusterd
5)只需要在node01上执行即可 在node01上添加所有节点,如果报错可以检测防火墙,SELinux,主机名及hosts 文件是否正确
[root@node01 ~]# gluster peer probe node02
peer probe: success
[root@node01 ~]# gluster peer probe node03
peer probe: success
[root@node01 ~]# gluster peer probe node04
peer probe: success
[root@node01 ~]#
6)查看群集状态
[root@node01 ~]# gluster peer status
Number of Peers: 3
Hostname: node02
Uuid: 9825abc6-6620-486c-b405-ee68776cde66
State: Peer in Cluster (Connected)
Hostname: node03
Uuid: ef01a8e7-5049-4aba-b486-76c66c15a0df
State: Peer in Cluster (Connected)
Hostname: node04
Uuid: 3130907a-79fc-4d85-839f-0b9cf90ece11
State: Peer in Cluster (Connected)
[root@node01 ~]#
7)格式化硬盘
配置文件类型为xfs
[root@node01 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=1310656 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242624, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node01 ~]#
挂载
[root@node01 ~]# mkdir /data
[root@node01 ~]# mount /dev/sdb1 /data/
[root@node01 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 17G 4.4G 13G 26% /
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 13M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 166M 849M 17% /boot
tmpfs tmpfs 394M 12K 394M 1% /run/user/42
tmpfs tmpfs 394M 0 394M 0% /run/user/0
/dev/sdb1 xfs 20G 33M 20G 1% /data
[root@node01 ~]#
1.3 创建 GlusterFS 分布式复制卷
当前一共有四个节点,设置为 2x2=4,就是 2 个节点为一组,一个卷组两个节点会有 相同的数据。从而达到虚拟机数据分布式存储并有冗余备份。
1)创建分布式复制卷
[root@node01 ~]# gluster volume create models replica 2 node01:/data node02:/data node03:/data node04:/data force
volume create: models: success: please start the volume to access data
[root@node01 ~]#
2)启动卷
[root@node01 ~]# gluster volume start models
volume start: models: success
3)查看卷
[root@node01 ~]# gluster volume info models
Volume Name: models
Type: Distributed-Replicate //卷的类型(这里用分布式复制卷)
Volume ID: d8b03f2b-4913-4684-a9ef-a3b5c1d7b988
Status: Started //启动状态
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks: //创建的主机中的块
Brick1: node01:/data
Brick2: node02:/data
Brick3: node03:/data
Brick4: node04:/data
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
[root@node01 ~]#
1.4 客户端挂载GlusterFS卷
1)kvm 安装Glusterfs 客户端软件
[root@kvm03 ~]# yum -y install centos-release-gluster
2)创建挂载目录
[root@kvm03 ~]# yum -y install glusterfs glusterfs-fuse
3)配置hosts文件
[root@kvm03 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.182.102 node01
192.168.182.103 node02
192.168.182.104 node03
192.168.182.105 node04
192.168.182.252 kvm
4)关闭防火墙 SELinux
[root@kvm03 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@kvm03 ~]# setenforce 0
5)创建挂载目录,并挂载models卷
[root@kvm03 ~]# mkdir /kvmdata
[root@kvm03 ~]# mount -t glusterfs node01:models /kvmdata/
[root@kvm03 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 90G 2.1G 88G 3% /
devtmpfs devtmpfs 16G 0 16G 0% /dev
tmpfs tmpfs 16G 0 16G 0% /dev/shm
tmpfs tmpfs 16G 12M 16G 1% /run
tmpfs tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sda2 xfs 5.0G 33M 5.0G 1% /home
tmpfs tmpfs 3.2G 0 3.2G 0% /run/user/0
node01:models fuse.glusterfs 40G 475M 40G 2% /kvmdata //挂载成功
[root@kvm03 ~]#
1.5 KVM 使用卷创建虚拟机
1)在kvmdata卷中创建iso存放镜像,创建volume文件存放虚拟机磁盘
[root@kvm03 ~]# mkdir /kvmdata/iso
[root@kvm03 ~]# mkdir /kvmdata/volume
[root@kvm03 ~]# ls /kvmdata/
iso volume
[root@kvm03 ~]#
2)上传镜像到iso文件中(如果本地有可以使用本地的)这里使用Centos7镜像
[root@kvm03 iso]# ls
CentOS-7-x86_64-DVD-2009.iso
3)创建虚拟机
[root@kvm03 ~]# virt-install -n test02 -r 1024 --vcpus=1 --disk path=/kvmdata/volume/test02.qcow2,size=10 -w bridge:br0 --virt-type=kvm --accelerate --autostart -c /kvmdata/iso/CentOS-7-x86_64-DVD-2009.iso --vnc --vncport=5902 --vnclisten=0.0.0.0
5)验证存储,在四台节点上查看目录里是否存在虚拟机文件。可以看出虚拟机文件 已经存放在第二组 node3、node4 里。
[root@node01 ~]# ll /data/volume/
总用量 0
[root@node02 ~]# ll /data/volume/
总用量 0
[root@node03 ~]# ll /data/volume/
总用量 2248
-rw-------. 2 qemu qemu 10739318784 4月 9 10:36 test02.qcow2
[root@node04 ~]# ll /data/volume/
总用量 2248
-rw------- 2 qemu qemu 10739318784 4月 9 10:36 test02.qcow2