用过vmware和virtualbox的人大概都知道虚拟机是怎么回事儿,这种虚拟化软件通常装在windows环境下,而且是单机环境。那么随着云计算与大数据的发展,虚拟化技术也是得到了极大的发展,比如分布式的虚拟化软件OpenStack和Proxmox VE等。
对于这4种常用的虚拟化软件我的使用感受就是在windows上virtualbox比vmware好用,服务器上Proxmox比OpenStack好用。windows上的不说了,本文重点说一下服务器上的虚拟软件使用感受,之前用过windows server服务器上装的virtualbox,然后再开各种各样的虚拟机,总体感受就是很慢,在相同的环境下跑相同的程序结果很慢得多。可能与这种virtualbox是半裸的虚拟化技术有关(寄居虚拟化),vmware也是这种技术。
说到虚拟化技术,下面的图更加解释得直观:
而在服务器上Proxmox和OpenStack则表现更加稳定。OpenStack配置要求高,安装配置过程复杂,但是可以用Fuel进行一键安装,总体来说没有Proxmox易用。而Proxmox只需要30分钟就能安装系统,还有很多操作系统的模版可以使用。Proxmox比较稳定,我们实验室和我之前实习的公司都是用的Proxmox集群来作为生成环境,基本上没有出什么大问题。
接下来说说应用:Proxmox主要是创建KVM虚拟机和lxc容器,KVM虚拟机需要iso镜像(几个G),lxc容器需要tar.gz模版(100M左右)。
首先安装系统,去官网下载Proxmox iso镜像,最新版是5.3.我前段时间装的是5.2,但基本上没有差别,我们实验室的集群是4.2,也没有很大的区别。Proxmox 是基于debian的系统(ubuntu也是基于debian的系统),我觉得他是裸机虚拟机技术(可能理解不准确,它集成了多种虚拟化技术),但这不重要,重要的是Proxmox 的安装就和普通linux系统一模一样,而且比装一个centos或者ubuntu更简单,更快!!!
安装教程很多,服务器上装需要做个U盘系统,也可以在vmware和virtualbox上装,如下图,按照提示一步一步走即可,ip配置那一步先用默认的配置!!!
本文要重点说的是proxmox的集群模式和网络模式!!!
安装好之后proxmox 登陆命令行界面有一个连接:
https://192.168.1.100:8006,注意是https,不是http。
这是网页端的管理界面,通过网页上点点鼠标可以省去很多复杂的操作命令。
下面将proxmox ve简称为pve,对与pve集群,他不是传统的主控集群(一个主节点几个从节点)因为主控集群容易产生单点故障如hadoop集群、spark集群等。pve集群的每个节点完全是对等的,没有主从之分,也就是挂了某个节点,其余节点不受影响,只是挂了那个节点上的虚拟机有影响。而虚拟机只是pve某个节点上的一个进程而已,但是虚拟机的存储可以共享,也就是说每个pve节点的硬盘可以共享给其他节点。
集群搭建过程:
首先分别把每台服务器的pve系统装好,然后通过web UI可以看到是这种的:
pve1是系统的主机名,可以通过 vi /etc/hostname修改,主机名修改后重启生效。
192.168.1.125 pve1
192.168.1.126 pve2
网上说搭建集群要在交换机上开多播,其实不开也可以。
通过命令修改 vi /etc/network/interfaces,如果通过网页端修改ip也可以,但修改是保存在临时文件/etc/network/interfaces.new里,都是重启生效。
这里要重点说一下有很多中网络方案,常见的有2种网络模式:
a.只有一个网卡
这种方式下虚拟机使用10.10.10.x网段,宿主机集群的通信和虚拟机的通信都走一个网卡,虚拟机通过nat转发。
b.有两个网卡:
这种模式下就宿主机集群走网卡1,而虚拟机之间的通信走网卡2。这种模式下多个服务的网卡2之间要走单独的网线,也就是双网卡双网线,这样每个节点上的虚拟机都能互通。
3.在宿主机上为虚拟机开启转发规则:(这一步先跳过,创建虚拟机时再做)
重点说明:
1 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
恢复规则:iptables-restore > /etc/iptables.up.rules
开机自动恢复规则,把恢复命令添加到启动脚本:
echo '/sbin/iptables-restore /etc/iptables.up.rules' >>/etc/rc.d/rc.local
宿主机重启后规则会失效,最好设置开机自动恢复规则!
4.然后按照这种配置规则把每个服务器的ip都改好:
/etc/init.d/networking restart
reboot
通过命令:
systemctl start corosync
因为没有开多播会corosync会启动失败,需要手动生成authkey:corosync-keygen
systemctl start pvedaemon
systemctl start pve-cluster
然后:
1.在主服务器pve1上创建集群:名字为abc
pvecm create abc
2.分别在其余服务器上加入到该集群abc:
pvecm add 192.168.1.125
3.查看状态:
pvecm status 或 pvecm nodes
单机版默认会集群pvedaemon和pve-cluster,而不会启动corosync。
创建集群最核心的就是集群同步服务corosync,corosync成功后会生成配置文件corosync.conf,,如果启动失败后需要手动修改配置文件:
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: pve1
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.1.125
}
node {
name: pve2
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.1.126
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: abc
config_version: 2
interface {
bindnetaddr: 192.168.1.125
ringnumber: 0
}
ip_version: ipv4
secauth: on
version: 2
}
这是集群赖以成功的关键因素!!!
这个目录是只读的,只有当pve-cluster启动后才会有内容,pve-cluster关掉服务后, 这个目录会被清空!!!他是属于www-data 用户组,就是web UI的文件目录,因此不能修改!关掉pve-cluster服务后,web UI也就关掉了,/etc/pve也就清空了。
我们配置是只关注/etc/corosync/和/etc/pve/目录,但它会自动关联一些目录:
通过以下查看相关的目录:
find / -name"pve"
find / -name"corosync"
rm -rf /var/lib/pve-cluster/*
rm -rf /var/lib/corosync/*
rm -rf /var/lib/rrdcached/db/*
rm -rf /etc/pve/*
rm -rf /etc/corosync/*
由于/etc/corosync/和/etc/pve/是只读的,因此修改corosync.conf的时候需要先把只读权限去掉,修改后再恢复:
单机版:开机默认先启pvedaemon服务,再启pve-cluster服务。
集群版:开机默认先启pvedaemon服务,再启pve-cluster服务,最后启动corosync服务。
前提是保证/etc/pve/为空,如果不为空则第二步的pve-cluster服务就会启动失败。
启动corosync的过程:就是将本地目录的/etc/corosync/corosync.conf复制到集群目录/etc/pve/下面。
这三个步骤对应着三个重要命令:
systemctl start pvedaemon
systemctl start pve-cluster
systemctl start corosync
报错authkey不存在,需要手动生成authkey,命令为: corosync-keygen
systemctl start pvedaemon 默认开机启动pvedaemon. service服务
systemctl startpve-cluster 默认开机启动pve-cluster. service服务
pve-cluster启动后会在/etc/pve下面生成文件,/etc/pv/下的所有文件和目录都属于 root 用户和www-data 用户组。systemctl stop pve-cluster关掉服务后, /etc/pve目录会清空!!!
如果要搭建集群还需要另外启动corosync服务:
systemctl start corosync
corosync-keygen
默认不会启动,创建一个集群时才会启动它!
相关命令
systemctl stoppvedaemon
systemctl stoppve-cluster
systemctl stopcorosync
systemctl statuspvedaemon
systemctl statuspve-cluster
systemctl statuscorosync
systemctl status
systemctl statuscorosync.service
pvecm status 查看集群节点状态详细
pvecm nodes 查看集群节点状态简单
如果觉得上述通过命令创建集群比较繁琐,可以用过通过web UI点点鼠标来创建集群。
然后在弹出框输入集群名字如abc,弹框输出TASK OK表示成功:
可以看到创建集群的步骤为:
这些信息来自于:pve1的网页上的Join Information:
这一步也可以直接输入命令:
pvecm add pve1
pvecm add pve1 –force 强制添加
即在pve2节点上输入命令pvecm add pve1,pve1是集群abc中已经存在的节点名。
添加节点成功输出TASK OK表示成功!
然后刷新网页即可看到:这是登陆pve1和pve2都是一样的页面了!!!
这时通过任意一个节点的ip登陆看到的效果都是一样的!!!
https://192.168.1.125:8006
https://192.168.1.126:8006
由于篇幅原因本文只介绍集群创建过程,后面再接着将如果配置存储和创建虚拟机模版等等内容。最后可以打开[支付宝]首页输入 578968162 ,可以领取红包哦,一般还是能领个两三块的,may be more than that!!!
感谢您的支持,快去领花呗红包吧:578968162