Linux群集之二(基于NFS共享存储的KVM双节点高可用群集配置)

实验目的:运行的虚拟机可以在线平滑迁移,不会终端虚拟机运行的业务
高可用架构:pacemaker+corosync 并由pcs进行管理
系统环境:三台机器都是最新的centos7.4
所需组件:
nfs,pcs,pacemeker,corosync,libvirtd,qemu,qemu-img
约束关系:NFS >> VirtualDomain

kvm宿主节点软件安装:

    #虚拟化软件安装
    yum groups install -y "Virtualization Platform " 
    yum groups install -y "Virtualization Hypervisor "
    yum groups install -y "Virtualization Tools "
    yum groups install -y "Virtualization Client "

    #群集及配套软件安装
    yum install bash-completion ntpdate tigervnc-server  nfs-utils -y
    yum install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all -y

    #升级标准的kvm组件为ev版本(可选)
        yum install centos-release-qemu-ev -y
        yum install qemu-kvm-ev -y

    #或则运行下面这条命令,一步到位
    yum groups install -y "Virtualization Platform "  && yum groups install -y "Virtualization Hypervisor " && yum groups install -y "Virtualization Tools " && yum groups install -y "Virtualization Client " && yum install bash-completion ntpdate tigervnc-server centos-release-qemu-ev nfs-utils -y && yum install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all qemu-kvm-ev -y && yum update -y && reboot

准备阶段:(kvm各个节点都需进行)

    1:设置各主机名,hosts文件(下面的表项),启用selinux及firewalld防火墙
    vim /etc/hosts

    192.168.1.31    kvm-pt1
    192.168.1.32    kvm-pt2
    172.168.1.33    kvm-nfs
    10.0.0.31   node1
    10.0.0.32   node2

    2:ssh key互信
        ssh-keygen -t rsa -P ''
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1 #到自己免密码
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2 #到node2免密码(双向)

    3:时区
        cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    4:定时时间同步
        yum install ntpdate -y
        crontab -e
        */30 * * * * /usr/sbin/ntpdate time.windows.com &> /dev/null

    5:防火墙
        firewall-cmd --permanent --add-service=high-availability
        firewall-cmd --zone=trusted --add-source=10.0.0.0/24 --permanent
        firewall-cmd --zone=trusted --add-source=192.168.1.0/24 --permanent
        firewall-cmd --zone=trusted --add-source=172.168.1.0/24 --permanent
        firewall-cmd --reload

    6:分别在kvm-pt1,kvm-pt2,kvm-nfs三台机器上创建目录
        mkdir /kvm-hosts

第一:配置NFS节点,将/kvm-hosts目录共享出来,并让kvm-pt1和kvm-pt2开机挂载到对应目录

    yum -y install nfs-utils rpcbind

    #设置共享目录
    vim /etc/exports
    /kvm-hosts  *(rw,async,no_root_squash)

    #启动nfs服务,并设为开机启动
    systemctl start nfs
    systemctl start rpcbind
    systemctl enable nfs
    systemctl enable rpcbind

    #在kvm-nfs主机上,firewalld放行nfs服务端口
    firewall-cmd --permanent --add-service=nfs
    firewall-cmd --permanent --add-service=rpc-bind
    firewall-cmd --permanent --add-service=mountd
    firewall-cmd --reload
    firewall-cmd --list-all     #查看firewalld方向的资源

    #分别在kvm-pt1,kvm-pt2上测试是否可以挂载kvm-nfs上的资源(在kvm-pt1和kvm-pt2上进行)

    #编辑此文件实现开机自动挂载
    vim /etc/fstab      

kvm-nfs:/kvm-hosts      /kvm-hosts      nfs     _netdev 0 0

第二:配置kvm宿主节点的pcs守护程序

    systemctl start pcsd
    systemctl enable pcsd
    systemctl status pcsd.service   #查看状态

    echo "1234" | passwd --stdin hacluster
    #配置hacluster账户密码(安装群集软件时,默认创建的用户,但密码是禁用的)(node节点之间的此用户密码必须相同)
    pcs cluster auth node1 node2 -u hacluster -p 1234
    pcs cluster setup --name kvm-ha-cluster node1 node2
    pcs cluster start --all
    pcs cluster enable --all

第三:在kvm-pt1上创建虚拟机,将磁盘文件放在nfs存储的/kvm-hosts目录下

    #先创建虚拟机磁盘文件(kvm-pt1已经将nfs的/kvm-hosts目录挂载到本机的/kvm-hosts目录下了)
    qemu-img create -f qcow2 /kvm-hosts/web01.qcow2 10G

    #先解决selinux对kvm远程虚拟机的限制(此操作,需要在kvm-pt1和kvm-pt2上都执行)
    setsebool -P virt_use_nfs 1

    #在防火墙上放行vnc服务,否在其他主机virt-manage无法连接kvm主机
    firewall-cmd --permanent --add-service=vnc-server
    firewall-cmd --reload
    firewall-cmd --list-all

    #创建虚拟机(并安装完成)
    virt-install --name web01 --virt-type kvm --ram 1024 --cdrom=/kvm-hosts/CentOS-7-x86_64-Minimal-1708.iso --disk path=/kvm-hosts/web01.qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7

第四:虚拟机迁移测试(基于共享存储在线迁移:最好要将xml文件和磁盘文件都放在共享存储上)

    #放行防火墙端口
    #配置防火墙规则(方向如下流量)
        TCP:端口2224,3121,21064
        UDP:端口5405
        DLM(如使用clvm/GFS2的DLM锁管理器):端口21064

    firewall-cmd --permanent --add-port=16509/tcp
    firewall-cmd --permanent --add-port=49152-49215/tcp
    firewall-cmd --reload
    firewall-cmd --list-all

    #在kvm-pt1上使用virsh migrate命令进行在线迁移(并在kvm-pt2上进行回迁)
    virsh migrate web01 qemu+ssh://root@node2/system --live --unsafe --persistent --undefinesource

    #在kvm-pt1上,将虚拟机的xml文件导出一份到共享存储上,并正确命名
    virsh dumpxml web01 > /kvm-hosts/web01.xml

    #在kvm-pt1上,取消定义刚才创建的虚拟机
    virsh undefine web01

第五:配置STONITH(此实验环境都是虚拟出来的,并没有隔离设备)所以这里要关闭它,才能继续实验

    pcs property set stonith-enabled=false

第六:向群集添加虚拟机资源(每个虚拟机都需要创建一个资源)(这是将虚拟机控制权交由pcs来管理了)

pcs resource create web01_res VirtualDomain \
hypervisor="qemu:///system" \
config="/kvm-hosts/hosts-xml/web01.xml" \
migration_transport="ssh"  \
meta allow-migrate="true" 

#meta allow-migrate="true"决定了迁移模式

第七:迁移测试(测试结果显示,标准版的kvm是一端shutdown,另一端然后起来,但是做了kvm升级yum install qemu-kvm-ev的就是平滑迁移,不中断服务)

    #移动资源
    pcs resource move web01_res         #会出现警告,告诉你迁移是有成本的(它会创建一个id,这是一个localtion位置约束,值为负的,即再也无法迁移回来了)
    pcs resource move web01_res node2

    #节点待机
    pcs cluster standby node2   #或则取消待机pcs cluster unstandby node2

    #节点停机
    pcs cluster stop
    pcs resource desribe ocf:heartbeat:VirtualDomain    #查看VirtualDomain脚本怎么写

第八:当迁移时出现负的id时,可能资源无法再次启动了

    pcs constraint --full       #查看产生的所有localtion位置约束

    #删除位置约束
    pcs constraint remove cli-ban-web01_res-on-node2    #删除后,就能启动虚拟机了
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/302.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2022/12/9作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

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

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???