没有共享存储情况下实现KVM虚拟机高可用

Share
Share

1 概述

本文介绍如何在没有共享存储的情况下,通过DRBD和HAE对虚拟机实例进行保护,此实例在切换后仍然保留最新的磁盘数据。

本文适用于已有SUSE Linux Enterprise Server 15 SP1安装基础的技术人员。

本文由SUSE高级解决方案架构师萨柱发提供。

1.1 业务场景

1.1.1 业务需求

以SES6部署为例,Admin node承担了Salt-master角色,并且保存了ceph集群的相关配置结构参数,在生产上建议是HA部署:

如图,部署需要SAN交换机和共享存储,这个跟SES的项目要求是相矛盾的,因为SES项目的目标通常是“去集中存储”。

 

1.1.2 实践方案

实验中,如下图,通过DRBD结合KVM,对Admin-node进行保护,在不增加额外成本的情况下,达到生产环境要求。

 

如图:NODE-1和NODE-2是两个物理机,在内部存储(HDD)上划分一个(或多个)分区作为DRBD的后端块设备,KVM虚拟机使用此后端设备作为存储空间运行,KVM虚拟机作为HA资源与DRBD的M/S状态协同工作。

 

1.2 系统需求

1.2.1 基础设施需求

建议安装环境中有NTP时间基准,用于节点操作系统的时间统一。

1.2.2 硬件需求

对于测试环境,以上服务器的要求的配置如下:

  • CPU : Node: 4c,         VM:2c
  • 内存: Node: 4G, VM:2G
  • 根盘: P1: 30G, P2:24G (预留空间)
  • 网卡: Node:2NICs, VM:1NIC

两个网卡可以在同一个网络,但建议分开在不同的子网。

1.2.3 软件介质需求

请准备以下安装介质:

  • SLE-15-SP1-Installer-DVD-x86_64-QU1-DVD1.iso
  • SLE-15-SP1-Packages-x86_64-QU1-DVD1.iso

QU1是季度更新,未来可能是QU2/QU3等,均可。

 

1.3 安装规划

1.3.1 结构和拓扑图

1.3.2 网络结构

1.3.3 主机IP列表

主 机 集群网络地址 网络地址名字 备 注
NODE-1 10.20.30.71/24 N/A
192.168.98.71/24 node-1 外部地址,一般与主机名相同
NODE-2 10.20.30.72/24 N/A
192.168.98.72/24 node-2 外部地址,一般与主机名相同
ha-vip 192.168.98.70/24 N/A 可选
HA-VM 192.168.98.170 ses-adm

注意:node-1/2是物理机,有两个NIC, ha-vip是集群资源,HA-VM是虚拟机。

2. 安装过程

主要步骤如下:

  1. Node1/Node2上安装SLES 15 SP1操作系统
  2. 激活系统,或者添加光盘介质仓库
  3. 安装kvm相关工具和HAE相关组件
  4. 创建虚拟机

2.1 安装SLES到NODE主机

按照一般SLES安装方法 ,使用iso或者U盘介质启动安装程序,并选择”SUSE Linux Enterprise Server 15 SP1”产品,并完成最小化系统安装。

提示注册时,请暂时跳过,网络配置可暂时跳过,详细过程略。

安装完成后,把前面提及的两个iso文件复制到NODE主机的/opt目录中。

注意 :安装时请注意保留最少24G磁盘空间不要使用,请参考后续DRBD部分。

2.2 系统注册和激活软件模块

注:在产品环境中强烈建议注册到SCC并更新全部系统补丁,如果是试验环境,此环节可选,可直接跳过。

运行以下命令进行系统注册(产品激活),然后更新整个系统:

shell # SUSEConnect -r <您的SES产品注册码>
shell # zypper –n up

说明:运行完会提示重启,可以暂时不理会。

运行以下命令,激活HAE产品模块:

shell # SUSEConnect -p sle-ha/15.1/x86_64 –r <您的SES产品注册码>
注意:SES产品许可中,已包含HAE产品功能,可以激活HAE软件模块。

 

2.3 使用光盘上的软件仓库

注:当跳过系统注册时,可以配置使用光盘软件仓库,此法适合试验环境

把Packages.iso文件复制到/opt目录中,然后运行以下命令配置软件仓库:

shell # zypper ar iso:/Product-SLES?iso=/opt/Packages.iso \

SLE-Prod-SLES-Pool
shell # zypper ar iso:/Module-Basesystem?iso=/opt/Packages.iso \

SLE-Mod-Basesystem-Pool
shell # zypper ar iso:/Module-Server-Applications?iso=/opt/Packages.iso \

