您的位置:首页 > 其它

用 KVM 搭建web集群实验笔记 - LVS和Keeplived负载均衡(DR模式)

2016-09-17 01:19 666 查看
LVS和Keeplived负载均衡(DR模式)

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS项目介绍http://www.linuxvirtualserver.org/zh/lvs1.html。

LVS有三种模式:NAT模式、IP隧道模式(VS-TUN)和直接路由模式(VS-DR),本实验只是涉及直接路由模式。

keepalived是集群管理中保证集群高可用的一个服务软件,简而言之,它的主要功能检查后端服务器 ( real server)的健康情况,如后端服务器出现故障,则将它隔离,恢复后将它加入。keepalived运行在 LVS之上,提高系统的可用性。

负载均衡主服务器 ipvs01 192.168.122.21

负载均衡备服务器 ipvs02 192.168.122.22

web服务器1           web01 192.168.122.26

web服务器2          web02 192.168.122.27

虚拟IP                     vip       192.168.122.20

1. 软件安装

  centOS6.6可直接用yum 安装这两个软件

在ipvs01和ipvs02上安装,未特殊说明的部分,表示两台机器都要安装,且安装配置完全一样。

yum -y install ipvsadm
yum install keepalived

检查ipvsadm配置

[root@ipvs01 keepalived]# modprobe -l|grep ipvs
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko


用yum安装的ipvsadm有一个/etc/init.d/ipvsadm脚本,可以用service命令来启停,可以用chkconfig命令设置自启动,

用yum安装的keepalived有一个/etc/init.d/keepalived脚本,可以用service命令来启停,可以用chkconfig命令设置自启动,

chkconfig ipvsadm on

chkconfig keepalived on

检查

[root@ipvs01 init.d]# chkconfig --list |grep -E 'ipvsadm|keepalived'
ipvsadm        	0:关闭	1:关闭	2:关闭	3:关闭	4:关闭	5:关闭	6:关闭
keepalived     	0:关闭	1:关闭	2:启用	3:启用	4:启用	5:启用	6:关闭
[root@ipvs01 init.d]#
2.   开启路由转发

编辑文件

vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

保存文件,执行命令,使之生效。

sysctl -p

用命令检查,返回1表示开启的路由转发

cat /proc/sys/net/ipv4/ip_forward

3.配置ipvs01和ipvs02

ipvs01为主机,在ipvs01配置/etc/keepalived/keepalived.conf

其中persistence_timeout会影响到轮询,在这个时间总是分发到同一台机器。

[root@ipvs01 keepalived]# pwd
/etc/keepalived
[root@ipvs01 keepalived]# more keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
admin@testing.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.20
}
}

virtual_server 192.168.122.20 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP

real_server 192.168.122.26 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.122.27 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在备机ipvs02上配置/etc/keepalived/keepalived.conf, 其中router_id在要唯一, state为BACKUP,priority 不一样略小,其他相同配置。

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_SLAVE
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.20
}
}

4.配置web01和web02(realserver)

编辑/etc/init.d/realserver文件,用chmod +x /etc/init.d/realserver 设置可执行权限 用chkconfig realserver on 设置自启动

#!/bin/bash

#chkconfig: 2345 79 20

#description:realserver

SNS_VIP=192.168.122.20

. /etc/init.d/functions

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

/sbin/route add -host $SNS_VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP >/dev/null 2>&1

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServer Stoped"

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit 0
用yum install httpd 和 yum install php 安装 apache和php
在web01编辑文件 /var/www/html/index.php

[root@web01 html]# more index.php
<?php
echo "===========================</br>";
echo " This is web01.</br>";
echo "============================</br>";
echo "</br>";

//phpinfo();
?>
[root@web01 html]#
在web02编辑文件 /var/www/html/index.php
[root@web02 html]# more index.php
<?php
echo "===========================</br>";
echo " This is web02.</br>";
echo "============================</br>";
echo "</br>";

//phpinfo();
?>

[root@web02 html]#
在浏览输入http://192.168.122.20进行验证。注意参数persistence_timeout的影响,开始以为不轮询分配,原来是两次刷新浏览器的时间小于persistence_timeout。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: