徐亮伟, 江湖人称标杆徐。多年互联网运维工做经验,曾负责过大规模集群架构自动化运维管理工做。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工做。
我的博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:55240892五、572891887
架构师群:471443208html
该博客文章同步视频在51cto上线了,想详细了解的朋友能够点击下方视频连接地址
[51cto视频地址传送门](http://edu.51cto.com/course/13208.html)
node
云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用程序,服务),这些资源可以被快速提供,只需投入不多的管理工做,或与服务供应商进行不多的交互。python
在使用云计算以前的模式和技术linux
一、IDC托管
二、IDC租用
三、虚拟主机(卖空间)
四、VPS:虚拟专用主机 openvz(经过超卖技术坑人) xen(不支持超卖)nginx
云计算以前,传统数据中心面临的问题git
一、资源利用率低
二、资源分配不合理
三、自动化能力差
四、初始成本高github
云计算是什么web
一、云计算是一个概念, 不是任何技术(指的是资源使用和交付模式)
二、云计算使用方法必须经过网络来访问
三、云计算的优点(弹性付费、按需付费、快速扩展)
四、云计算不用关系底层基础设施架构shell
云计算优点vim
一、海量动态资源池,灵活的调配和绑定
二、无处不在的网络访问
三、随需应变的自助服务
四、服务应用的可用性
五、快速的弹性伸缩
云计算分层
IDC 全部都得自行管理
IAAS 基础设施及服务
PAAS 平台及服务
SAAS 软件及服务
公有云(阿里云、腾讯云)只有使用权,按需付费(技术层面:数据不安全 道德层面)
私有云(自建机房,本身搭建,全部自行管理 (局限:资源固定))
混合云(主要业务放私有云、当有临时需求的时候使用公有云,使用结束不用)
什么是KVM, 内核级虚拟化技术Kernel-based Virtual Machine
虚拟化是一种具体的技术,将物理机虚拟成多个相互独立的虚拟机。
在一台计算机上同时运行多个逻辑计算机,每一个逻辑计算机可运行不一样的操做系统,而且应用程序均可以在相互独立的空间内运行而互不影响,能够实现资源的动态分配、灵活调度、跨域共享,提升资源利用率,服务于各行各业中灵活多变的应用需求。从而显著提升服务器的工做效率。
虚拟化的分类
全虚拟化
半虚拟化(qemu模拟网络以及硬盘)
硬件虚拟化(Inter vt-x/EPT) (AMD AMD-v /RVI)
桌面虚拟化 (银行,操做层面控制-没法复制、没法使用usb、最多手机拍照))
应用虚拟化 (将应用经过浏览器进行交付,只须要安装插件便可实现"贵")
虚拟化使用场景
1.虚拟化能够虚拟出来多个操做系统,它们之间是相互独立的,因此每一个操做系统上所跑的应用程序是相互不影响的。
2.支持异构,linux系统能够虚拟化windows系统,方便不一样场景系统的使用。
3.支持快照、克隆、迁移、等功能。
企业案例一
公司有一台服务器, 在盘点资产时, 你并不清楚该虚拟机是否能中止, 也不清楚上面运行了什么, 问技术部门没有一我的清楚, 只会告诉你, 有可能有用你放着把。
若是这是一台物理机你看怎么办,真的很无奈、想改个啥你都不敢该,只能让他跑在那里。
企业案例二
公司这台物理机有没有用,全部人告诉你,没事删把确定没有用,而后到店庆的时候,产品经理过来了:咱们去年店庆作了一个积分抽奖的活动,我花钱买的,个人代码哪去了,个人服务器呢?服务器早都格式化多少遍了,产品经理说那没办法,那么赶忙联系提供商把,提供商倒闭了。怎么办,从新作呗。
若是有虚拟机就好办了,我把虚拟机关了放在那,只要不删除,是否是永远都在,哪天用在起来就好了。无非就占点硬盘,分配的时候,可使用多少分配多少。
虚拟化与云计算总结
云计算不等于虚拟化,二者并不能相互比较。
云计算是一种资源和使用交互的方式。
虚拟化是一种具体的技术。
云计算要依赖虚拟化技术来实现的一种经过网络访问获取资源,流量,交付的使用模式。(例如:弹性计算)。
虚拟化至关于实干家,而云计算是思想家。
KVM须要硬件支持, 因此须要开启虚拟化支持
1.硬件设备直接在BIOS设置开启CPU虚拟化
2.我的电脑一样进入BIOS开启虚拟化支持
3.VM须要找到对应虚拟机开启对应的VT-EPT虚拟化技术
//没有任何内容则表示服务器没有启用虚拟化 [root@kvm-node1 ~]# egrep '(vmx|svm)' /proc/cpuinfo
1.服务器环境规划
系统 | 主机名 | IP | 内存 | 磁盘 |
---|---|---|---|---|
CentOS7 | kvm-node1 | 192.168.56.11 | 4G | 80G |
CentOS7 | kvm-node2 | 192.168.56.12 | 4G | 80G |
2.基础环境配置
//查看当前系统版本 [root@kvm-node1 ~]# hostnamectl Static hostname: kvm-node1 Icon name: computer-vm Chassis: vm Machine ID: 6878674c84644fd381a5e3a82d80cf18 Boot ID: fd8e37aca7e4421fa5674fc0fff147e9 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-693.el7.x86_64 Architecture: x86-64 //设定主机名 [root@kvm-node1 ~]# hostnamectl set-hostname kvm-node1 //关闭防火墙 [root@kvm-node1 ~]# systemctl stop firewalld [root@kvm-node1 ~]# systemctl disable firewalld //关闭Selinux [root@kvm-node1 ~]# sed -i '/SELINUX=/cSELINUX=disabled' /etc/selinux/config [root@kvm-node1 ~]# setenforce 0 //配置hosts解析 [root@kvm-node1 ~]# echo "192.168.56.11 kvm-node1" >> /etc/hosts
3.安装KVM
虚拟化工具
//qeum 虚拟化软件,能够虚拟不一样的CPU,以及模拟网卡、声卡、PCI设备等 //libvirt 用于管理KVM的工具 //virt-install 命令行安装虚拟机工具 //virt-manager 图形化管理虚拟机工具 //openssh-askpass 远程链接KVM主机 [root@kvm-node1 ~]# yum install qemu-kvm qemu-kvm-tools \ libvirt virt-manager virt-install \ openssh-askpass –y //KVM是linux内核的一个模块,模块不须要安装只须要加载,经过用户态程序来管理便可 [root@kvm-node1 ~]# lsmod|grep kvm kvm_intel 148081 0 kvm 461126 1 kvm_intel
4.启动libvirt
管理KVM
工具
[root@kvm-node1 ~]# systemctl enable libvirtd.service [root@kvm-node1 ~]# systemctl start libvirtd.service #注意: 启动后会新增一块virbr0网络
5.KVM
会给虚拟机分配NAT
模式网络,可是在生产状况,强烈推荐使用网桥模式
//配置KVM虚拟机使用的桥接网络, 添加br0网卡 [root@kvm-node1 ~]# brctl addbr br0 //将eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙 [root@kvm-node1 ~]# brctl addif br0 eth0 && \ ip addr del dev eth0 192.168.56.11/24 && \ ifconfig br0 192.168.56.11/24 up && \ route add default gw 192.168.56.2 [root@kvm-node1 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29726a96 no eth0 virbr0 8000.525400e6a3a3 yes virbr0-nic
1.在建立虚拟机以前, 咱们须要添加一块磁盘来存放咱们的虚拟机, VM->关机->设置->添加磁盘
//直接使用整块磁盘 [root@kvm-node1 ~]# mkdir -p /data [root@kvm-node1 ~]# mkfs.xfs /dev/sdb [root@kvm-node1 ~]# mount /dev/sdb /data #强烈建议加入开机自启动
2.使用virsh-install
建立命令模式建立虚拟机
//挂载系统光盘, 创建ISO镜像文件 [root@kvm-node1 ~]# dd if=/dev/cdrom of=/data/centos7u4_x86_64.iso //建立虚拟机磁盘 [root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1.qcow2 10G //建立虚拟机实例 virt-install --name centos7u4-node1 \ --virt-type kvm \ --ram 1024 \ --cdrom=/data/centos7u4_x86_64.iso \ --disk path=/data/centos7u4-node1.qcow2 \ --network bridge=br0 \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole //参数概述 --virt-type:指定虚拟机类型(kvm、qemu、xen) --name:指定虚拟机名称 --raw:指定虚拟机使用内存大小 --cpu:指定cpu的核数(默认为1) --cdrom:指定虚拟机安装的ISO镜像 --disk:指定虚拟机数据存储磁盘qcow2 --network:指定虚拟机网络类型, 默认nat,经常使用bridge --graphics:指定虚拟机可链接方式, 好比VNC --noautoconsole:不链接虚拟机图形界面控制台
3.使用vnc
客户端链接KVM
虚拟机,进行操做系统安装
4.安装CentOS7
在启动前修改内核让网卡为eth0
5.安装系统步骤忽略, 但必定要记得配置好对应的地址
1.准备Win7 ISO
镜像
2.建立虚拟机磁盘
[root@kvm-node1 ~]# qemu-img create -f qcow2 win7-node1.qcow2
3.virt-install
命令建立Win7
虚拟机, 也可使用virt-manager
建立Win7
虚拟机
[root@kvm-node1 ~]# virt-install --name win7-node1 \ --virt-type kvm \ --ram 2048 \ --cdrom=/data/win7.iso \ --disk path=/data/win7-node1.qcow2 \ --network bridge=br0 \ --graphics vnc,listen=0.0.0.0 \ --noautoconsole
4.Win7
安装过程, 内存与磁盘不够会致使安装慢或失败
//虚拟机随着系统启动 virsh autostart Name //关闭虚拟机随系统启动 virsh autostart —disable Name //查看正在运行的KVM虚拟机 [root@kvm-node1 ~]# virsh list //查看全部KVM虚拟机 [root@kvm-node1 ~]# virsh list --all //启动KVM虚拟机 [root@kvm-node1 ~]# virsh start name //关闭KVM虚拟机 [root@kvm-node1 ~]# virsh shutdown name //强制关闭KVM虚拟机 [root@kvm-node1 ~]# virsh destroy name //挂起KVM虚拟机 [root@kvm-node1 ~]# virsh suspend name //恢复挂起的虚拟机 [root@kvm-node1 ~]# virsh resume name //编辑KVM虚拟机的xml配置文件 [root@kvm-node1 ~]# virsh edit name //删除建立的KVM虚拟机 [root@kvm-node1 ~]# virsh undefine name
KVM
虚拟机中有两种磁盘格式:
raw格式: 直接占用物理磁盘, 写入快, 性能优, 但占用空间
Qcow2格式: 使用多少占多少磁盘, 支持压缩、快照、镜像
注意:raw不支持快照, Qcow2支持快照, 但二者文件类型是能够相互间转换
不管磁盘是raw qcow2
格式, 扩展思路以下
1.新添加一块磁盘加入至须要扩容的虚拟主机
2.使用lvm逻辑卷管理方式进行扩展
1.查看当前KVM
虚拟机所使用的虚拟磁盘
[root@kvm-node1 ~]# virsh domblklist centos7u4-node1 Target Source ------------------------------------------------ vda /data/centos7u4-node1.qcow2
2.建立一块qcow2
虚拟磁盘
[root@kvm-node1 ~]# qemu-img create -f qcow2 /data/centos7u4-node1-disk2.qcow2 10G
3.在线添加虚拟磁盘
//在线添加 [root@kvm-node1 ~]# virsh attach-disk centos7u4-node1 /data/centos7u4-node1-disk2.qcow2 vdb --cache=none --subdriver=qcow2 Disk attached successfully //查看新增磁盘状态 [root@kvm-node1 ~]# virsh domblklist centos7u4-node1 Target Source ------------------------------------------------ vda /data/centos7u4-node1.qcow2 vdb /data/centos7u4-node1-disk2.qcow2 //第二种扩容方式方式, 新增以下配置 [root@kvm-node1 ~]# virsh edit centos7u4-node1 <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/data/centos7u4-node1-disk2.qcow2'/> <target dev='vdb' bus='virtio'/> </disk>
4.经过vnc
链接KVM
虚拟机进行磁盘扩容
5.扩容步骤以下
[root@localhost ~]# pvcreate /dev/vdb [root@localhost ~]# vgextend /dev/vdb centos [root@localhost ~]# lvextend -l +100%FREE /dev/centos/root [root@localhost ~]# xfs_growfs /dev/centos/root
1.查看磁盘格式raw
格式须要转换成qcow2
[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.raw image: /data/centos7u4-node1.raw file format: raw virtual size: 10G (10737418240 bytes) disk size: 1.2G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
2.必须关闭虚拟机进行磁盘转换
[root@kvm-node1 ~]# virsh shutdown centos7u4-node1 [root@kvm-node1 ~]# qemu-img convert -f raw /data/centos7u4-node1.raw -O qcow2 /data/centos7u4-node1.qcow2 //convert 将磁盘文件转换为指定格式的文件 //-f 指定须要转换文件的文件格式 //-O 指定要转换的目标格式 //转换完成后,将新生产一个目标映像文件,原文件保存
3.修改KVM虚拟机配置文件配置文件
[root@kvm-node1 ~]# virsh edit centos7u4-node1 <driver name='qemu' type='qcow2'/> <source file='/data/centos7u4-node1.qcow2'/>
4.对虚拟机当前进行快照拍摄
[root@kvm-node1 ~]# virsh snapshot-create centos7u4-node1 Domain snapshot 1523494907 created
5.查看虚拟机快照
[root@kvm-node1 ~]# virsh snapshot-list centos7u4-node1 Name Creation Time State ------------------------------------------------------------ 1523494907 2018-04-11 21:01:47 -0400 running //检查当前虚拟机最新快照版本 [root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|less //快照xml文件存放路径 [root@kvm-node1 ~]# ls /var/lib/libvirt/qemu/snapshot/centos7u4-node1/ 1523494907.xml 1523495036.xml
6.恢复快照
[root@kvm-node1 ~]# virsh snapshot-revert centos7u4-node1 1523494907 //确认恢复版本正确 [root@kvm-node1 ~]# virsh snapshot-current centos7u4-node1|grep "1523494907" <name>1523494907</name> <creationTime>1523494907</creationTime>
7.删除快照
[root@kvm-node1 ~]# qemu-img info /data/centos7u4-node1.qcow2 image: /data/centos7u4-node1.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.8G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1523494907 282M 2018-04-11 21:01:48 00:16:25.489 2 1523495036 282M 2018-04-11 21:03:56 00:18:29.210 Format specific information: compat: 1.1 lazy refcounts: false //删除最近一个快照 [root@kvm-node1 ~]# virsh snapshot-delete centos7u4-node1 1523495036 Domain snapshot 1523495036 deleted
1.服务端安装x11
图形界面工具
[root@kvm-node1 ~]# yum install -y xorg-x11-font-utils xorg-x11-server-utils xorg-x11-utils xorg-x11-xauth xorg-x11-xinit
2.服务端开启SSH
隧道转发X11
[root@kvm-node1 ~]# vim /etc/ssh/sshd_config X11Forwarding yes [root@kvm-node1 ~]# systemctl restart sshd
3.Windows
客户端使用Xshell
链接KVM
宿主机
第一步: 链接KVM宿主机, 修改其属性
第二步: 使用xming
接受SSH X11
图形转发
注意: 须要下载对应工具Xming, 而后启动
第三步:从新链接KVM
宿主机, 执行virt-manager
第四步:安装中文字符,解决界面乱码问题
[root@kevin ~]# yum install -y dejavu-lgc-sans-fonts [root@kevin ~]# yum groupinstall -y "Fonts" //调整字体为中文 [root@kvm-node1 ~]# export LANG=zh_CN.UTF-8
注意:
1.若是使用GUI界面Linux则无需安装便可使用virt-manager
2.若是是MAC笔记本, 仅能使用Crt开启X11图形转发, 同时必须下载XQuartz支持转发
1.安装 WebVirtMgr
WebVirtMgr官方参考手册
[root@kvm-node1 ~]# yum -y install http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm [root@kvm-node1 ~]# yum -y install gcc python-devel git python-pip libvirt-python libxml2-python python-websockify supervisor nginx novnc [root@kvm-node1 ~]# pip install numpy
2.安装要求和安装Python
的Django
环境
[root@kvm-node1 ~]# git clone git://github.com/retspen/webvirtmgr.git [root@kvm-node1 ~]# cd webvirtmgr [root@kvm-node1 webvirtmgr]# pip install -r requirements.txt [root@kvm-node1 webvirtmgr]# ./manage.py syncdb //用户信息,回车 You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'root'): Email address: 552408925@qq.com Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 6 object(s) from 1 fixture(s) //添加额外的超级用户 [root@kvm-node1 webvirtmgr]# ./manage.py collectstatic
3.配置Nginx
[root@kvm-node1 webvirtmgr]# cd .. [root@kvm-node1 ~]# mv webvirtmgr /var/www/ //在/etc/nginx/conf.d目录中添加webvirtmgr.conf [root@kvm-node1 ~]# vim /etc/nginx/conf.d/webvirtmgr.conf server { listen 80 default_server; server_name $hostname; #access_log /var/log/nginx/webvirtmgr_access_log; location /static/ { root /var/www/webvirtmgr/webvirtmgr; expires max; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 1024M; } } //注意: 注释/etc/nginx/conf/nginx.conf文件中Server段 //设定目录权限 [root@kvm-node1 ~]# chown -R nginx:nginx /var/www/webvirtmgr //启动nginx,并将其加入开机自启 [root@kvm-node1 ~]# systemctl start nginx [root@kvm-node1 ~]# systemctl enable nginx
4.安装配置Supervisor
//建立文件/etc/supervisord.d/webvirtmgr.ini如下内容 [root@kvm-node1 ~]# vim /etc/supervisord.d/webvirtmgr.ini [program:webvirtmgr] command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py directory=/var/www/webvirtmgr autostart=true autorestart=true logfile=/var/log/supervisor/webvirtmgr.log log_stderr=true user=nginx [program:webvirtmgr-console] command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console directory=/var/www/webvirtmgr autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webvirtmgr-console.log redirect_stderr=true user=nginx
5.启动supervisord
并加入开机自启
[root@kvm-node1 ~]# systemctl start supervisord.service [root@kvm-node1 ~]# systemctl enable supervisord.service
6.配置ssh
认证SSH官方参考资料
[root@kvm-node1 ~]# su - nginx -s /bin/bash -bash-4.2$ ssh-keygen -bash-4.2$ touch ~/.ssh/config -bash-4.2$ echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config -bash-4.2$ chmod 0600 ~/.ssh/config -bash-4.2$ ssh-copy-id root@localhost