SLE-Mod-ServerApp-Pool
shell # zypper ar iso:/Product-HA?iso=/opt/Packages.iso \

SLE-Prod-HA-Pool
注意:上面配置了4个软件仓库,请注意路径和名称不要写错。

 

2.4 安装软件包

运行以下命令安装本文档需要的软件包:

shell # zypper –n in –t pattern kvm_server kvm_tools
shell # zypper –n in –t ha_sles

说明:第一个命令安装kvm虚拟机相关,第二个命令安装HAE相关,也可以两个命令合并在一起运行。

 

运行以下命令安装必要的工具:

shell # zypper –n in vim

或者
shell # zypper –n in –t pattern yast2_basis

说明:两条命令分别对应命令行编辑器和yast2工具集,可根据自己的技能喜好,选择其中一种方法进行存储配置,安装对应工具。

 

2.5 通过图形工具安装

如果您是在图形界面(或使用yast工具),请运行:  yast2 sw_single 或者 “YaST Control Center” 工具,选择其中的“软件管理”或”Software Management”,然后在左边的视图切换到”Pattern”显示模式,勾选”kvm_server kvm_tools ha_sles”。

3. 配置过程

主要包括以下步骤:

  • Node节点系统的网络配置
  • HAE集群服务配置
  • DRBD复制配置
  • HAE+DRBD联动配置
  • VM实例的系统安装
  • VM实例作为HAE集群资源的配置

3.1 Node节点网络配置

在只有一块网卡的情况下,

配置文件或命令 Node-1 Node-2
修改主机名 hostnamectl set-hostname node-1 hostnamectl set-hostname node-2
/etc/hosts 192.168.98.71   node-1.suse.lab node-1

192.168.98.72   node-2.suse.lab node-2

/etc/sysconfig

/network/

ifcfg-br0

BRIDGE=’yes’

BRIDGE_PORTS=’eth0′

BOOTPROTO=’static’

IPADDR=’192.168.98.71/24′

STARTMODE=’auto’

BRIDGE=’yes’

BRIDGE_PORTS=’eth0′

BOOTPROTO=’static’

IPADDR=’192.168.98.72/24′

STARTMODE=’auto’

ifroute-br0 default 192.168.98.1 – –
ifcfg-eth0 BOOTPROTO=’none’
ifcfg-eth1 BOOTPROTO=’static’

IPADDR=’10.20.30.71/24′

STARTMODE=’auto’

BOOTPROTO=’static’

IPADDR=’10.20.30.72/24′

STARTMODE=’auto’

请按以上表格配置双机NODE节点的配置文件;

然后使用root用户运行以下命令,启动网络并验证:

shell # rcnetwork restart
shell # ping –c 3 192.168.98.71
shell # ping –c 3 10.20.30.71
shell # ping –c 3 node-1.suse.lab
请酌情调整上述命令参数进行网络连通性验证。

 

3.2 HAE集群服务配置

注意,以下配置截图的主机名以及IP地址请以您的实际环境为准

3.2.1 配置时间同步

此步骤可选,但在生产环境中强烈建立,如果在测试环境中,请手工做基本对时。

运行以下命令:

shell # yast2 ntp-client

请按照实际情况填写时间服务器地址(或域名)。

 

3.2.2 初始化集群

运行下命令:

shell # ha-cluster-init -u

回答问题:
Do you wish to use SBD (y/n)? n
回答问题:
Do you wish to configure a virtual IP address (y/n)? y
Virtual IP [] 192.168.98.46

说明: -u参数用于指定单播方式,提高兼容性和加快初始化速度。

执行结果如下图:

 

运行以下命令检测集群状态:

shell # crm status

结果可以观察到集群已经成功启动(当前节点,且只有一个)。

集群创建成功后,可通过http://IP:7630/ 登录Hawk服务,使用浏览器对集群进行配置管理,登录用户名是hacluster, 默认密码是linux

安全提示: 请务必修改hacluster用户的密码,避免以后出现安全方面的事故。

 

3.2.3 加入其它节点

在候补节点上,运行以下命令:

shell # ha-cluster-join -c ha-node01
注意回答问题

说明: -c 参数指定集群现存节点。

执行结果如下图:

运行以下命令检测集群状态:

shell # crm status

结果可以观察到集群已经成功增加了节点。

如下图:

安全提示: 集群在处理节点增加时,需要为每个节点的root用户生成ssh的公钥登录, 因此在默认情况下,需要root用户可使用密码登录才能完成节点增加操作,如果在配置前实施过安全加固,请注意处理root用户互认证的情况。

 

