去年年底陆续薅到两台不同服务器厂商的羊毛,以比较优惠的价格拿得到两台 2C4G3M 的云服务器,一直想做一个服务器集群,学习实践微服务、分布式和大数据,但实际上两台服务器不够,再增加两个节点的云服务器租用的费用也比较昂贵,薅羊毛得到的服务器(跨机房、跨地区)带宽达不到做集群的要求(至少300M,测试用),评估了一下成本就作罢。

所以选择在本地构建集群,路由器充当网关(暂时),于是淘了一台廉价的机器,拓展了内存,拆了我报废的PC笔记本硬盘,用KVM虚拟化一个服务器集群,做成我自己的家庭服务器,配合我两台公网云服务器,用frp做个动态内网穿透,最终的效果也许还能支持一个不大不小的网站。

之前用过VMWare Station,用过VirtualBox,这次重新研究了一番,发现服务器厂商的虚拟化方案已经逐渐都统一用KVM,比起Xen,VMWare,Virtualbox之类的性能损失更小,所以这次我就选择用KVM。

KVM(用于基于内核的虚拟机)是针对Linux的完整虚拟化解决方案,用于x86硬件上的虚拟化扩展(英特尔VT或AMD-V)。它由提供核心虚拟化基础架构的可加载内核模块kvm.ko和处理器特定模块kvm-intel.ko或kvm-amd.ko组成。

KVM 是基于Linux 内核的,而且是内核自带的完全虚拟化方案,在x86平台上有硬件的优化(Intel VT 或者 AMD-V)。

很多x86的CPU都支持KVM,不挑硬件。

搭建 KVM 环境主要包括几个部分:

  • kvm module: 内核级别的虚拟化能力支持
  • qemu:模拟硬件功能,用于提供虚拟化服务,提供命令行接口
  • libvirt:提供 libvirtd 服务,用于管理物理机中的虚拟机实例,并提供外部统一编程接口
  • 页面管理器:webvirtmgr 等,提供页面,操作本地libvirt,对虚拟机进行新建/删除/设置/运行
  • vnc服务:页面上控制虚拟机的键盘鼠标,还有显示设备,用来装系统用

这些不同的开源组件有不同的项目,要整合在一起方便易用,还是得写不少运维脚本,特别是上了规模之后的运维管理。

所以一般就会有两个选择,大型的企业集群使用OpenStack,小团队使用Web端的管理平台。

我做一个家庭服务器,要啥OpenStack呢,肯定是找个方便,免费好用的解决方案呀。

我看了不少资料,有一个虚拟化管理平台被很多人推荐 —— Proxmox VE

使用这个真的挺简单的,按照文档来,一个下午能搞定。

第一步 下载 Proxmox VE 6.2 ISO Installer

这是一个包含了pve各种组件的 debian 10 镜像,按普通Linux系统的方式安装,PVE帮助你自动配置很多东西。

『网络』不好的朋友,可以去清华的开源镜像站下载这个ISO文件,地址

第二步 制作一个启动盘

ISO文件下载完成后,用它来制作一个U盘启动盘,Windows下如何操作我不太熟悉了,很久没有在Windows环境折腾这些东西了。

我就说明一下在Linux或者Mac上如何操作:

主要还是一个命令 dd

# for linux  
lsblk
dd bs=1M conv=fdatasync if=./proxmox-ve_*.iso of=/dev/XYZdd

# for mac 
diskutil list
diskutil unmountDisk /dev/diskX
sudo dd if=proxmox-ve_*.dmg of=/dev/rdiskX bs=1m

第三步 在需要被虚拟化的主机上装系统

F12(看自己的主板BIOS启动键),通过 U盘的 UEFI boot进去,一步一步跟着点就行了。

第四步 初始化配置

proxmox ve 开始出现图形的配置界面,按照自己需求配置。

磁盘的分区,也是老话题了,有很多文档, 唯一有争议的是swap分区到底需不需要,在我这里是:需要。

因为我是NVMe协议的的固态,读写性能还行,用来做一个内存的缓冲比普通磁盘还是快不少。

进到debian系统后,需要修改几个地方。

  • 换国内的apt源
    参考中科大、清华等国内的镜像服务配置

中科大镜像源帮助手册
这份 Read the Docs 的非常详细,用到的时候可以参考。

特别注意:PVE虽然是开源软件免费,但提供其他服务是付费的,模式和红帽相似,它提供了付费的软件订阅源,我们可以选用社区支持的免费源。

当然,『网』不好的还是要换对应的国内镜像源,还是清华的源。

  • 配置网络连接,主机名,ssh登录

下面这些都是局域网的地址,只有通过我的路由器才能连上,没有在公网开放,也不用考虑安全问题。

# 在 ~/.ssh/config 文件里面作些简化登录的配置
Host pve
    HostName 192.168.31.30
    User root
    Port 22

Host master0
    HostName 192.168.31.10
    User root
    Port 22

Host node1
    HostName 192.168.31.11
    User root
    Port 22

hostnamectl set-hostname master0.infiniteme.cn

第五步 上传一个iso镜像

镜像用CentOS7,别用8,仓库源和包都不全,统一基础设施,降低运维成本。

第六步,创建虚拟机,配置虚拟机的硬件资源

内存资源要合理配置,CPU资源无所谓是动态在调配,我只做服务器不需要显卡,所以也不配置这些,其他的走默认就好了,pve 帮我们做了不少简化的工作。

第七步 安装配置虚拟机,复制N个

进到虚拟机里面,把ssh免密配置一下,然后切出来在笔记本上登录,调整CentOS系统的各项参数,配置软件源安装需要的包。
然后把这个配置好的镜像复制几个,分别做单独的配置,具体要配置什么,这个内容也比较多,在国内网络环境下配置一台可用的centos系统也不简单。

第八步 配置局域网,Bridge模式

所有的机器都需要和宿主机共享一个虚拟网卡,并且能独立注册到路由器上。

第九步 为每个联网的虚拟机配置固定IP

同一个局域网内的所有机器的hosts,为每个机器都设置别名,注意使用FQDN(全限定名)。

轻度运维,不需要ansible,写shell脚本,用pdsh就可以远程批量执行命令。

划分完成后,我有5台虚拟机,每台机2C4G,分配了FQDN。

PVE支持开机自启动,支持24h不间断运行,定时快照备份,还有其他的一些特性,我暂时用不到,目前的情况我觉得比较完美。

带宽与路由器共享,我是通过网线直连LAN口,我路由器支持1000M,实际上我不确定我的网线究竟多大带宽,不过,无论如何都是够的,也许之后做压测和负载时会发现不够吧。

后记

KVM虚拟化的集群已经搭建完成了,虚拟化的领域还有很多东西要学,目前的虚拟机的配置也许不是性能最佳,但是没关系,随着使用慢慢增加认识和理解。


infiniteme
1 声望0 粉丝

找回学习的热情。