这篇文章将为大家详细讲解有关如何通过ISCSI共享存储部署KVM高可用群集,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

iSCSI,即Internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射为以太网数据包。从根本上说,它是一种基于IP Storage理论的新型存储技术,该技术将存储行业广泛应用的SCSI接口技术与IP网络技术相结合,可以在IP网络上构建SAN。

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

基于ISCSI共享存储的KVM高可用群集配置基于ISCSI共享存储的KVM高可用群集配置
kvm宿主节点软件安装

#虚拟化软件安装yumgroupsinstall-y"VirtualizationPlatform"yumgroupsinstall-y"VirtualizationHypervisor"yumgroupsinstall-y"VirtualizationTools"yumgroupsinstall-y"VirtualizationClient"#群集及配套软件安装yuminstallbash-completionntpdatetigervnc-serveriscsi-initiator-utils-yyuminstallpacemakercorosyncpcspsmiscpolicycoreutils-pythonfence-agents-all-yyuminstalldlmlvm2-clustergfs2-utils-y#升级标准的kvm组件为ev版本(可选)yuminstallcentos-release-qemu-ev-yyuminstallqemu-kvm-ev-y#经测试,安装它后,创建虚拟机时会卡住#或则运行下面这条命令,一步到位yumgroupsinstall-y"VirtualizationPlatform"&&yumgroupsinstall-y"VirtualizationHypervisor"&&yumgroupsinstall-y"VirtualizationTools"yumgroupsinstall-y"VirtualizationClient"&&yuminstallcentos-release-qemu-evtigervnc-serveriscsi-initiator-utilsvimpacemakercorosyncpcspsmiscpolicycoreutils-pythonfence-agents-alldlmlvm2-clustergfs2-utilsbash-completion-y&&yumupdate-y&&reboot准备阶段:(kvm各个节点都需进行)

1:hosts文件(vi/etc/hosts)192.168.1.31kvm-pt1192.168.1.32kvm-pt2172.168.1.33san10.0.0.31node110.0.0.32node22:sshkey互信ssh-keygen-trsa-P''ssh-copy-id-i~/.ssh/id_rsa.pubroot@node1#到自己免密码ssh-copy-id-i~/.ssh/id_rsa.pubroot@node2#到node2免密码(双向)3:时区cp-f/usr/share/zoneinfo/Asia/Shanghai/etc/localtime4:定时时间同步yuminstallntpdate-ycrontab-e*/30****/usr/sbin/ntpdatetime.windows.com&>/dev/null5:防火墙firewall-cmd--permanent--add-service=high-availabilityfirewall-cmd--zone=trusted--add-source=10.0.0.0/24--permanentfirewall-cmd--zone=trusted--add-source=192.168.1.0/24--permanentfirewall-cmd--zone=trusted--add-source=172.168.1.0/24--permanentfirewall-cmd--reload6:所有kvm宿主节点创建相关目录mkdir/kvm-hosts第一:配置pcs守护程序

systemctlstartpcsdsystemctlenablepcsdsystemctlstatuspcsd.service#查看状态echo"7845"|passwd--stdinhaclusterpcsclusterauthnode1node2-uhacluster-p7845pcsclustersetup--namekvm-ha-clusternode1node2#创建名为kvm-ha-cluster的群集,后面gfs2需要再次用到pcsclusterstart--allpcsclusterenable--all#开机自动启动所有群集节点(在生产环境中不要将群集设为开机自启动)第二:配置存储节点san,并挂载iscsi设备

由linux-io做的(共享了两块磁盘sdb,sdc)(配置过程见博客)https://boke.wsfnk.com/archives/345.html

sdb(42g):独立磁盘,用于创建了基于群集的lvm用于虚拟机存放,sdc(1M):内存分配而来,用作STONITH#这里用disk作为STONITH设备,当然可以用其他的比如,ilo3,ipmi等等#将各个kvm的iscsi名字修改为通俗有意义的(每个kvm宿主节点都需进行)[root@kvm-pt1~]#cat/etc/iscsi/initiatorname.iscsiInitiatorName=iqn.1994-05.com.redhat:node1#发现挂载iscsiadm--modediscovery--typesendtargets--portal1172.168.1.33iscsiadm-mnode-Lall第三:配置STONITH隔离设备, DLM分布式锁 和 gfs2文件系统

#配置SONITH隔离设备(磁盘)任意节点(sdb用做存储,sdc用做stonith隔离设备)[root@kvm-pt1~]#ll/dev/disk/by-id/|grepsdlrwxrwxrwx.1rootroot1011月2815:24lvm-pv-uuid-wOhqpz-ze94-64Rc-U2ME-STdU-4NUz-AOJ5B3->../../sda2lrwxrwxrwx.1rootroot911月2815:25scsi-360014053b477d3fba5a4039a52358f0f->../../sdblrwxrwxrwx.1rootroot911月2815:25scsi-36001405419b8568d022462c9c17adca4->../../sdclrwxrwxrwx.1rootroot911月2815:25wwn-0x60014053b477d3fba5a4039a52358f0f->../../sdblrwxrwxrwx.1rootroot911月2815:25wwn-0x6001405419b8568d022462c9c17adca4->../../sdc#注意:这里使用wwn号,不使用scsi开头的那个号pcsstonithcreatescsi-shooterfence_scsipcmk_host_list="node1node2"devices="/dev/disk/by-id/wwn-0x6001405419b8568d022462c9c17adca4"metaprovides=unfencing#配置分布式锁DLM(任意节点)方法一:pcsclustercibdlm_cfgpcs-fdlm_cfgresourcecreatedlmocf:pacemaker:controldopmonitorinterval=60spcs-fdlm_cfgresourceclonedlmclone-max=2clone-node-max=1pcsclustercib-pushdlm_cfg方法二:(一步到位)pcsresourcecreatedlmocf:pacemaker:controldopmonitorinterval=30son-fail=fencecloneinterleave=trueordered=true#配置clvm(所有kvm节点)lvmconf--enable-clusterreboot第四:向群集中添加clvm资源

#添加克隆的资源,即在每个node节点上运行clvmdpcsresourcecreateclvmdocf:heartbeat:clvmopmonitorinterval=30son-fail=fencecloneinterleave=trueordered=truepcsstatus#配置约束(clvmd必须在dlm启动后启动,而且必须在同一节点上)pcsconstraintorderstartdlm-clonethenclvmd-clonepcsconstraintcolocationaddclvmd-clonewithdlm-clone#查看clvmd是否启动(是否有clvmd线程),ok的systemctlstatuspacemaker#查看约束pcsconstraint第五:在群集中创建lvm,并挂载gfs2文件系统

#将发现并登录的iscsi设备中sdb,分一个区,并指定为8e类型fdisk/dev/sdbpartprobe;multipath-r#多路径软件reload一下(此处没有设置多路径)pvcreate/dev/sdb1vgcreatevmvg0/dev/sdb1vgslvcreate-nlvvm0-l100%FREEvmvg0#这里无法执行100%,这里设置为lvcreate-nlvvm0-L38Gvmvg0#创建GFS2文件系统mkfs.gfs2-plock_dlm-j2-tkvm-ha-cluster:kvm/dev/vmvg0/lvvm0#-t前面是群集名称后面是自定义#向群集中添加GFS2文件系统##添加克隆资源,即在每个节点上均挂载文件系统pcsresourcecreateVMFSFilesystemdevice="/dev/vmvg0/lvvm0"directory="/kvm-hosts"fstype="gfs2"clone#查看所有节点是否已经将lvvm0挂载到/kvm-hosts目录下了结果:ok状态#并同时测试读写是否可以,并查看各节点数据是否同步结果:ok第六:配置约束及selinux

pcsconstraintorderclvmd-clonethenVMFS-clonepcsconstraintcolocationaddVMFS-clonewithclvmd-clone#再次查看一下约束pcsconstraint#配置SELINUX(不然虚拟机无法访问存储文件)(所有节点都要做)semanagefcontext-a-tvirt_image_t"/kvm-hosts(/.*)?"#如果没有semanage,可以如下安装yuminstallpolicycoreutils-pythonrestorecon-R-v/kvm-hosts第七:创建虚拟机

#单点创建虚拟机qemu-imgcreate-fqcow2/kvm-hosts/web01.qcow210Gvirt-install--nameweb01--virt-typekvm--ram1024--cdrom=/kvm-hosts/CentOS-7-x86_64-DVD-1611.iso--diskpath=/kvm-hosts/web01.qcow2--networknetwork=default--graphicsvnc,listen=0.0.0.0--noautoconsole--os-type=linux--os-variant=rhel7#配置第三方管理机能用virtual-manage连接并显示kvm-pt上的虚拟机(所有node节点都要)firewall-cmd--permanent--add-service=vnc-serverfirewall-cmd--reload#配置防火墙(所有kvm节点)firewall-cmd--permanent--add-port=16509/tcp#这是virsh-cqemu+tcp://node2/system模式,这里不会用到,但还是放行firewall-cmd--permanent--add-port=49152-49215/tcp#迁移端口firewall-cmd--reload#创建前:要进行迁移测试(virt-manage和命令行)结果:都ok,都能平滑迁移virshmigrateweb01qemu+ssh://root@node2/system--live--unsafe--persistent--undefinesource#导出xml文件virshdumpxmlweb01>/kvm-hosts/web01.xmlvirshundefineweb01#创建虚拟机(虚拟机的磁盘文件和xml配置文件都要放在共享存储上)(虚拟机由群集软件来控制,不由本地的libvirt来控制)pcsresourcecreateweb01_resVirtualDomain\hypervisor="qemu:///system"\config="/kvm-hosts/web01.xml"\migration_transport="ssh"\metaallow-migrate="true"\#下面这是错误的,不要使用,我曾经不细心,导致折腾好久都无法平滑迁移(ssh模式不能写在最后面)pcsresourcecreateweb01_resVirtualDomain\hypervisor="qemu:///system"\config="/kvm-hosts/web01.xml"\metaallow-migrate="true"priority="100"\migration_transport=ssh#配置约束(每配置一个虚拟机,就需要配置下面类似的约束)pcsconstraintorderstartVMFS-clonethenweb01_res#先启动文件系统,在启动虚拟机资源pcsconstraintcolocationaddweb01_reswithVMFS-clone#资源和文件系统要在同一位置pcsconstraint#查看约束,可以加--full#配置完成后,虚拟机可以正常启动第八:迁移测试

#pcsclusterstandbynode2#平滑迁移ok#pcsresourcemoveweb01_resnode2#平滑迁移ok#pcsclusterstop#平滑迁移ok#init6#平滑迁移no第九:迁移方案

若是节点维护,建议先用move命令迁移虚拟机到其他可用node上,在stop维护节点

关于“如何通过ISCSI共享存储部署KVM高可用群集”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。