3.3 DRBD复制配置

请接下来,我们准备把NODE节点中的空闲磁盘空间划为一个分区(两个节点的分区大小完全相同),然后在两个NODE节点之间进行此分区的DRBD复制。

 

3.3.1 磁盘分区

请使用fdisk工具,或者yast工具为空闲的磁盘空间创建分区,结果如下:

shell # lsblk

NAME           MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda              8:0    0    80G  0 disk

├─sda1           8:1    0   500M  0 part /boot

├─sda2           8:1    0     2G  0 part [SWAP]

├─sda3           8:1    0    30G  0 part /

└─sda4           8:2    0    24G  0 part

 

说明:sda4即是准备配置为DRBD复制的块设备

(注意:块设备可以是分区partition,也可以是逻辑卷lv,视乎实际环境需要)

 

3.3.2 DRBD配置文件

DRBD配置文件的默认位置在/etc/drbd.conf, 其中默认内容包含了/etc/drbd.d/中的两类文件:

  1. 全局配置 (global_common.conf)
  2. 资源配置 (*.res), 最佳实践是为每个资源部署一个资源文件。

这里(在node-1主机上操作)调整两个配置文件(1个全局文件和1个资源文件),配置内容如下:

配置文件 内容
global_common.conf common {

startup {

degr-wfc-timeout 90;

wfc-timeout 100;

}

options {

quorum off;

}

net {

cram-hmac-alg “sha1”;

shared-secret “Abcd1234Password”

protocol C;

}

}

res0.res resource res0 {

connection-mesh {

hosts node-1 node-2;

}

on node-1 {

node-id 0;

address 10.20.30.71:7788;

}

on node-2 {

node-id 1;

address 10.20.30.72:7788;

}

device /dev/drbd0

disk /dev/sda4

meta-disk internal;

}

红色字体的内容,请根据实际情况修改。
检查配置文件: /etc/drbd.d/global_common.conf 和 /etc/drbd.d/res0.res, 使用使用 “drbdadm dump all” 命令检查语法错误, 并确认内容无误,在node-1节点上,运行以下命令同步配置文件:

shell # csync2 -xv /etc/drbd/

注: 如果没有csync2命令,也可以采取其它方法手工同步。

 

3.3.3 DRBD设备初始化

运行以下命令 之一和/或组合 进行初始化:

shell # drbdadm create-md res0    #创建元数据
shell # drbdadm up res0           #启动资源
shell # drbdadm –clear-bitmap new-current-uuid res0 #新设备可以快速完成初始化同步

启动后,可在 /dev/drbd/by-res/目录中查找与配置文件中对应的块设备资源,以及对应的/dev/drbd0设备。

 

3.3.4 启动DRBD复制

在两个节点上,分别运行以下命令启动DRBD服务:

shell(node1) # rcdrbd start
shell(node2) # rcdrbd start
shell(node1) # drbdadm primary –force res0

在node1上,让res0资源成为“主用”(primary), res0资源成为可读写状态。

 

3.3.5 检查DRBD复制状态

在node-1节点上,运行以下命令:

shell # drbdadm status
输出:
res0 role:Primary             #本端Role
disk:UpToDate                 #本端磁盘状态
PEER-NODE role:Secondary      #对端Role
peer-disk:UpToDate            #对端磁盘状态

 

注:UpToDate是正常状态。

 

3.4 配置HAE管理DRBD

HAE使用pacemaker作为集群资源管理器,DRBD资源被其ResourceAgent进行管理,因此系统中的DRBD服务不能自动启动,必须保持开机禁用状态

shell(node1) # systemctl disable –now drbd.service
shell(node2) # systemctl disable –now drbd.service

 

3.4.1 DRBD全局配置变更

DRBD需要报告资源状态,通知集群正确地标记DRBD资源状态。 请修改配置文件,增加如下参数:

shell # cat /etc/drbd.d/global_common.conf

common {

handlers {

fence-peer “/usr/lib/drbd/crm-fence-peer.9.sh”;

after-resync-target “/usr/lib/drbd/crm-unfence-peer.9.sh”;

}

net {

fencing resource-only;

}

}

 

3.4.2 集群的DRBD-RA配置

DRBD在整合HAE时,需要一个基元(DRBD资源名为“res0”)和一个MS多状态资源, 配置示例如下:

primitive rsc_drbd_res0 ocf:linbit:drbd \

params drbd_resource=res0 \

op monitor interval=21 timeout=20 role=Master \

op monitor interval=22 timeout=21 role=Slave

