Hyper-V集群部署指南
工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。
目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程:
目录
Hyper-V的安装
也不能算说是安装,如果你的win10是专业版或者专业版以上,只需要在功能中开启即可
服务集群的搭建
虽然服务器现在是Linux的天下,但使用 win server + Hyper-V的组合也不在少数,在开发学习中,我更建议使用 hyper-V (Vmware)来管理一大堆Linux虚拟机集群,(亲测踩坑,没有专业的团队维护的话,服务器只装一个Linux,然后使用docker管理其他的Linux系统,出现问题的概率很大)。
在hyper-v中安装虚拟机和Vmware的操作方法差不多,也没有太多的坑,可参考网上其它教程。
既然部署在单台机器内的集群(如果你是土豪,一台电脑一个系统,当我没说),那么就有两个很重要的问题:
- 这么多虚拟机,它们之间如何通信,它们与外部如何双向通信
- 当电脑启动时,如何自启动这些虚拟机,不然每天还一个个手动启动吗?
分别来解决
虚拟机的网络通信
NAT网络的搭建
(以下命令都是在powershell中运行,管理员身份打开)
HyperV虚拟交换机分为 外部,内部,私有
默认的 defaultSwitch 为内部,并标注了默认使用NAT:
但官方文档中有这样说明:
使用如下命令查询却显示没有NAT网络,很迷,存疑?
Get-NetNat
这个 defaultSwitch 虽然可以很好的连接互联网,但宿主机每次重启,该交换机的IP都会改变,很不稳定,至于为什么,暂时也很疑惑?
于是我觉得自己建立一个内部交换器试一下
结果是 内网可以互相访问,但虚拟机无法访问互联网,(参考defaultSwitch,推测可能是需要NAT模式的内部交换机才可以访问互联网)于是依据下面的步骤新建了,NAT模式的内部交换机 NATSeitch ,算是成功访问外网,也稳定住了IP)
查看当前网络适配器列表
Get-NetAdapter
创建一个虚拟网卡(名为 NATSwitch)
New-VMSwitch -SwitchName "NATSwitch" -SwitchType Internal
使用 New-NetIPAddress 配置 NAT 网关
New-NetIPAddress -IPAddress 192.168.3.1 -PrefixLength 24 -InterfaceIndex 38
-
IPAddress - NAT 网关 IP 指定要用作 NAT 网关 IP 的 IPv4 或 IPv6 地址。 常规形式将为 a.b.c.1(例如 172.16.0.1)。 尽管最后一个位置不一定必须是.1,但通常是(基于前缀长度)
通用网关 IP 为 192.168.0.1
-
PrefixLength -- NAT 子网前缀长度定义的 NAT 本地子网大小(子网掩码)。 子网前缀长度将为 0 到 32 之间的整数值。
0 将映射整个 Internet,32 将只允许一个映射的 IP。 常用值的范围为 24 到 12,具体取决于需要附加到 NAT 的 IP 数。
常用 PrefixLength 为 24 -- 这是子网掩码 255.255.255.0
-
InterfaceIndex -- ifIndex 是你在上一步中确定的虚拟交换机的接口索引。
(注:如果爆红,检查一下此IP是否被其它的适配器占用了(ping一下该地址即可),如果占用,请删除该适配器(或者修改该适配器IP)然后再次执行。)
使用 New-NetNat配置 NAT 网络。
New-NetNat -Name SWING-NAT -InternalIPInterfaceAddressPrefix 192.168.3.0/24
-
Name - NATOutsideName 描述 NAT 网络的名称。 将使用此参数删除 NAT 网络。
-
InternalIPInterfaceAddressPrefix - NAT 子网前缀同时描述上述 NAT 网关 IP 前缀和上述 NAT 子网前缀长度。
端口映射
网络部署好了,那么如何才能从外部访问这台电脑中的虚拟机呢?
例如该电脑内部署了十台虚拟机,我现在要使用 ssh 来连接其内部的某一个linux系统,这时就需要用到端口映射了,
这和docker 的 port 8080:8089 表示是一个道理,使用宿主机的端口来映射虚拟机的端口,为外部提供服务,也保证了虚拟机其他端口的安全性。
管理员身份运行powershell:
#查询映射
netsh interface portproxy show v4tov4
#新增映射
netsh interface portproxy add v4tov4 listenaddress=192.168.2.100 listenport=7982 connectaddress=192.168.3.2 connectport=22
#删除一个端口映射
netsh interface portproxy delete v4tov4 listenaddress=192.168.0.102 listenport=7980
#查询这个IP所有的端口映射。
netsh interface portproxy show v4tov4|find "192.168.0.102"
Linux的静态IP
要想一个系统的稳定,其中的每个点最好也是稳定的,将虚拟机的IP设置为静态IP,防止已启动IP就找不到家了。
这里拿 ubuntu 16.04来举例(其他的操作系统配置自行百度)
使用 ifconfig命令获取当前的 网卡名 (例如我的是 enp8s0 )
编辑文件/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp8s0
#iface enp8s0 inet dhcp
iface enp8s0 inet static
address 192.168.3.2
netmask 255.255.255.240
gateway 192.168.3.1
dns-nameserver 114.114.114.114
然后使用 /etc/init.d/networking restart 重启网络
虚拟机的自启动问题
这个很容易实现,管理员身份运行powershell:
# 查看该虚拟机的自启动和延时参数
gvm -Name u-docker-gitlab-runner | Select-Object VMname,AutomaticStartDelay,AutomaticStartAction
# 允许该虚拟机自启动
gvm -Name u-docker-gitlab-runner | Set-VM -AutomaticStartAction Start
# 配置自启动的延时时间
gvm -Name u-docker-gitlab-runner | Set-VM -AutomaticStartDelay 30
对您有帮助的话记得留言点赞,谢谢您的鼓励!!
更多推荐
所有评论(0)