53

KVM实现haproxy+keepalived高可用调度分离小架构-何1991的博客

 5 years ago
source link: https://blog.51cto.com/14234542/2410959
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
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高可用调度分离小架构

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK