个人虚拟化集群搭建教程

一、写在前面

  • 本教程最重要还是在建设理念与思路,部分步骤中,因网上可轻松查到的资料,故会省略不详谈。
  • 实际搭建过程中,几乎每个步骤均有多重选择,笔者会适当的描述这些选择项。
  • 本文着重讲解利用家用组装机+pfsense软路由的方式搭建集群。

二、为什么要搭建个人虚拟化集群?

做为一个开发,你是不是有以下几个痛点:

  • MQ,mysql,redis等开发用软件越装越多,已经感觉到计算机明显变卡
  • 开发环境软件本身以及其下载的文件诸如maven缓存等,占用大量磁盘空间,硬盘严重告急
  • 开发软件所需配置也越来越多,已经记不清自己曾经配置过什么,甚至出现配置互相覆盖影响的问题
  • 为了做技术架构探索选型,不得不在本地先安装许多软件,设置很多配置,完结后还得删掉以免影响系统运行速度,浪费诸多时间。
  • 安装了vmware workstation,就为了能跑几个linux系统做实验,导致计算机内存告急,运行缓慢。
  • 出差时,带性能好的笔记本太重,带轻薄的本子又太卡。更麻烦的是,你得在你每台计算机上重复配置一次,有时候还会遗漏配置项导致出错。

笔者也曾遇到过此类问题,并困扰了笔者很久。为了解决这个问题,我们可以提升单机的性能,但提升单机性能只能解决部分问题,并不能根本性的解决问题,诸如解决不了环境变量污染的问题。亦或者,我们也可以在云平台购买按量计费的云主机或者saas服务,此方法好处是能快速的得到你想要的机器,而且可供给的数量几乎是不限的,但缺点也很明显,如果你需要长期运行或者所需数量较多,该方法成本会变得相当高昂。

笔者最终解决该问题的方案是,搭建自己的虚拟化集群。

整体的网络拓扑结构很简单,如下图:
个人虚拟化集群搭建教程_第1张图片

三、优势与劣势

  1. 优势:
  • 虚拟化集群可以7x24小时不间断的提供你所需的环境。
  • 多重选择,非常自由的配置,从网络到主机,从硬件到软件,基本上你可自主决定。
  • 性价比较高,首次成本几千即可,后续成本基本是电费,根据你设备多少决定,低至大概30+元/月。
  1. 劣势:
  • 需要暴露在公网环境下,必然会遭受各种网络攻击。
  • 可靠性问题,因为只是个人搭建,在控制成本的前提下,可靠性稍弱,但因为个人使用,影响面不大。
  • 需要你懂得一些的基础运维和网络的知识,诸如设备选型,设备安装,防火墙配置,网络环境架设,虚拟化软件的使用等一系列技能。
  • 如果不想托管在专业机房或者单独隔离的房间,谨慎考虑购买企业级服务器,噪音跟飞机起飞一样,芜湖。。。没听过的朋友建议上B站感受一下。
  1. 与生产服务器集群的区别
  • 本方案,基本没有考虑高可用,所以可靠性相比真正的生产集群会偏低。
  • 投入费用较低,1台全新的Dell服务器的价格,少说也要几万元。而家用PC一台价格在6-7千之间的,性能就相当不错了。
  • 家用组装机没有带外管理功能,发生故障时,可能需要到现场处理。
  • 真正的服务器噪音比较大,而家用组装机噪音比较小。
  • 生产服务器是需要放置到无尘且带有空调的机房的。

总之,可以这么理解,这个方案其实就是拿普通的机器当服务器使用。价格虽然低了,但维护成本高了,可靠性低了,只是因为个人使用,即使出现问题,影响的也只是自己而已,所以可靠性低一些可接受,个人搭建规模不会太大,维护成本总体可控。

四、关键性步骤

  1. 准备公网IP与域名
  2. 购买服务器、路由器、交换机等设备
  3. 安装并配置路由器、交换机等设备
  4. 安装ESXi与vCenter
  5. 在开始愉快的玩耍之前的准备工作

五、准备公网IP与域名

5.1 局域网还是广域网?

首先需要明确的是,你要搭建的虚拟化集群,是只想在局域网内使用,还是可以在广域网上连接?

先说说只是在局域网内使用,建设难度会低一些,但同时,你也丧失了诸多特性。

如你把整个集群建设在公司局域网网内,离开了公司,你就连不上集群了,或者需要依赖于第三方的设备或者软件才能连的上。当然,很多公司特别是需要做二次验证的公司,未必会同意你自行接入私人的设备。亦或者,你把集群建设在家里,情况也类似,你在公司就连不上了。

总之,笔者不推荐只搭建在局域网内,本文也只针对于可在广域网上连接的方案进行介绍。

5.2 注册域名

注册域名非常的简单,网上的教程也很多,可以在阿里云上注册一个域名并做好备案工作,本文不再赘述。

5.3 准备公网IP地址

你需要能在广域网上连接到集群,那么你必定会需要一个公网的IP地址。

5.3.1 如何判断你是否拥有公网IP地址呢?

  • 通常在专业的机房,或者你能拉企业专线,那么你大概率会有固定的公网IP地址。
  • 如果你是在家中搭建集群,利用的是家庭宽带,那么你大概率只能有动态的公网IP地址(可能需向宽带运营商申请)。

5.3.2 如何申请公网IP?

  • 如果你搭建在专业的机房,那么请联系机房管理员为你提供固定公网IP。
  • 如果你是家庭宽带,那么你需要致电你的宽带运营商,申请获得一个公网IP,这通常需要几天时间,会有专人联系你,后续可能会有专业人员到你家中帮你配置光猫。笔者建议是,鉴于运营商提供的路由器相当一般,功能很少,而且安全性也不是很好,容易受到攻击。笔者建议自购路由器,运营商专业人员到家中时,你跟专业人员说会用自己的路由器拨号上网,专业服务人员会帮你把光猫配置好,你用自己的路由器拨号可上网即可。

如果能有固定的公网IP,是最好的选择。因为你向运营商申请的公网IP,它是动态的,更换的频率各地可能不一致,也许是一周,或者是一个月。这也意味着你需要定期更新域名所绑定的IP地址。因为偶尔会出现更新不及时的情况,特别跨省连接的时候,可能会有一小段时间(可能是几秒钟到几分钟),会出现连接不上的情况。笔者测试过,最多发现会有15分钟的中断时间。

5.3.3 如何更新域名绑定IP地址?

如果你已经有固定公网IP地址,你只需要在域名解析处一次性配置好你的IP地址即可,你可以跳过本小节。

举个例子,比如你的域名是托管在阿里云上的,你可以使用树莓派或者ESXi上的一台linux虚拟机,定时执行一个脚本,获取公网IP地址,而后利用阿里云SDK更新域名绑定的IP地址。

具体步骤如下:

  1. 所需软件安装与环境配置
    大致步骤如下:
    安装 python3,virtualenv,创建隔离的python运行环境
yum install -y python3
pip3 install virtualenv
mkdir ~/ddns
cd ~/ddns
~/.local/bin/virtualenv venv 
source venv/bin/activate
pip3 install requests
pip3 install aliyun-python-sdk-alidns==2.6.29

  1. 编写Python脚本

请参考 https://help.aliyun.com/document_detail/29777.html

主要思路是获取域名当前的解析记录,和实时获取到的公网IP地址做对比,如果不一致,则更新域名的解析记录。

脚本如下,"xxx"处是需要你自行修改的部分:

#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordInfoRequest import DescribeDomainRecordInfoRequest

import requests
import re
import time
from time import strftime,gmtime

import json

client = AcsClient('xxx', 'xxx', 'xxx')
record_id = "xxx"

request1 = DescribeDomainRecordInfoRequest()
request1.set_accept_format('json')
request1.set_RecordId(record_id)
response1 = client.do_action_with_exception(request1)
data_json = str(response1, encoding='utf-8')
#print(data_json)
ali_record_value = json.loads(data_json)['Value']
print (strftime("%Y-%m-%d %H:%M:%S", gmtime()), "ali record value : ", ali_record_value)

html_text = requests.get("http://pv.sohu.com/cityjson?ie=utf-8").text
ip_text = re.search(u"var returnCitySN = {\"cip\": \"(.*?)\", \"cid.*\"};", html_text) 
new_public_ip = ip_text.group(1)

if new_public_ip != ali_record_value :
    request2 = UpdateDomainRecordRequest()
    request2.set_accept_format('json')
    request2.set_RecordId(record_id)
    request2.set_RR("xxx")
    request2.set_Type("A")
    request2.set_Value(new_public_ip)
    response2 = client.do_action_with_exception(request2)
    print(strftime("%Y-%m-%d %H:%M:%S", gmtime()), str(response2, encoding='utf-8'))
    print(strftime("%Y-%m-%d %H:%M:%S", gmtime()), "update complete, ali_record_value is ", new_public_ip)
  1. 编写sh脚本
cd ~/ddns
source ./venv/bin/activate
python3 alidns.py >> log.txt
  1. 添加定时任务
    定时任务配置为每5分钟运行一次
crontab -e
*/5 * * * * sh ~/ddns/alidns.sh

六、购买设备

6.1 概要

搭建之初,你会需要购买一些的设备,大致有以下三大类:

  • 网络设备,如路由器,交换机,网线
  • 服务器机柜
  • 计算机设备,如服务器,树莓派,NAS

6.2 网络设备

6.2.1 路由器

这里所说的路由器可不是家用的带wifi功能的路由器,而是企业级的路由器或者工控机。某宝或者某东上面都有售卖TPLINK,华为,H3C等企业级路由器。笔者的建议是,可以购买一台工控机,自行安装pfsense软路由系统,它既有路由的功能,也有防火墙的功能,安全上能有一定的保障。
个人虚拟化集群搭建教程_第2张图片
要点:

  • 不要购买普通的家用路由器,功能较少且难以保障稳定性与安全性。应该买带有线千兆网口的企业级路由器,如果买带耳朵能固定在机架上面的那就更好了
  • 可以考虑买工控机,诸如倍控。自己安装软路由系统,诸如pfsense,iKuai,RouteOS等等。
  • 性能上,根据自己需要的带机量而定,一般价格在大几百元到1千多的区间的即可。

6.2.2 交换机

要点:

  • 考虑到未来的拓展性,建议你买16口或者24口全千兆的二层交换机。
  • 如果交换机可以上机架,那就更完美了。因为不论是16还是24口的交换机,必定会有很多条网线,不上机架的话,网线容易乱糟糟一团,不利于打理。
  • 除非你的确有需要,否则不一定要买网管型的交换机。

6.3 服务器机柜

如果你打算托管在机房,请跳过本小节。

不管搭建在家里,或是在公司,总会需要有个地方放置所有的设备,这时会需要一个机柜。某宝或者某东上面有很多机柜选择,而且基本都可送货到楼下。如果你不买机柜,网络、电源线必然会杂乱无章,很不好打理,各类设备所占的面积也大,所以还是购买一个机柜为佳。

6.4 计算机设备

6.4.1 服务器的选择与购买

服务器的选择非常的多样,你可以购买家用组装机当服务器使用,也可以购买真正的服务器。从大类来说,可以有以下三种方案可选择

  • 选择家用组装机
    好处:价格低廉,简单粗暴,噪音小,适合家庭环境
    坏处:长时间运行可能会有可靠性的问题,没有故障指示灯等相关的设备,难以巡检,而且因为没有带外管理,出现故障无法远程处理。体积较大,浪费机柜空间

  • 选择塔式服务器
    好处:一定的拓展性,各方面都比较中庸
    坏处:性价比比机架式服务器低,体积较大,浪费机柜空间。噪音虽然没用机架式那么大,但也不小。

  • 选择机架式服务器
    好处:高性能,拓展性好,体积小,可以托管在IDC机房
    坏处:噪音大,不适合家庭环境

注意点:
在你选择了一种方案后,后续最好延续使用该方案。特别的,如果你选择了家用组装机,CPU一开始买的是AMD,那么后续最好也都统一买AMD的CPU,否则会导致DRS、vSan都做不了。

关于真正的服务器,你可以买全新的,或者某宝上面也有很多二手的服务器。不过二手服务器虽然价格低,但可能会有坑,就看你敢不敢买了。

