openstack1
云计算解决的痛点:
- 传统物理机的基础配置变更困难、服务迁移会给运维人员带来大量工作。
- 传统物理机的资源利用率低,为了提高资源利用率将多个服务部署在同一台物理机反而降低的服务的安全性、增加服务的运行风险。
- 服务器数量支持快速扩展。
KVM是什么
- 是Linux的一个内核模块,不需要安装。
QEMU是什么
- 将物理硬件(硬盘、网卡等)模拟成虚拟化资源。
QEMU能够在x86架构的机器上模拟出一台非x86架构的虚拟机。
内核空间:存放内核代码和数据;用户空间:存放用户程序的代码和数据。
用户程序不能直接操纵硬盘而是通过系统调用的方式间接操纵硬盘,系统调用造成上下文切换。
部署KVM
勾选"虚拟化Intel VT-x/EPT 或 AMD-V/RVI(V)"。服务器的话需要在BIOS里面开启对虚拟化的支持。
登录服务器,检查是否存在虚拟化标签。
grep -E '(vmx|svm)' /proc/cpuinfo
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && getenforce
systemctl stop firewalld && systemctl disable firewalld
# 安装依赖包
yum install qemu-kvm libvirt -y
yum install virt-install -y
systemctl enable libvirtd
systemctl start libvirtd
systemctl status libvirtd
# 检查是否出现新的虚拟网卡
yum install net-tools -y
ifconfig | grep -A7 virbr0
# 创建一个格式为raw的硬盘
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
# 启动一个虚拟机,虚拟机类型为kvm,内存为1024M,指定光盘路径,指定硬盘路径,
# 注意,镜像需要放在tmp目录下
mv /root/CentOS-7-x86_64-Minimal-1810.iso /tmp/
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/tmp/CentOS-7-x86_64-Minimal-1810.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
打开TightVNC软件,输入kvm服务器地址,点击Connect。
常规操作,安装配置虚拟机。
按tab键,输入net.ifnames=0 biosdevname=0,统一网卡设备名称为eth0。
管理虚拟机
# 查看目前已安装的虚拟机
virsh list --all
# 启动虚拟机
virsh start CentOS-7-x86_64
使用TightVNC连接kvm机器的ip地址,使用默认端口(5900)即可。
# TightVNC登录虚拟机,令虚拟机自动获取ip地址
# 删除PREDNS,修改ONBOOT为yes
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#PREDNS=yes
ONBOOT=yes
systemctl restart network
hostname -I
ping www.baidu.com
# 登录宿主机
ps aux | grep kvm
# 关闭虚拟机
virsh shutdown CentOS-7-x86_64
# 查看创建的虚拟机的配置文件,如CentOS-7-x86_64.xml
cd /etc/libvirt/qemu
cat CentOS-7-x86_64.xml
# 修改虚拟机配置命令。注:在OpenStack中不允许使用这种方法修改虚拟机规格。
virsh edit CentOS-7-x86_64
# cpu在centos7之后支持热添加和热删除,
# <vcpu placement='static'>1</vcpu>
# 最大cpu是4个,当前是1个。
<vcpu placement='auto' current="1">4</vcpu>
# 热更新cpu数量
virsh setvcpus CentOS-7-x86_64 2 --live
# 查看当前内存
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
# 热更新内存大小
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
# 查看虚拟机列表
virsh list --all
# 启动虚拟机
virsh start CentOS-7-x86_64
openstack不支持cpu热添加。单独使用kvm可以使用该功能。
cpu、内存热添加(删除)的前提是宿主机和虚拟机都是centos7系统。
热添加和热删除会影响到虚拟机中程序的稳定运行。
# 查看网卡列表
brctl show
# 增加桥接网卡
brctl addbr br0
brctl show
# 创建桥接网卡
# 该命令需要通过脚本执行,因为直接执行会引起宿主机连接失败。
brctl addif br0 ens33
ip a
# 删除ens33网卡ip地址
ip addr del dev ens33 192.168.40.99/24
ip a
ifconfig br0 192.168.40.99/24 up
route add default gw 192.168.40.2
# 让虚拟机使用桥接网卡
virsh edit CentOS-7-x86_64
<interface type='bridge'>
<mac address='52:54:00:3a:d6:b1'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
virsh shutdown CentOS-7-x86_64
virsh start CentOS-7-x86_64
virsh list --all
ping 192.168.40.133
ssh root@192.168.40.133
# 此时宿主机可以连接、虚拟机可以连接
用户态、内核态什么时候交互?用户请求计算机硬件处理时将进行用户态到内核态的上下文切换。如读写文件等
KVM性能优化
- 提高上下文切换速度:开启虚拟化加速(如Intel VT-x/EPT或AMD-RVI)。
grep -E '(vmx|svm)' /proc/cpuinfo
- 缓存:CPU有三级缓存,虚拟机属于进程,受进程调度器的管理,进程每次调度到不同的CPU,无法高效的利用CPU的缓存,容易出现Cache miss(缓存未命中)的情况。
# 将虚拟机的进程绑定到指定的CPU(颗)运行,高效利用CPU的缓存数据。
# 大概提高10%左右的性能。
taskset -cp 1,2 25718
- 内存空间优化:用的更少。(默认)开启HugePages大页内存;
cat /sys/kernel/mm/transparent_hugepage/enabled
- 内存寻址优化:找的更快。(默认)开启Intel EPT技术加速虚拟机的虚拟内存到宿主机的虚拟内存的映射关系。
ksmd:会定期的扫描页面,合并连续的页面。实现重复数据删除,减少内存的占用。
- io优化:
IO缓存
安装OpenStack
# 在两个节点都安装:
# 1.安装仓库:
yum install centos-release-openstack-newton
# 2.安装 OpenStack 客户端:
yum install python-openstackclient
yum install openstack-selinux
# 在linux-node1上安装:
# 3.安装数据库:
yum install mariadb mariadb-server python2-PyMySQL
vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.56.11
default-storage-engine = innodb
innodb_file_per_table # 使用独享表空间
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
# 4.消息队列:
yum install rabbitmq-server
# 5.其它服务提前安装:
yum install openstack-keystone httpd mod_wsgi
yum install openstack-glance
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables