记录下最近试玩 SolusVM 的安装配置过程。没接触前以为会很难,实际程序安装步骤很简单,难点在于服务器环境配置上。尤其网络配置容易遇到问题,其它基本跟着教程走就可以运行起来。当然这还只是基础搭建范畴,如果想运营提供服务,还有很多问题要解決。
准备工作
服务器和 IP
准备两台服务器。其中 SolusVM 主控可以使用普通 VPS,配置不要太低就行。被控 KVM 需要用独立服务器,并配有多个 IP 地址(通常是一个 C 段或在下面划分的更小子网,用于分配虚拟机使用)。
安装 CentOS 6 系统(目前 SolusVM 对 CentOS 7 的兼容性不好,存在重启不能自启虚拟机、不支持限速等问题)。系统建议安装 Minimal 版本,安装过程中配置好网络连接和硬盘分区(对 KVM 服务器而言,通常用 IPMI 这类底层控制台操作)。
安装系统后运行一遍更新,安装几个基础软件,检查禁用 SELinux,然后重启服务器备用。
yum -y update yum -y install wget unzip screen lrzsz
SolusVM 授权
SolusVM 官网购买产品授权,没有激活将无法进行任何操作。如果只是玩玩,有 30 天免费试用。
域名及 SSL 证书(可选)
SolusVM 控制面板使用。如果不在乎访问体验,不配置域名和 SSL 证书也可以,直接用 IP 访问。
SolusVM 主控程序安装
下载运行 SolusVM 安装脚本,它会自动集成安装 Nginx、数据库、PHP 等工作组件。
wget https://files.soluslabs.com/install.sh sh install.sh
选择 1 仅安装 SolusVM 主控程序,等待安装完成后会打印登录信息。
这时就可以访问登录 SolusVM 控制面板。由于没有配置 SSL 证书,浏览器会显示警告信息。
SolusVM SSL 证书配置
这里只介绍主控端 SSL 配置,被控服务器用默认自签证书就行。如果已准备域名证书(包括 cert.pem 文件,其生成方法及放置路径下面有提及),将证书上传到 SolusVM 默认目录,替换同名文件。
/usr/local/svmstack/nginx/ssl/ssl.crt /usr/local/svmstack/nginx/ssl/ssl.key
重启 Nginx 服务生效。
service svmstack-nginx restart
如果没有准备或不打算使用付费证书,可按下面步骤申请安装 Let’s Encrypt 免费证书。
在之前程序安装打印信息里有说可以用 /usr/local/svmstack/letsencrypt/letsencrypt -i 获取 Let’s Encrypt 证书,但笔者测试没有成功,还是用更好 ACME 客户端 acme.sh 申请吧。
安装 acme.sh(默认安装在用户目录下)。若要指定安装目录和证书储存目录,查看此介绍。
curl https://get.acme.sh | sh
安装后需要断开重连 SSH 会话方能使用。
用下面命令申请证书。如果要申请多个域名追加 -d 参数,-w 参数是网站验证目录路径(检查目录是否存在)。更多选项参数可通过 acme.sh --help 命令查看。
acme.sh --issue -d cp.example.com -w /usr/local/solusvm/www/.verification
创建一个 Shell 脚本储存部署证书后要执行的命令,包括重启 Nginx 服务,生成 noVNC 所需的 cert.pem 文件。蓝色字符命令是重启 sshwebsocket(HTML5 控制台),这个服务 SolusVM 默认没有安装,因此执行会提示找不到文件。考虑到这个也属常用服务,顺便加上重启命令。
在指定目录创建脚本文件(储存路径可随意)。
cd /root/.acme.sh && vi myreloadcmd.sh
复制粘贴脚本内容保存。
#!/usr/bin/env bash service svmstack-nginx restart /usr/local/svmstack/sshwebsocket/quit /usr/local/svmstack/sshwebsocket/port_check cd /usr/local/svmstack/nginx/ssl && cat ssl.key ssl.crt > /usr/local/solusvm/includes/nvnc/cert.pem
赋予脚本可执行权限,./不可省略,表示文件在当前目录下。
chmod +x ./myreloadcmd.sh
接着安装证书文件到 SolusVM SSL目录。用这种方式安装,后续 acme.sh 续订证书会记住附带命令。如安装路径,更新后需要执行的操作。相关配置在用户目录下的 .acme.sh 域名目录里的 *.conf 文件。
acme.sh --install-cert -d cp.example.com \ --key-file /usr/local/svmstack/nginx/ssl/ssl.key \ --fullchain-file /usr/local/svmstack/nginx/ssl/ssl.crt \ --reloadcmd "/root/.acme.sh/myreloadcmd.sh"
Let’s Encrypt 免费证书有 90 天期限,到期后需要续订。在安装 acme.sh 时已自动添加 Cron 更新任务,可通过crontab -l 命令查看(修改用 -e 参数)。
例如下面规则表示每 54 天检查更新(只是检查更新,这个时间 acme.sh 貌似会自动调整。更新时间取决 acme.sh 域名配置文件里的 Le_NextRenewTimeStr 值。如果要强制更新追加 --force 参数)。
54 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
SSL 证书配置好后访问测试下,如无意外,应该可以看到绿色小锁安全标识。
到此,SolusVM 主控端安装完成。登录进去绑定授权码,修改管理员账户密码,之后回来添加节点。
SolusVM KVM 管理程序安装
运行 SolusVM 安装脚本,选择 4 安装 KVM 管理程序,安装后复制保存 Key & Password 备用。
wget https://files.soluslabs.com/install.sh sh install.sh
rpm -q bridge-utils 检查是否安装 bridge-utils 软件包(之后要用到),没有则用下面命令安装。
yum -y install bridge-utils
配置 KVM Bridge 网络
为使开出的 KVM 虚拟机能连接网络,需要在宿主机上配置好 Bridge 网络(内网和外网都配置。外网显然不可或缺,不然虚拟机无法访问互联网。配置内网好处是,之后可以按需分配内网 IP 给虚拟机,使其可以访问局域网下其它虚拟机或设备)。
外网 Bridge 网络设置
假设要添加两个 IP 段,分别是 56.56.56.32/30 和 56.56.56.0/27。前者是宿主机使用的主 IP,后者是分配虚拟机使用的 IP。
配置 56.56.56.32/30
56.56.56.32/30 IP段共有 4 个 IP,范围是 56.56.56.32-35。除去头尾的网络地址(32)和广播地址(35)不可用外,第一个 IP 是网关地址(33),实际只剩 34 可配置为 IP。子网掩码 255.255.255.252。这些信息可以用在线工具计算。
找到接入外网的网卡设备配置文件,在 /etc/sysconfig/network-scripts 目录下 ifcfg-eth* 开头的文件。如果有多个,从 0 开始检查,里面有配置之前安装系统时设置的外网 IP 就是。
这里假设网卡配置文件名是 ifcfg-eth1,先备份一下。
cd /etc/sysconfig/network-scripts && cp ifcfg-eth1 backup-ifcfg-eth1
修改 ifcfg-eth1 文件,保留蓝色参数,红色参数以链接等下创建的 br0,删除网络参数(记下备用)。
vi ifcfg-eth1
DEVICE=eth1 TYPE=Ethernet UUID=8d6f722c-b945-4083-b50e-9661bf62ae5f HWADDR=ac:1f:6b:94:55:22 ONBOOT=yes BRIDGE=br0 NM_CONTROLLED=no BOOTPROTO=static IPADDR=56.56.56.34 NETMASK=255.255.255.252 GATEWAY=56.56.56.33 DNS1=8.8.8.8 DNS2=8.8.4.4 IPV6INIT=no
创建 ifcfg-br0 网桥配置文件(尾数 ID 不要求对应网卡的)。将之前 ifcfg-eth1 里的网络参数添加进去(红色部分),蓝色部分是常规必要参数。
vi ifcfg-br0
DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=56.56.56.34 NETMASK=255.255.255.252 GATEWAY=56.56.56.33 DNS1=8.8.8.8 DNS2=8.8.4.4 IPV6INIT=no NM_CONTROLLED=no
配置 56.56.56.0/27
再添加一个 IP 段,用于分配虚拟机使用。配置文件命名 ifcfg-br0:0(这样命名可以使用同一个网卡设备,添加多个 IP 段则后面 ID 顺延。eth1 那里不用再链接这个接口,链接 br0 会自动关联这个)。
vi ifcfg-br0:0
内容如下。注意这个不要设置网关(多个网络接口只能有一个默认网关 ),IP 设置第一个可用 IP(网关地址)。
DEVICE=br0:0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=56.56.56.2 NETMASK=255.255.255.224 IPV6INIT=no NM_CONTROLLED=no
到此,完成外网 Bridge 设置,接下来创建一个内网 Bridge,以供分配虚拟机访问局域网使用。
内网 Bridge 网络设置
创建 ifcfg-intbr0 网桥配置文件。添加 10.0.0.1/24 内网 IP 段(共 254 个可用 IP 通常已足够)。内网不用设置网关参数。
vi ifcfg-intbr0
DEVICE=intbr0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=10.0.0.1 NETMASK=255.255.255.0 IPV6INIT=no NM_CONTROLLED=no
确认开启 IP 转发及重启网络
检查有无开启 IP 转发,查看 /etc/sysctl.conf 文件,下面参数值 1 为开启。
net.ipv4.ip_forward = 1
重启网络使之前网络配置生效。
/etc/init.d/network restart
之后用 ifconfig 查看网络接口。测试绑定 IP 能否 ping 通。brctl show 检查 Bridge 接口状态。
修改 SolusVM 扩展配置文件
这步是设置 SolusVM 在配置虚拟机内网时不要添加网关,如果没有设置,则分配了内网 IP 的虚拟机将无法访问外网(因为存在超过一个默认网关)。
改名启用 config.ini 配置文件。
mv /usr/local/solusvm/data/config.ini.example /usr/local/solusvm/data/config.ini
去掉文件里的 domain_simple_internal_network 参数行注释,并将值设为 true。
sed -i 's/;domain_simple_internal_network = false/domain_simple_internal_network = true/g' /usr/local/solusvm/data/config.ini
SolusVM 开通 KVM 虚拟机
终于到了检验配置的时候了,登录 SolusVM 主控面板添加服务器和IP,开通虚拟机测试是否正常。
添加 KVM 服务器
菜单栏点击 Nodes -> Add Node。填写 KVM 服务器资料。如果不清楚 Hostname / LV Group,可用 hostname 或 vgdisplay 命令查询。ID Key 和 ID Password 是之前安装 KVM 程序提示的字符串。
保存后会多出几个选项,点击回来完成设置。检查系统版本识别是否正确,设置网卡/网桥名称,网络端口速度,可开虚拟机数量,内存/硬盘最大用量等选项。
顺便编辑下 SolusVM 主控节点,勾选 Locked 禁用在此节点上创建虚拟机。
设置后回到 List Nodes 界面,点击添加的 KVM 服务器名称,进入点击 Internal Ipaddresses 选项。
修改内网缺省值(根据之前创建的 ifcfg-intbr0 配置文件填写),添加可用内网 IP 范围(不要添加 10.0.0.1 默认网关地址,从 10.0.0.2 开始)。
如果要为已开通的 KVM 虚拟机添加内网 IP ,流程是先在虚拟机属性页面里点击 Internal IP 添加,之后重启虚拟机。重启后登录虚拟机操作系统,创建一个网络接口配置文件(内容如下,替换其中的具体内网 IP 地址),假设文件名为 ifcfg-eth1(不要覆盖已有的配置文件)。
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1 BOOTPROTO=static ONBOOT=yes IPADDR=10.0.0.2 NETMASK=255.255.255.0 IPV6INIT=no NM_CONTROLLED=no
之后 /etc/init.d/network restart 重启网络生效。使用 ifconfig 检查是否添加成功,以及能否 ping 通 10.0.0.1 网关地址。如果虚拟机重装了系统,则不用重复此过程,SolusVM 会自动生成。
添加外网 IP 地址
菜单栏点击 IP Blocks -> Add IPv4 Block,根据之前创建 ifcfg-br0:0 配置文件里的参数设置(网关地址为第一个可用 IP),勾选所属服务器节点。如果 ifcfg-br0 主 IP 段有多个可用 IP 也可以如法添加。
回到 List IP Blocks 界面,点击刚才添加 IP Blocks 右侧的 Manage IP’s 按钮,进去添加可用 IP 范围(网关地址那个不要添加,添加范围 56.56.56.2-30)。
获取 & 同步虚拟机系统模板
从 SolusVM 分发网络下载预构建 KVM 操作系统模板(还有一个单分区无 SWAP 系统模板可以选择),复制页面里的下载链接登录到主控服务器下载。
下载后回到控制面板操作,菜单栏点击 Media -> Media Groups 创建一个 KVM Template 组。
之后 Media -> Add KVM Template 依次添加已经下载的系统模板,勾选随机生成 root 密码和自动配置网络,其它选项按系统模板下载页面里的说明设置。
添加后会多出几个选项,建议点击回来查看。其中可以启用 CPU Model 选项使用 host-passthrough 模式,这样虚拟机可以看到宿主机的 CPU 型号,能提高指令兼容性和效率,而不是 QEMU 这种。
接下来 Media -> Media Sync 同步系统模板到节点服务器上。点击 Create 创建同步任务,选择系统模板和同步服务器,点击 Create Sync Job 提交。
在 Jobs 界面查看任务进度,变为下图状态就同步完成了。
添加不同配置的虚拟机产品
菜单栏点击 Plans -> Add KVM Plan,自定义虚拟机产品配置,选中可以使用的系统模板,完成添加。
添加用户账号
菜单栏 Client -> Add Client 添加一个测试用户账号。
开通虚拟机测试
菜单栏点击 Virtual Servers -> Add Virtual Server,点击 KVM,选择节点服务器和套餐。选择开通用户账号,设置主机名,分配 IP 和预装系统,点击创建虚拟机,之后显示虚拟机登录资料。
开通后等系统安装完成,大概10分钟左右吧。如无意外,SSH 连接上就可以开始使用了。
补充:开通虚拟机默认不分配内网 IP 。如有需要,可以按之前所说的步骤手动分配添加。
总结
上面文章为求详尽写的比较多。对新手而言,主要还是网络配置那块比较难,其它只要操作过程不遇到什么新问题,一般都能顺利部署好。如果想要熟悉 SolusVM 使用,建议花些时间看一遍官方文档,里面介绍的比较全面。