如今很多實(shí)驗(yàn)室都裝備有大內(nèi)存,高主頻,多核心的高性能服務(wù)器,所以很多虛擬機(jī)的實(shí)驗(yàn)其實(shí)是可以在實(shí)驗(yàn)室完成的,而且相對(duì)于在公有云,其測(cè)試結(jié)果更準(zhǔn)確。目前,我認(rèn)為最好的方式就是在實(shí)驗(yàn)室搭建Vagrant+libvirt+KVM的虛擬機(jī)集群。本文講介紹如何在CentOS/Fedora/Redhat上搭建Vagrant+libvirt的虛擬機(jī)集群。
特點(diǎn)
- 支持多個(gè)物理機(jī)上的虛擬機(jī)之間互相通信
- 通過(guò)Vagrantfile直接指定虛擬機(jī)啟動(dòng)的具體物理節(jié)點(diǎn),可以有效的減少在公有云中虛擬機(jī)分配的物理節(jié)點(diǎn)拓?fù)洳幻鞔_造成的實(shí)驗(yàn)誤差。
- 通過(guò)編寫Vagrantfile完成測(cè)試環(huán)境的快速搭建和部署
- 相對(duì)于Virtualbox,KVM虛擬機(jī)的性能較高
步驟
使用傳統(tǒng)網(wǎng)絡(luò)名稱
- 在
/etc/default/grub中的GRUB_CMDLINE_LINUX行中加入下面的兩個(gè)選項(xiàng)net.ifnames=0 biosdevname=0。 - 運(yùn)行g(shù)rub2-mkconfig
- 修改
/etc/sysconfig/networt-script/ifcfg-x里的內(nèi)容并重命名為ifcfg-eth0,ifcfg-eth1 - 重啟機(jī)器
節(jié)點(diǎn)之間SSH互聯(lián)
- 使用ssh-keygen生成本機(jī)密鑰,使用ssh-copy-id username@hostname拷貝密鑰
安裝和配置libvirt
- 配置
/etc/hosts
注意,hostname的名字必須準(zhǔn)確
- 多個(gè)節(jié)點(diǎn)間的TLS訪問(wèn)
參考:TLSSetup - Libvirt Wiki
安裝和配置Vagrant
- 從官網(wǎng)安裝Vagrant
rpm -ivh https://releases.hashicorp.com/vagrant/1.9.1/vagrant_1.9.1_x86_64.rpm
- 安裝vagrant-libvirt插件
dnf -y install qemu libvirt libvirt-devel ruby-devel gcc
vagrant plugin install vagrant-libvirt
編寫Vagrantfile
其中,master為遠(yuǎn)程主機(jī),slave為本地主機(jī),遠(yuǎn)程主機(jī)在libvirt.host中設(shè)置主機(jī)名稱
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
config.vm.define "master" do |master|
master.vm.box = "centos/7"
master.vm.provider :libvirt do |libvirt|
libvirt.host = "e2104"
libvirt.driver = "kvm"
libvirt.username = "root"
libvirt.password = "111111"
libvirt.connect_via_ssh = true
end
master.vm.network :public_network, :dev => "eth0", :mode => 'bridge', :ip => "10.0.2.111"
end
config.vm.define "slave" do |master|
master.vm.box = "centos/7"
master.vm.network :public_network, :dev => "eth0", :mode => 'bridge', :ip => "10.0.2.110"
end
end
啟動(dòng)虛擬機(jī)
vagrant up master
vagrant up slave
注意事項(xiàng)
- 在安裝前如果已經(jīng)安裝了libvirt,則將libvirt完全卸載,并重啟服務(wù)器
yum remove libvirt libvirt-client
reboot
yum install libvirt libvirt-devel
- TLS訪問(wèn)是密鑰的cn必須是主機(jī)名,否則會(huì)出錯(cuò)
country = AU
state = Queensland
locality = Brisbane
organization = libvirt.org
cn = e2105 #(必須為主機(jī)名)
tls_www_client
encryption_key
signing_key