这里主要介绍下利用家用的组装机做虚拟化。网络上有很多教你购买和组装的教程,这里只说一些重点注意事项。

  • 如何选择CPU?
    家用组装机的cpu,一般无非就是 Intel 和 AMD 两种,从性价比角度来看,目前的zen2、zen3架构如日中天,AMD性价比无疑比Intel更高。

  • 如何选择主板?
    主板尽量不要购买小板,可以选择ATX,或者E-ATX的板型,因为板型小的主板,也意味着所提供的接口少,不利于将来扩展。另外,有个特别需要注意的点是,主板上的网卡芯片,一般有"Intel"和"Realtek瑞昱"两种,如果你买的是AMD的CPU,那么对应的一般价格的主板,大概率是Realtek芯片的板载网卡,而Realtek芯片的网卡,ESXi是识别不到的,这样一来你会需要额外购买Intel芯片的网卡。

  • 如何选择内存?
    根据你买的CPU和主板类型不同,购买合适的内存即可。

  • 如何选择硬盘?
    推荐购买 nvme协议 m.2接口 的ssd硬盘,因为速度真的很快。一般来说,计算机的瓶颈点会卡在IO上面。如果磁盘空间不够,可配合购买HDD硬盘,不需要联机的数据可以放NAS。

  • 如何选择网卡?
    笔者的建议是无论你板载的网卡的芯片是Intel还是Realtek,你最好都额外购买一张pcie的有两个网口以上的Intel芯片的网卡。为什么要这么做呢?首先,利于远程配置(笔者有一次配置虚机网络的时,需要网卡先断线再连接到正确的虚拟网络,但在断开那张网卡后,远程就再也连不上了),其次两个网卡利于增强可靠性,最后两个网卡才能让管理的流量和普通流量分开,彼此不会互相影响(迁移主机的时候,会有大量的管理流量产生,而如果你只有一张网卡,可能会影响到业务的正常通讯)。

  • 如何选择显卡?
    如果你的cpu是不带核显的,那么会需要你额外购买一张显卡,建议买一张最低配的显卡即可,我们只是需要能显示而已。当然如果你有用GPU进行计算的需求,那么可根据实际需求选择显卡。

  • 如何选择散热器?
    一般来说,风冷就足够使用了。如果cpu自带的风扇太弱,像Intel盒装cpu自带的小风扇就比较鸡肋,你可以自行购买风扇,价位在百元左右即可。至于是否上水冷,就看各位自己评估了,笔者的实践经验是如果搭载的不是发热量很大的CPU,又没有大量的计算需求,就不需要上水冷了。另外,请注意购买的风扇的接口是否兼容你买的cpu型号。

  • 如何选择机箱?
    尽量买可以装三个HDD硬盘以上的机箱。尽量不要买小型的机箱,否则后续拓展麻烦且小机箱散热效果也不好。另外,如果你有服务器机柜的话,可以考虑买机架式的机箱,3U或者4U的,肯定比买普通机箱省空间,某宝上面很多。

  • 如何选择电源?
    选择合适的电源即可,但要注意留一定冗余量,便于后续添加组件。选择电源未必非要追求金牌不可,功率合适,能稳定输出就好。

配置示例:

AMD 锐龙7 3700X 处理器 7nm 8核16线程 3.6GHz 65W AM4接口 盒装CPU
微星 MAG B550M BAZOOKA火箭炮电脑主板
金士顿 FURY 32GB DDR4 2666 台式机内存条
航嘉 WD500K 金牌500W电脑电源
三星 1TB SSD固态硬盘 M.2接口(NVMe协议) 970 EVO
微星 GT710 显卡
酷冷至尊 暴雪T400 CPU散热器 支持I10 1200、AM4 /4热管/PWM温控
先马 鲁班1 黑色 游戏电脑主机箱

该配置在21年6月价格总共在6k至7k左右。

6.4.2 树莓派

树莓派是一种基于linux的单片机电脑,功耗较小,适合做一些简单的任务,价格在5百元左右。如果你的IP是动态公网IP,那么你可以考虑买一台树莓派,用于执行更新域名绑定IP的任务。当然你也可以不买树莓派,在虚拟机上创建一台linux主机来运行该任务,但有个问题是,假如承载该linux虚机的计算机发生宕机等的故障,很可能会导致更新任务无法执行,进而导致你连接失败。所以,从可靠性可用性的角度上看,把此任务单独放到树莓派上是有利于增强可靠性和可用性的。

6.4.3 NAS

如果你有大量文件需要存储,那么买一台NAS无疑会更加保险。如果买的是支持万兆网卡的nas,后续可以升级做存算分离。

6.5 关于搭建的成本

搭建的成本主要是第一次的购买设备的成本和平时的维护成本。
第一次的购买设备的成本 = 路由器 + 交换机 + 服务器机柜 + 服务器x台数 + 树莓派 + NAS(含硬盘)
集群搭建后,平时的成本主要是电费和维护费。举个例子,如果你按本文的家用配置搭建服务器,在不做大量密集计算的时候,功率大概在90w左右。机器24小时开机,一度电按照5毛来算,一天的一台服务器的电费成本大概是1块出头。维护费指的是,诸如硬件损坏,比如常见的硬盘长时间运行后损坏需更换的成本。

