搭建VirtualBox虛擬機集群


===============================
VirtualBox常用網絡
===============================
NetworkAddress Translation(NAT)
NAT 是VirtualBox建立的虛擬機默認的形式. 虛擬機之間無法溝通, 虛擬機能連接外部網絡. GuestOS只能看到從Host發來的數據請求, 但主機不能訪問GuestOS(可以通過端口轉發來訪問虛擬機). 對於大數據平台, 虛擬機之間的數據傳遞是必要的, 因此不能使用NAT.

NAT Network或叫做NAT Service(注意不是NAT, 而是NAT Network)
這是在VirtualBox4.3時引入的一種新的NAT類型模式。虛擬機之間可以彼此連接, 但主機只能通過端口轉發來訪問虛擬機. 官網上說, NAT Network下虛擬機可以訪問 Internet, 但我測試是不行的.
NAT service的工作原理和家用的路由器相似,系統群組在網絡中應用這種模式來防止外部網絡的直接訪問,但能讓系統內部通過TCP和UDP協議實現互訪或訪問系統外部網絡。

Host-only 主機網絡
則是虛擬機只能與主機彼此連接, 但不能訪問外部網絡.

Bridged networking 橋接網絡
會將虛擬機添加到主機所在的局域網. 不好的是, 外部網絡也能連接到虛擬機, 對虛擬機的安全不利.

Internal networking
可用於創建不同的虛擬機之間的訪問機制,但是不能夠訪問物理主機和外部網路中的機器。

各個網絡形式的特點, 看下圖就能直觀了.

官網上說, NAT Network下虛擬機可以訪問 Internet, 但我測試是不行的. 

 

===============================
網絡形式選擇和集群規划
===============================
不管是微服務集群還是大數據集群, 我們都希望各個機器都能相互連通. 效果最好是: VM1<->VM2, VM1(VM2)->Internet, VM1(VM2)<->Host

因辦公環境IP限制, 所以不能采用 Bridged networking 橋接網絡,
1. 為了實現 VM1(VM2)->Internet, GuestOS增加網卡1(eth0), 選擇 NAT .
2. 為了實現 VM1(VM2)<->Host, GuestOS增加網卡2(eth1), 選擇 Host-only 網絡形式, 兩個VM可關聯Host的同一個Host-only網卡.
3. 為了實現 VM1<->VM2, GuestOS增加網卡3(eth2), 選擇 NAT Network.

用下圖能很清楚說明了各個網卡的作用.

 

一般的Linux集群都需要三個以上機器, 下面是集群的網絡規划:

操作系統 機器名 集群內IP 辦公網絡IP
Windows hostos 192.168.1.1 10.224.1.100
Linux vm1 192.168.1.11 
Linux vm2 192.168.1.12
Linux vm3 192.168.1.13

 

===============================
配置實戰
===============================

步驟1: 准備 VM1

虛擬機操作系統, 我選用的 boot2docker, 因為它非常小巧(不到100M), 同時預裝了docker服務, boot2docker不好的地方是,  沒法為將集群中的機器加到 /etc/hosts 文件中.

先使用如下命令創建vm1 的GuestOS母版, VM2和VM3 將都是VM1 的克隆版.
docker-machine create --driver virtualbox vm1

 

docker-machine 創建的 VM 過程, 會完成很多工作, 首先在Host主機上創建一個VirtualBox Host-Only虛擬網卡(IP被設置為 192.168.99 網段), 然后創建了虛機VM1, 並為VM1配置了兩個網卡, 網卡1為NAT連接形式, 網卡2為Host-Only連接形式, 網卡2已開啟了DHCP服務, 也就是說VM1的IP可能會變化, 稍后需將其修改為靜態IP.

 

步驟2: 修改 VM1 eth1網卡的IP

使用下面命令獲取 VM1 的初始IP,
docker-machine env vm1

 

獲得IP為192.168.99.100, 然后用 putty 登陸 VM1, user/password 為 docker/tcuser

可以使用ifconfig eth1 192.168.1.12 命令設置eth1的IP, 但這中方法在Linux重啟之后, IP信息將丟失.
不同Linux 發行版永久設置靜態地址的方法不一樣, 這里先說明修改 Docker2Boot VM的方法, 一般Linux的操作方法稍后介紹.

對於Boot2Docker 虛擬機, 每次啟動都會重置/etc 和 /opt 目錄, 所以不能像普通發行版操作, 我們增加一個 /var/lib/boot2docker/bootlocal.sh 文件, 在其中通過 ifconfig 設置 eth1 的IP地址.

sudo -i   # 先切換到 root賬號
vi  /var/lib/boot2docker/bootlocal.sh
#bootlocal.sh 內容如下: 
ifconfig eth1 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255 up
hostname vm1
vi /var/lib/boot2docker/etc/hostname
#下行是內容
vm1

最后, 然后關閉vm1

 

步驟3: 修改HostOS主機上Host-Only adapter的IP
到目前為止, vm1的 Host-Only 連接形式的 ip 已經被修改為 192.168.1.11, 但Host主機的VirtualBox Host-Only虛擬網卡IP仍為 192.168.99.1, 不在一個網段, 是時候修改主機的IP為 192.168.1.1 .

操作步驟為: VirtualBox 界面的管理-全局設定, 然后選擇網絡, 然后選擇"僅主機HostOnly網絡", 選定那個 VirtualBox Host-Only Ethernet Adapter, 修改IP地址為: 192.168.1.1, 網絡掩碼為 255.255.255.0, 關閉DHCP服務器, 以確保GuestOS有一個固定的IP.

上面的步驟和下面的截圖都是VirtualBox 4的, VirtualBox 5.2的配置和截圖稍有變化, 主要是默認情況下HostOnly的 Ipv4 是自動分配, 我們需要修改注意這個為"手工分配", 設定 IP v4的地址, 這個IP地址就是HostOS的地址, 比如設置為 192.168.1.1 

 

步驟4: 將 VM1 復制一份為 VM2

打開Virtualbox 軟件, 在UI 上關閉VM1虛擬機, 復制一份為VM2並啟動它, 修改 IP 和 hostname. 

sudo -i   # 先切換到 root賬號
vi  /var/lib/boot2docker/bootlocal.sh
#bootlocal.sh 內容如下: 
ifconfig eth1 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255 up
hostname vm2
vi /var/lib/boot2docker/etc/hostname
#下行是內容
vm2

 最后, 然后關閉vm2.

 

步驟5: 將 VM1 復制一份為 VM3

操作方法同上. 


===============================
CentOS Linux修改IP的方法
===============================
對於 RHEL/CentOS, 可修改 ifcfg-eth1 配置文件, 然后執行 service network restart 命令,
完整文件名為: /etc/sysconfig/network-scripts/ifcfg-eth1
文件內容如下:

DEVICE=eth1
IPADDR=192.168.1.11
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BOOTPROTO=none      
TYPE=Ethernet

NM_CONTROLLED=yes   
PREFIX=16
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
ARPCHECK=no

關於設置的說明:
ONBOOT 意思是開機即啟動本網絡設備
BOOTPROTO 可以取值為dhcp或none, 即是否啟用dhcp


===============================
參考
===============================
http://xintq.net/2014/09/05/virtualbox/ , 很好的教程
http://xintq.net/2016/06/29/virtualbox-networking/ , 圖文並茂顯示各個網絡的機制
https://bridge.grumpy-troll.org/2017/11/boot2docker-xhyve-dns/
https://segmentfault.com/a/1190000005650099


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM