KVM实现haproxy+keepalived高可用调度分离小架构

1.环境准备

宿主机:host1 192.168.10.116
                                    host2 192.168.10.111
客户虚拟机:guest-host1 23.23.23.101  httpd  #充当后端服务器
                                        guest-host2 23.23.23.102  httpd  #充当后端服务器
                                        guest-host3 23.23.23.107  192.168.10.200  haproxy+keepalived  #前端调度及高可用
                                        guest-host4 23.23.23.108  192.168.10.201  haproxy+keepalived  #前端调度及高可用
宿主机host1网桥:br0 23.23.23.200  #内网
                                                         br1 192.168.10.116  #外网
宿主机host2网桥:br0 23.23.23.201 #内网
                                                         br1 192.168.10.111  #外网

2.网络环境搭建,以宿主机host1为例

1)将eth0和eth1网卡绑定到bond0上

[root@centos7 network-scripts]#vim ifcfg-bond0
OOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"  #每间隔100毫秒心跳检测
BRIDGE=br0  #绑定的内网网桥br0上

2)将eth2和eth3网卡绑定到bond1上

root@centos7 network-scripts]#vim ifcfg-bond1
OOTPROTO=static
NAME=bond1
DEVICE=bond1
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"  #每间隔100毫秒心跳检测
BRIDGE=br1  #绑定的内网网桥br1上

3)分别配置eth0和eth1网卡指向bond0上

[root@centos7 network-scripts]#vim ifcfg-eth0
OOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

[root@centos7 network-scripts]#vim ifcfg-eth1
OOTPROTO=static
NAME=eth1
DEVICE=eth1
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes

4)分别配置eth2和eth3网卡指向bond0上

[root@centos7 network-scripts]#vim ifcfg-eth2
OOTPROTO=static
NAME=eth2
DEVICE=eth2
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

[root@centos7 network-scripts]#vim ifcfg-eth3
OOTPROTO=static
NAME=eth3
DEVICE=eth3
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond1
USERCTL=no
SLAVE=yes

5)分别配置网桥br0和br1

[root@centos7 network-scripts]#vim ifcfg-br0
TYPE=Bridge  #指明桥接网卡
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=23.23.23.200    #桥接网卡地址
NETMASK=255.255.0.0

[root@centos7 network-scripts]#vim ifcfg-br1
TYPE=Bridge
BOOTPROTO=none
NAME=br1
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.10.116
NETMASK=255.255.255.0
GATEWAY=192.168.10.1

6)重启网络使网卡生效

[root@centos7 network-scripts]#systemctl restart network
[root@centos7 network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
             valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
             valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:39 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:39 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:4d brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:4d brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:39 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::20c:29ff:fe16:5639/64 scope link 
             valid_lft forever preferred_lft forever
7: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1 state UP group default qlen 1000
        link/ether 00:0c:29:16:56:4d brd ff:ff:ff:ff:ff:ff
        inet6 fe80::20c:29ff:fe16:564d/64 scope link
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 00:0c:29:16:56:39 brd ff:ff:ff:ff:ff:ff
        inet 23.23.23.200/16 brd 23.23.255.255 scope global br0
             valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe16:5639/64 scope link 
             valid_lft forever preferred_lft forever
9: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 00:0c:29:16:56:4d brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.116/24 brd 192.168.10.255 scope global br1
             valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe16:564d/64 scope link 
             valid_lft forever preferred_lft forever

7)在以相同的网络搭建方式搭建宿主机host2,此处省略

3.分别在宿主机host1和宿主host2上搭建KVM虚拟化环境,并创建虚拟机,以host1为例

1)启动宿主机之前必选勾选上虚拟化功能

KVM实现haproxy+keepalived高可用调度分离小架构

2)根据机器自身条件分配的内存和磁盘空间越大越好,为跑多个虚拟机做准备![]

KVM实现haproxy+keepalived高可用调度分离小架构

3)查看cpu是否支持虚拟化等指令集功能,如vmx

[root@centos7 network-scripts]#cat /proc/cpuinfo
……
……
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm tpr_shadow vnmi ept vpid tsc_adjust arat
……
……

4)KVM虚拟化模块是内置在linux的内核中的,所以无需下载此模块包,只需安装KVM相关的命令包

 [root@centos7 ~]# yum install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install -y                        
                                                         qemu-kvm qemu-kvm-tools     #模拟轻量级IO设备,如鼠标、键盘等 
                                                         libvirt       #启动虚拟机的管理主程序
                                                         virt-manager        #web界面的管理程序,建立远程连接
                                                         virt-install         #一组命令,利用virt-install安装虚拟机

5)启动虚拟机的管理主程序 libvirtd

[root@centos7 ~]# systemctl  start   libvirtd
[root@centos7 ~]# systemctl  enable  libvirtd

6)本地主机虚拟化网卡,可以访问外部网络,外部网络不可以访问此虚拟网卡,是NAT模式

 [root@centos7 ~]# ifconfig  virbr0
 flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500        inet 192.168.122.1  netmask 
255.255.255.0  broadcast 192.168.122.255        ether 52:54:00:89:c5:75  txqueuelen 1000  
……
 #virbr0:当启动libvirted会生成的内置虚拟网卡,相当于一个内置路由器.