七、网络环境配置

如果你买的是工控机想安装pfsense软路由系统,下载pfsense安装包时,记得Architecture选"AMD64 (64-bit)“,Installer选"USB Memstick Installer”,Console选"VGA"。使用pfsense的时候,我遇到过一个情况,当开机启动时VGA接口没有接入显示器,路由器工作不正常,这时候你只需要在启动路由器的时候接入显示器,等启动完成后再拔掉即可,或者你直接在某宝上面买个支持集显的VGA的伪装器。

除了pfsense之外,你也可以选择安装iKuai,RouterOS,OpenWrt等。

主要的步骤是

  1. 配置wan口,家庭线路主要是配置拨号上网账号密码,企业专线可能是配置一个固定的ip即可
  2. 配置端口转发策略
  3. 配置防火墙策略

八、安装ESXi与vCenter

关于什么是 ESXi 与 vCenter ?
https://docs.vmware.com/cn/VMware-vSphere/index.html

你需要在新装的电脑上安装 ESXi,安装后,将机器连接到交换机上。注意,你需要另一台pc机或者mac同时接到交换机上,这样你才能访问ESXi的web页面。
具体怎么安装ESXi,网上已经有很多教程,我不再赘述。

  • 是否一定要安装vCenter?
    答案是不一定要安装的,如果你有2台以上,或者单台机器但内存充足,但笔者建议安装。如果你只是简单使用,不需要经常创建虚机,那么不装vCenter也无妨。
    vCenter能提供的是更多的配置项,最重要的是能把虚机转成模板,这样你每次新建机器就不用重新做各种配置,而是从模板直接生成虚机,大大减少交付一台虚机的时间。

  • 是否需要组DRS或者vSan?
    都不一定。组vSan的前提是3台以上的机器,且每台机器上都至少有1个SSD和3个HDD硬盘。到目前为止,我们所有的机器都是没有组raid的,硬盘损坏的时候会有丢失数据的风险,如果你对可靠性可用性和数据的安全性有一定的要求,那么你可以考虑组vSan集群,或者你可以利用nas+万兆网络做存算分离。

九、在开始愉快的玩耍之前

前面的步骤做完后,我们已经基本上做完了整个环境的搭建,不过别着急,以下几点值得你注意一下

  1. 关于磁盘制备的选择
    在新建虚拟机的自定义硬件步骤,会有磁盘制备方式的选择,建议选择"精简制备",默认的厚置备,会导致预先把划走你设置大小的磁盘空间。
    个人虚拟化集群搭建教程_第3张图片
  2. 制作主机模板

你可以新创建虚拟机,安装linux系统,对系统进行安全加固等其他的初始化操作后,关机,并将主机转成模板。这样以后你新建虚拟机,就可以从模板部署了。

  1. 关于管理网络与普通网络
    如果你有两个甚至三个以上的网口,做好kernel端口与普通network端口的隔离与高可用的配置

  2. 设计IP地址的规划方案
    正常我们家用的时候,tplink路由器默认的网段规划是192.168.1.0/24,不过这时候我们会面临一个问题,当你虚机越来越多的时候,IP地址可能会不够用。所以,你应该提前规划好IP地址,掩码不再使用24,你可以使用10.0.0.0/20,这样一个网段内第一个可用IP是10.0.0.1,最后一个可用IP是10.0.15.254,一共有4094个可用IP了。你可以访问 https://www.w3cschool.cn/tools/index?name=ipcalc 来辅助计算规划IP地址。

  3. 谨慎使用端口转发
    你在内部搭建的各类系统,不要随意通过端口转发对外暴露,尤其是不要对0.0.0.0开放,系统难免有漏洞,容易被攻击,特别是在我们并没有专业安全防护解决方案的情况下。如果一定要对外暴露,可以考虑限制在一定的IP范围内。

十、写在最后

到目前为止,你已经完成搭建工作了,接下来怎么用就看你的想象力了。以一个开发的视角来看,你可以搭建各类服务来辅助你的开发,比如搭建gitlab存储你的代码,搭建jenkins做CI/CD,部署mysql数据库,搭建nexus服务器加速jar包下载,搭建prometheus监控虚机状态。

HAVE FUN BE HAPPY!!!

你可能感兴趣的:(云计算,服务器,个人开发)