KVM虚拟化服务环境与结构介绍
我已经使用这个服务器环境两年左右,使用来看稳定灵活。简单整理,结构图如下
1. 独立服务器
独立服务器拥有大量的带宽和流量,性能较高,可以同时运行多台虚拟子机。
操作系统使用滚动更新的 ArchLinux,是为了获得最新的 KVM 及内核特性,最大化的利用硬件性能同时保证不会因为系统大版本升级导致的虚拟机迁移问题。独立服务器主要运行 libvirt 服务,以及一些轻量易于迁移升级的服务,如 nginx 及 virtualenv 环境下的 webvirtmgr 等。
2. 应用服务器
独立服务器使用 KVM 虚拟化技术,安装 ubuntu, redhat, windows, macos 等虚拟机来运行应用服务。主要包含 6 个虚拟服务器:博客、编译器、后端数据服务、代码仓库、持续集成服务、下载服务器。考虑到尽量用较新的软件源和较稳定的软件,应用服务器主要使用 ubuntu server 16.04 系统。独立服务器使用 libvirt 为这些虚拟机配置了静态 IPv4 和固定的 IPv6 地址。
还有一些实验性的服务运行在 redhat, windows 或 macos 上,这些虚拟服务器通常处于关机状态,使用时才开启。
特定服务使用不同的虚拟机是为了完全分割环境,保持独立运行,相对的 docker 不能满足当前的应用需求。
博客服务器 主要运行 php 和 mysql 服务,还有一些小的静态文件托管,负载较小。
编译器 用来编译及交叉编译生成二进制文件,如编译 Android系统,openwrt/lede 固件、ipk 应用。需要较高的 CPU 、内存和磁盘 IO,负载较高。
后端数据服务 主要为手机APP提供后台的数据服务支持,主要使用 python-eve 及 mongodb 搭建,负载较低。
代码仓库服务器 是使用 GitLab 搭建的服务器,用来托管私有代码,需要较多的资源,负载一般。
持续集成服务 运行了两套持续集成服务器:gitlab-runner 和 Jenkins,主要用来自动构建及测试代码。同时运行了 docker 服务,用来测试和发行一些 docker 镜像。
下载服务器 主要用来自动化下载,运行了 transmission, deluge, rtorrent 下载服务。同时运行了我自己写的 DMaster 管理服务,搭配 DFront 浏览器插件,主要用来一键下载,爬取或者管理资源,运行了一些处理脚本来解压、压缩、整理下载的文件。整理完成后会自动调用到家里路由的 aria2 服务,路由器下载完成后会上报并删除服务器文件。
3. 前端代理服务器
后端的独立服务器托管了重要的数据服务,一般并不会直接暴露给公网,使用了 IP 访问限制,仅允许前端代理服务器访问,同时在前端代理服务器架构了缓存服务,避免后端服务出现太多的静态请求。
前端服务器主要使用 nginx , haproxy, stunnel 及端口转发来实现流量中转。所有的 HTTP 数据包括从后端到前端都使用 TLS,避免被中间设备劫持。多个前端代理服务相互备用,故障时会自动切换 DNS 解析指向到其他前端代理服务。主要使用 IPv6 连接到后端服务器,前端如果没有 IPv6 地址可以使用 https://www.tunnelbroker.net/
重要的 web 服务需要在 Google PageSpeed Insights 做网页速度、缓存等检查,确保服务得到优化。
4. 个人桌面计算机
家用电脑使用 ubuntu 16.04 系统,直到 ubuntu 18.04 出现前会一直使用这个系统。使用 Ubuntu 是因为社群最大,软件源最丰富且稳定,不会在操作系统上浪费太多时间。两年前换了 840 pro 128G 固态硬盘,只存放系统和工作文件,数据文件存放在通过路由器(ac68u+wrt1900ac)挂载的机械硬盘上,电脑启动时会自动挂载路由器上的硬盘(Samba)。
发表评论