7)创建虚拟机磁盘镜像文件

 [root@centos7 ~]# qemu-img create -f raw /var/lib/libvirt/images/centos-only.raw 5G
                     #磁盘格式为raw,存放的路径为默认路径,磁盘名称为centos-only.raw 大小为5G的磁盘

8)xshell远程连接上传centos镜像文件

KVM实现haproxy+keepalived高可用调度分离小架构

9)上传成功

KVM实现haproxy+keepalived高可用调度分离小架构

10)安装虚拟机

 [root@centos7 ~]# virt-install  --virt-type kvm --name centos7-only  --memory 600 --vcpus 2 
--cdrom=/data/centos-iso/CentOS-7-x86_64-Minimal-1511.iso --disk path=/var/lib/libvirt/images/centos.raw 
--network network=default  --graphics  vnc,listen=0.0.0.0 --noautoconsole
选项说明:
--virt-type #指定虚拟化类型
--name # 命名虚拟机的名称
 --memory #虚拟机运行内存大小
--vcpus #虚拟机cpu个数
-cdrom #指定镜像文件路径
--disk path 指定磁盘文件路径
--network network=default #指定网络类型为默认模式,默认是NAT模式
--graphics  vnc,listen=0.0.0.0 开启图形化,支持远程连接VNC,以及监听所有端口
--noautoconsole  开机不自动连接控制台

11)刚开始安装时迅速连接虚拟机的控制界面进行手动安装,有两种方法

方法一:使用VNC远程连接进行控制
KVM实现haproxy+keepalived高可用调度分离小架构
方法二:使用命令virt-manager进入控制模拟图形窗口进行安装
[root@centos7 ~]# virt-manager
设置内核参数net.ifnames=0 biosdevname=0 来统一网卡命名eth*
KVM实现haproxy+keepalived高可用调度分离小架构
安装成功重启
KVM实现haproxy+keepalived高可用调度分离小架构
点击虚拟机详情
KVM实现haproxy+keepalived高可用调度分离小架构
查看已安装的虚拟机即运行状态
KVM实现haproxy+keepalived高可用调度分离小架构

11)也可以在virt-manager管理端直接创建新的虚拟机

选择创建新的虚拟机
KVM实现haproxy+keepalived高可用调度分离小架构
选择本地安装
KVM实现haproxy+keepalived高可用调度分离小架构
选择镜像文件路径
KVM实现haproxy+keepalived高可用调度分离小架构
配置虚拟机的运行内存和CPU数量
KVM实现haproxy+keepalived高可用调度分离小架构
点击选择定制存储磁盘,也可以选择创建一个新的镜像磁盘
KVM实现haproxy+keepalived高可用调度分离小架构
选择事先用命令qemu-install新创建的磁盘镜像文件centos7-bak.raw
KVM实现haproxy+keepalived高可用调度分离小架构
配置好网卡,点击确认安装完成虚拟机的安装
KVM实现haproxy+keepalived高可用调度分离小架构
12)还可以选择克隆一个虚拟机
鼠标右键选择clone
KVM实现haproxy+keepalived高可用调度分离小架构
点击clone进行克隆安装
KVM实现haproxy+keepalived高可用调度分离小架构
查看克隆后的虚拟机
KVM实现haproxy+keepalived高可用调度分离小架构

4.分别在宿主机host1和宿主host2上配置后端虚拟机httpd服务和前端虚拟机调度服务的网络IP,以host1为例
启动虚拟机两种方式:
方式一:安装电源管理包实现命令行启动或关闭虚拟机
yum install acip -y #安装电源管理包
virsh list --all #显示所有已创建的虚拟机并显示运行的状态
virsh start cento7-only #开启指定的虚拟机
virsh shutdown cento7-only #关闭指定的虚拟机
方式二:直接使用virt-manager在图形模拟界面操作虚拟机

1)centos7-only虚拟机作为geust-host1后端httpd服务并配置网络IP
选择Detail查看更改此虚拟机的硬件配置
KVM实现haproxy+keepalived高可用调度分离小架构
选择连接到本地内网桥接网卡br0,网卡设备模式为virtio半虚拟化模式
KVM实现haproxy+keepalived高可用调度分离小架构
在配置网卡eth0绑定静态Ip
KVM实现haproxy+keepalived高可用调度分离小架构
KVM实现haproxy+keepalived高可用调度分离小架构
网卡配置好后重启网络,查看geust-host1的ip地址是否生效
KVM实现haproxy+keepalived高可用调度分离小架构
定义后端服务httpd的页面访问

[root@centos7 ~]# echo 23.23.23.101 > /var/www/html/index.html

2)centos7-only-clone虚拟机作为geust-host3前端调度服务并配置网络IP

将其中一个网卡连接到内网网桥br0
KVM实现haproxy+keepalived高可用调度分离小架构
另一个网卡连接到外网网桥br1
KVM实现haproxy+keepalived高可用调度分离小架构

配置好haproxy和keepcalived等配置文件实现高可用调度
绑定一个虚拟VIP 192.168.10.230

5.两台宿主机搭建完成之后再进行浏览访问测试实现高可用调度

第一次访问
KVM实现haproxy+keepalived高可用调度分离小架构
第二次访问
KVM实现haproxy+keepalived高可用调度分离小架构