ms ms_drbd_res0 rsc_drbd_res0 \

meta master-max=1 master-node-max=1 \

clone-max=2 clone-node-max=1 \

notify=true target-role=Started

 

 

3.5 安装虚拟机操作系统

完成DRBD配置完成后,primary一侧的drbd0设备可以读写,所以在primary节点上进行安装操作。

启动虚拟机安装前,先设置libvirtd服务:

shell(node1) # systemctl enable –now libvirtd.service
shell(node2) # systemctl enable –now libvirtd.service

 

3.5.1 启动虚拟机安装

在drbd的primary节点,运行以下命令:

shell(node1) # virt-install \

–name sesadm \

–os-variant sle15sp1 \

–vcpus 4 –memory 2048 \

–virt-type kvm \

–disk /dev/drbd0 \

–network bridge=br0 \

–extra-args=”console=ttyS0 textmode=1″ \

–graphics none \

–location /opt/SLE-15-SP1-Installer-DVD-x86_64-QU1-DVD1.iso

 

 

3.5.2 虚拟机安装过程

安装程序将以文本方式启动, 依照文本YaST工具使用方法(TAB/SPACE/RETURN三键切换)交互操作安装过程,重要的设置如下:

(上图)1.安装程序开始

(上图)2.系统设置

(上图)3.GRUB2设置

最后选择 [Install] 开始安装过程.

注意:由于使用了–graphics none , 务必在GRUB2设置中, 禁用图形终端。

 

3.6 配置HAE管理虚拟机资源

前面的步骤中,安装好虚拟机后,虚拟机描述文件已经创建。

3.6.1 准备虚拟机资源文件目录

要创建指定的目录,在两个节点上,分别运行以下命令:

shell(node1) # mkdir /etc/havm
shell(node2) # mkdir /etc/havm

 

3.6.2 管理虚拟机描述文件

在安装虚拟机的节点上,运行以下命令:

shell # virsh list
Id   Name           State

——————————

1    sesadm        running
shell # virsh destroy –domain sesadm
shell # virsh dumpxml –domain sesadm > /etc/havm/sesadm.xml
shell # virsh undefine –domain sesadm

 

编辑/etc/csync2/csync2.cfg 文件,增加以下内容:

shell # cat /etc/csync2/csync2.cfg

include /etc/havm;

}

然后同步两个节点的虚拟机描述文件,运行以下命令:

shell # csync2 -xv

Finished with 0 errors.  # 此结果表示结果正常

此时在另一个节点的/etc/havm/目录中,可以找到sesadm.xml文件。

 

3.6.3 配置虚拟机RA配置

配置一个虚拟机基元,一个drbd和kvm的共置约束,一个先drbd后kvm的顺序约束,如下:

primitive rsc_kvm_sesadm ocf:heartbeat:VirtualDomain \

params config=”/etc/havm/sesadm.xml” \

op monitor timeout=30 interval=10 \

op stop timeout=360s interval=0 \

op start timeout=120s interval=0 \

meta target-role=Started

colocation kvm_sesadm_on_drbd inf: rsc_kvm_sesadm ms_drbd_res0:Master

order drbd_before_kvm inf: ms_drbd_res0:promote rsc_kvm_sesadm:start

 

 

4 运行和管理

4.1 运行状态

命令和输出结果请参看下图:

注意:资源名可能略有不同,请区分清楚。

 

4.2 简单资源管理

SUMA支持多种客户端管理方式(无代理/常规代理/Salt代理),下面以常规代理为例,进行客户管理。

停止虚拟机,运行以下命令:

shell # crm resource stop rsc_kvm_sesadm

 

迁移虚拟机到另一个节点,运行以下命令:

shell # crm resource move rsc_kvm_sesadm force

shell # crm resource unmove rsc_kvm_sesadm

进入虚拟机的控制台,运行以下命令:

shell # virsh console –domain sesadm

 

 

5 其它特殊说明

SUSE在产品支持上,要求有stonith机制,让HA可以fence掉异常节点,以保护共享存储。

在本案例中,由于主要业务场景是通过DRBD进行复制,以充分利用OSD节点对admin节点进行保护,并没有使用共享存储;且DRBD已经配置了资源级别的fence,因此HA中没有配置stonith机制对数据没有任何风险的;

如果要消除警告,可以配置ipmi的 stonith,或者结合第三个节点,配置sbd-diskless,请参考其它文档,或者选择SUSE的consultant服务进行深入支持。

Share
(Visited 23 times, 1 visits today)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

No comments yet

Avatar photo
10,553 views