1. 概述
本篇博客記錄如何部署一個高可用的無盤工作站。
無盤工作站,即節點開機啓動以後,從pxe引導,把操作系統的根文件系統創建在網絡文件系統(NFS)上。
需要部署的服務有:
- pacemaker 負責高可用集羣管理
- nfs 負責共享網絡文件系統
- dhcp 負責分配網絡信息
- tftp 負責分發網絡引導配置
本篇博客在deepin操作系統完成,在deepin操作系統通過kvm虛擬機創建虛擬機,通過虛擬機來部署上述集羣。
2. 部署過程
這部分大致過程如下:先創建2個虛擬機:node11和node12。配置2個節點ssh互信,以便後續操作能夠正常進行。爲node11和node12添加共享磁盤,當作NAS設備。在node11和node12節點間,通過pacemaker+nfs實現根文件系統的高可用。配置dhcp和tftp,來實現當客戶端通過pxe啓動時,能夠將文件系統掛載到共享存儲。
2.1 創建虛擬機
略。可以創建一臺虛擬機以後,通過virt-clone進行克隆。
2.2 創建共享存儲
創建共享存儲的目的,就是爲了能夠讓2個節點都能夠使用該設備保存的數據,高效地保證服務高可用。
deepin系統通過qemu-img爲2個虛擬機添加共享存儲,過程如下:
1.創建虛擬磁盤存放目錄:mkdir -p /var/lib/libvirt/disks/
2.創建虛擬磁盤:cd /var/lib/libvirt/disks/; qemu-img create -f raw nas.img 10G
3.爲虛擬機node11和node12添加共享磁盤
virsh edit node11
,在devices標籤下添加:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/disks/nas.img'/>
<target dev='vdb' bus='virtio'/>
<shareable/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
</disk>
node12同樣操作:virsh edit node12
4.重啓node11和node12:virsh destroy node11 && virsh start node11
,node12同樣操作
5.在node11裏面,格式化磁盤/dev/vdb
:mkfs.xfs /dev/vdb
至此完成2個虛擬機可見共享磁盤/dev/vdb
注意:此時在node11完成對磁盤的格式化後 ,無需在node12繼續格式化操作。同時需要注意,因爲系統是centos7,如果默認的文件系統是xfs,那麼格式化磁盤/dev/vdb時,應保持與操作系統一致
2.3 配置pacemaker+nfs
配置pacemaker需要node11和node12配置ssh互信,此過程略。
此部分繼續詳述一遍配置pacemaker+nfs高可用的過程
1.node11和node12均執行:yum -y install pcs pacemaker fence-agents-all
2.node11和node12均執行:passwd hacluster
,輸入密碼
3.node11和node12均執行:systemctl start pcsd && systemctl enable pcsd
4.node11執行:pcs cluster auth node11 node12
5.node11執行:pcs cluster setup --start --name my_cluster node17 node18
6.node11執行:pcs cluster enable
pacemaker集羣管理已經配置完成,開始配置資源
pcs resource create nfs_disk ocf:heartbeat:Filesystem device=/dev/vdc directory=/opt/hpc fstype=xfs --group nfs_group
pcs resource create nfs_server ocf:heartbeat:nfsserver nfs_shared_infodir=/opt/hpc/nfsinfo --group nfs_group
pcs resource create nfs_export ocf:heartbeat:exportfs clientspec="192.168.80.0/24" options=rw,sync,no_root_squash,no_all_squash directory=/opt/hpc fsid=0 --group nfs_group
pcs resource create nfs_vip ocf:heartbeat:IPaddr2 nic=eth0 ip=192.168.80.188 cidr_netmask=24 --group nfs_group
執行:pcs status
查看結果,pacemaker+nfs已經配置完成
2.4 創建根文件系統
在node11上執行:mkdir -p /opt/hpc/os
執行命令:rsync -av --exclude='/proc' --exclude='/sys' --exclude='/tmp' --exclude='/run' --exclude='/var/tmp' --exclude='/opt/hpc' /* /opt/hpc/os/
創建未拷貝的目錄:cd /opt/hpc/os/; mkdir -p proc sys tmp run /var/tmp
修改配置文件:vim /opt/hpc/os/etc/fstab
,內容如下:
#
# /etc/fstab
# Created by anaconda on Sun May 22 22:18:23 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
192.168.80.188:/opt/hpc/os / nfs defaults 0 0
2.4 配置dhcp+tftp
1.node11和node12執行:yum -y install dhcp
2.node11和node12執行:編輯dhcp的配置文件:vim /etc/dhcp/dhcpd.conf
內容如下:
ddns-update-style none;
default-lease-time 259200;
max-lease-time 518400;
option routers 192.168.80.1;
option domain-name-servers 192.168.80.1;
subnet 192.168.80.0 netmask 255.255.255.0 {
range 192.168.80.51 192.168.80.59;
option subnet-mask 255.255.255.0;
next-server 192.168.80.188;
filename "pxelinux.0";
}
host node51 {
option host-name node51;
hardware ethernet 00:00:00:80:00:51;
fixed-address 192.168.80.51;
}
host node52 {
option host-name node52;
hardware ethernet 00:00:00:80:00:52;
fixed-address 192.168.80.52;
}
3.node11和node12執行:yum -y install tftp-server xinetd
4.node11和node12執行編輯配置文件:vim /etc/xinetd.d/tftp
,內容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /opt/hpc/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
5.node11上執行創建/opt/hpc/tftptoot目錄:mkdir -p /opt/hpc/tftpboot
6.node11上執行以下操作:
# 1. 安裝syslinux
yum -y install syslinux
# 2. 拷貝所需要的文件
cp /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /opt/hpc/tftpboot
# 3. 創建所需目錄
mkdir -p /opt/hpc/tftpboot/{pxelinux.cfg,centos7.9}
# 4. 掛載操作系統鏡像iso,拷貝所需文件
mkdir -p /mnt/iso
mount -o loop CentOS-7-x86_64-Minimal-2009.iso /mnt/iso
cp /mnt/iso/isolinux/{initrd.img,vmlinuz} /opt/hpc/tftpboot/centos7.9
7.創建/opt/hpc/tftpboot/pxelinux.cfg/default,內容如下:
default vesamenu.c32
timeout 50
display boot.msg
menu clear
menu background splash.png
menu title CentOS 7 menu
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
menu color border * #00000000 #00000000 none
menu color sel 0 #ffffffff #00000000 none
menu color title 0 #ff7ba3d0 #00000000 none
menu color tabmsg 0 #ff3a6496 #00000000 none
menu color unsel 0 #84b8ffff #00000000 none
menu color hotsel 0 #84b8ffff #00000000 none
menu color hotkey 0 #ffffffff #00000000 none
menu color help 0 #ffffffff #00000000 none
menu color scrollbar 0 #ffffffff #ff355594 none
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
label linux
menu label ^Install CentOS 7.9 through pxe
kernel ./centos7.9/vmlinuz
append initrd=./centos7.9/initrd.img root=nfs:192.168.80.188:/opt/hpc/os selinux=0 ip=dhcp
8.添加dhcp和tftp服務到pacemaker集羣
pcs resource create pxe_dhcp systemd:dhcpd --group nfs_group
pcs resource create pxe_xinetd systemd:xinetd --group nfs_group
9.查看集羣資源
Cluster name: my_hpc_cluter
Stack: corosync
Current DC: node12 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Sat Jul 2 21:42:17 2022
Last change: Sat Jul 2 20:13:43 2022 by root via cibadmin on node12
2 nodes configured
6 resource instances configured
Online: [ node11 node12 ]
Full list of resources:
Resource Group: nfs_group
nfs_disk (ocf::heartbeat:Filesystem): Started node12
nfs_srv (ocf::heartbeat:nfsserver): Started node12
nfs_exp (ocf::heartbeat:exportfs): Started node12
nfs_vip (ocf::heartbeat:IPaddr2): Started node12
pxe_dhcp (systemd:dhcpd): Started node12
pxe_xinetd (systemd:xinetd): Started node12
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
至此,全部服務已經部署完成,可以進行測試。
2.5 使用virt-install創建測試虛擬機
創建create_kvm_node.sh,內容如下:
if [ $# -ne 1 ]
then
echo "$(basename $0) num"
exit 0
fi
virt-install \
--os-variant=rhel7.6 \
--name node${1} \
--vcpu=4 \
--memory=4096 \
--disk /var/lib/libvirt/images/node${1}.qcow2,cache=none,size=10 \
--network=default,mac=00:00:00:80:00:${1} \
--graphics vnc \
--pxe \
2>/dev/null
終端執行:bash create_kvm_nodes.sh 51
創建虛擬機node51
執行命令:virt-manager --connect qemu:///system --show-domain-console node51
,打開virt-manager查看node51的啓動過程
當node51進入操作系統後,執行df -h
查看其根文件系統爲:192.168.80.188:/opt/hpc/os