自建家用服务器集群,打造一个私有云

背景

我的战神

还记得17年的时候,那时深度学习刚火起来,幼稚的我居然打算往这个领域去研究(根本没有意识到这领域需要的数学功底要多深)。俗话说,工欲善其事,必先利其器,于是乎,
一股脑地跑到广州的岗顶那买了台神舟战神 超级本(GTX-1060)。当时,经常都听到东哥在提到GPU,CUDA,GTX1080提到这些关键词。哈,为什当时会选择买一台笔记本,而不是台式呢?

其实,当时页考虑过买台式的,但是,考虑到当时在外面租房子,台式机搬家不方便。于是就想搞一台显卡性能好的笔记本,但是,完全不知道台式机的1060和笔记本的1060完全不是一个概念,
虽然都要同一个型号。至于为什么要买神舟,而不是华硕,或者其它,很简单,—-因为它性价比高(其实不高,买回来不久就感觉上当了,买回来玩FIFA OL会经常卡卡的,小毛病很多,而且
偶尔还会蓝屏。。)

那时候7400左右的价格在岗顶那买回来,真正用它就用了一年的时间吧。后来,在今年5月份,我以3000的价格在闲鱼上低价卖了。
Sample Image Added via Markdown

第一台组装台式机

前面算是有点扯远了,不过也算是记录一下我早期的一些想法吧,正是有了曾经的各种因素,导致了我今天打算搭建私有集群的IDEA。在尝到了神舟笔记本的坑后,我意识到,其实买一台台式机的必要性。
台式机在散热,硬件稳定性上都明显强于笔记本,而且,性价比也挺高的。对了,对于购买台式机的一个很重要的因素是,17年到18年这段时间里,我在云服务上花了不少钱,刚开始在阿里云,
然后在Google Cloud上。陆陆续续大概花了有六七千块钱吧,也将近买一台机器的钱了。
18年年初,我跑去深圳华强北,组装了自己第一台组装机(华硕主板,16G内存,1T硬盘),不加显示器,一共5000多人民币。背回来立马装了ubuntu系统,顿时感到有了自己的服务器,那感觉就像
在外面租房久了,终于买了属于自己的房子,再也不要担心服务器没续费,登陆不上;再也不用担心资源不够用,要去计算云服务的成本和开支了。自己的机子想怎么扩展都行。

其实刚开始,由于技术原因,我并没有把它当做一台服务器在用,只是把它当成一台PC安装了一些自己熟悉的开发环境和软件。在配置了Ngrok后,基本上把它当成一台云服务器了,24小时运行着。
关于ngrok的配置我前面有一篇专门的文章有讲得很详细。

最近发现我的台式机风扇声音有点大(比起Dell T30来说),从长远来看,毕竟是要7*24 running的,考虑到耗电量和稳定性,还是服务器好啊。我打算将再购置
2台服务器。其实,服务器完全可以当PC来用,但PC不能当服务器来用。

第一台真正的服务器

虽然我的台式机现在配置有32G内存,在安装了一些软件(Cloudera Manager, Elasticsearch)后,内存就不太够用了。我是做数据这一块的,平时也要用分布式的框架,像Hadoop生态圈的
所以组件。我非常需要有一个真正的分布式平台去练手,于是就有了我的第一台服务器————戴尔T30
Sample Image Added via Markdown

也是在华强北的赛格广场,3200买的。配置是E3-1225,16G DDR4,2T*2 带阵列。T30 我没理解错的话应该是戴尔服务器的入门版。我对服务器不太理解,刚入门,挺好奇的,只知道一般PC的CPU
是分I7,I5等等,服务器的CPU是E开头的。然后,服务器用的内存和PC用的也不一样,是不能共用的。

购机的时候和那些卖电脑的老板闲聊也学到了好多专业知识。别看他们穿着没有写字楼的白领干净,没有程序员工资高,
但他们对计算机硬件知识还是很有经验的。比如,老板跟我说,你知道磁盘是怎么运行的吗?他说并不是说高转速的磁盘就一定好,如果突然断电的话,
转速高的磁盘容易被划伤。并介绍了下SAS,SATA,SSD之间的一些区别。他说SAS这种算是比较老的格式了。现在基本都用SATA。

那天我看了两种服务器,一种是机架式服务器,另一种是踏实。机架式的风扇声比较大(虽然单路的会比双路的小一些,但比起塔式服务器会大挺多的。)

坑人的阵列卡

作为一个服务器装机菜鸟,我从网上下好的ubuntu服务器放在U盘里,然后改好U盘启动引导,开始安装。前几步没有啥问题,但到了选择安装磁盘路径的时候,找不到任何磁盘,
从而无法点击下一步继续。后来在老板的指导下,我才得知,原来是因为有阵列卡,BIOS没有设置对还是啥的,所以才读不到磁盘。于是,我在老板的远程指导下成功地拆卸掉阵列卡,
并重新接线好两块磁盘。之后,便正常地顺利正常地安装好ubuntu server了。

Sample Image Added via Markdown

第一次在咸鱼买的服务器

在咸鱼闲逛了下,看中了一台T20,看样子跟之前的DELL T30差不多:E3-1225,4G,1T。内存,硬盘这些我都可以自己另外再买零件组装进去。所以,这台配置虽然比之前的低了点,
但看在T20 只卖1200(包邮)我觉得还是挺划算的。不过买来后才发现,原来T20本来就是这价格,甚至1000都能买到。我当时买来还以为自己赚大了,毕竟T30我买的是3200。
收到货打开发现,比我想象中差些,因为这机子里面到处都是灰尘(从中学到了一个经验:以后网购服务器,一定要让卖家拍几个机子内部的照片或视频,确保没有太多灰尘)。

我自己又另外花了几个小时来清理机器,主要是拿棉签一点点地把灰尘差掉。

交换机

哈哈,没钱买千兆网卡,千兆交换机,只能用路由器充当了。

机器的container–机柜

2020年初买了个小机柜,1。2米的。机柜挺好用的,如果你设备多的话(主机,电源排插,路由器),可以都放进去。其实,机柜对我最大的好处就是防尘。我方面里的灰尘太大了,
几个礼拜就可以把主机风扇上的灰尘粘的满满的。

后记

玩硬件组装也是个超级无底洞,各个部件都可以扩展起来,内存,硬盘,CPU,可以水平扩展,也可以横向扩展。以后准备好好赚钱升级设备吧。如果比较缺钱的话可以上淘宝或闲鱼买点二手的配件,
比如内存条,硬盘这些。最好是可以和个人卖家交易,因为个人的话经常可以买到一些物美价廉的二手物品。另外,V2EX网站也有专门二手转让的版块,可以去看看。

20200225 Update

购买内存发现好多坑

服务器用了一段时间了,想升级下内存配置。于是去咸鱼上搜服务器内存,挨家挨户地去问,这内存我的服务器可以用吗?当我说出是DELL 塔式服务器
的时候,很多商家就直接不搭理了,或者直接说不行。感觉很是失落,买个东西还被这么多人拒绝。

也是怪自己在内存这方面完全没什么经验,也不知道自己的服务器到底需要买什么样子的内存。之前我对服务器的知识范围知识在DDR 代数,还设有
它的频率 2133、2400等等。却不知道内存还有很多规格和知识。比如 纯ECC,RECC,非ECC;2Rx8,2Rx4;这些到底是神马意思啊。然后最主要
的是这些不同规则的内存之间能否共存兼容,和我的机器是否兼容。

这两天咸鱼上几乎搜了遍,然后在网上也搜了很多相关资料,然后在牙医的Q群上咨询,学到了好多。比如,2Rx8,2Rx4有的机器是可以混用的
有的不能。内存是玄学,不实际通电啥也不知道,不过不建议混用。

纯ECC的内存比较少,所以比较贵。一些初级服务器才会用,比如说DELL T30 T130 等等都是只能用纯ECC内存。这种内存8G的DDR4都要300块。
在淘宝搜关键词 纯ECC+DDR4 即可找到。ERCC的会便宜一些,但是需要比较高端的机型,比如一些E5 CPU的机器。

对于这些概念可以在这里学学:https://www.bilibili.com/read/cv2879006

ECC 的全程是 Error Checking and Correcting。ECC是一种校验,ECC的R表示register,即寄存器,所以RECC就是在ECC的基础上加了一个寄存器。
ECC是控制器直接读内存颗粒,REG ECC是控制器读寄存器,寄存器读颗粒。

2Rx8: 表示2个rank组成,每个rank八个内存颗粒

购买的第一台交换机

在咸鱼上63块钱买了个TP-LINK 5口千兆交换机。交换机还挺便宜的。买回来完全不知道怎么接,然后我试着先把主机跟交换机相连,然后交换机和
路由器的LAN口相连。交换机的好处是主机之间可以直接通过交换机连接,不用通过路由器了。AP路由器我可以放到机柜外边,这样信号会更好。
这也是我买交换机的原因之一。

购买的一台梅林路由器

除了买交换机外,我另外买了个华硕的二手路由器。型号是Ac66U。价格是190。 第一次买这么贵的路由器,因为这路由器新的话,大概要600元。
卖家直接帮我装好了梅林系统。

配置路由器和交换机

路由器默认的网关是192.168.50.1 。我把网关改为了0.1。不知道为什么,我插上去后路由器识别不到交换机中的所有主机。但是改回50.1
网段后,又可以识别到里面的所有主机。想了很久感觉是DHCP的问题。可能是第一次50网段时候,DHCP把里面所有的主机都自动分配了50网段
的IP,但是改为0网段后,所有主机的网段都变为50网段的了,然后换到0网段的时候就出现问题的了。我猜应该是这样的。

解决方法就是:先把网线插到路由器上,然后通过如下方法固定主机IP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1. sudo vim /etc/netplan/01-network-manager-all.yaml
2. 改为如下配置
network:
version: 2
ethernets:
enp0s31f6:
dhcp4: no
dhcp6: no
addresses: [192.168.0.101/24,]
gateway4: 192.168.0.1
nameservers:
addresses: [192.168.0.1, 114.114.114.114]
#renderer: NetworkManager
3. sudo netplan apply # 生效配置

这样只要主机和路由器网段一致就可以识别到主机了。