CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
一、系统环境实验拓扑实验环境:Vmware 9.01 + Windows 8 x64 企业版+8G内存虚拟机步骤:1、安装一台CentOS 6.3 x64主机,内存为1GB,网络为NAT模式,注意检查Vmware中EDIT菜单下Virtual Network Editor中VMnet82、加电,安装系统。基础知识了,不再多说,注意:选择英文而不要选择中...
一、系统环境
实验拓扑
实验环境:
Vmware 9.01 + Windows 8 x64 企业版+8G内存
虚拟机步骤:
1、安装一台CentOS 6.3 x64主机,内存为1GB,网络为NAT模式,注意检查Vmware中EDIT菜单下Virtual Network Editor中VMnet8
2、 加电,安装系统。基础知识了,不再多说,注意:选择英文而不要选择中文,选择是Basic Server模式,系统名称:LVS-MASTER
3、安装系统后,用root用户登录进去,执行 ifconfig查看下网络情况,发现:
没有看到其物理网卡,我们需要想办法解决它。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
按下面的样子进行修改之,设置随系统启动,IP为静态地址而不是DHCP,IP地址、掩码、网关、DNS等信息
重启网络服务 service network restart
测试一下PING,看看是不是能PING通BAIDU,对了,为什么上面GATEWAY是192.168.9.2,是因为在虚拟机中VMnet8中指定的IP。
在lvs-master与lvs-backup中均设置VIP 192.168.9.200
1.ifconfig查看当前活动网卡。如:eth0
2.执行下面命令 进行vip添加
ifconfig eth0:0 192.168.9.200 netmask 255.255.255.0 up
ifconfig #查看是否生效
ping 192.168.9.200 #测试
3.修改配置文件,使配置在主机重启后自动生效.
cd /etc/sysconfig/network-script/
cp ifcfg-eth0 ifcfg-eth0:0
vi ifcfg-eth0:0
# IntelCorporation 82545EM Gigabit Ethernet Controller (Copper)
DEVICE=eth0:0 ---->子接口名
HWADDR=00:0C:29:45:62:3B
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.9.200
NETMASK=255.255.255.0
GATEWAY=192.168.9.2
重启网络生效:这一步很重要!!!
service network restart
6.写在/etc/rc.local里进行开机自动设置
开始克隆多台主机,组成测试环境:
关闭掉主机 init 0,然后在虚拟中右键LVS-MASTER,MANAGER-CLONE,注意选择Create a full clone,机器名输入LVS-BACKUP,大约三十秒时间可以克隆好。
给LVS-BACKUP主机加电,系统正常启动
我们需要做两件事,
一是主机名修改为LVS-BACKUP,这个容易
vi /etc/sysconfig/network
修改 LVS-MASTER为LVS-BACKUP就可以了。然后 reboot一下系统就发现系统名称修改完成了。
二是修改系统IP
1、删除 /etc/udev/rules.d/70-persistent-net.rules 后重启机器。70-persistent-net.rules这个文件确定了网卡与MAC地址的绑定,导入已经存在的虚拟机后,但网卡的MAC地址发生了变化,所以导致系统认为网络设备不存在。
2、经过这样的处理后eth0还不能正常启动,需要将 /etc/udev/rules.d/70-persistent-net.rules 文件最后的修改"eth1"为"eth0",
然后将/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC直接删除。
再重启机器,eth0可以正常启动了。
确定执行 ifconfig命令后能看到 eth0设备,然后继续下面的动作:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
将系统IP修改为192.168.9.202
执行一下 service network restart,现在测试一下ping www.baidu.com,看看是不是能PING通。
重复上面的步骤,将WEB1和WEB2两台主机也克隆完成,IP分别是192.168.9.203,192.168.9.204
网络配置通过了,下面可以使用Securecrt进行网络连接设置了。
=====================================================================================
系统平台:CentOS 6.3
Kernel:2.6.32-279.el6.i686
查看内核方法:cat /proc/version,为啥重点说明下这里呢?因为下面有个步骤是创建软连接到这个内核的目录上,所以重点说明下为啥下面指定的是这个目录。
LVS版本:ipvsadm-1.26
keepalived版本:keepalived-1.2.4
二、安装负载均衡服务
0、安装LVS前系统需要安装
yum -y install openssl-devel lftplibnl* popt* libnl* libpopt* gcc*
1、在两台Director Server上分别配置LVS+Keepalived
------------- -------------LVS install --------------------------
cd /usr/src
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
如果已经创建了软连接,那么删除之: rm /usr/src/linux 注意不能带最后的/,否则无法删除。
ln -s /usr/src/kernels/2.6.32-279.el6.x86_64//usr/src/linux/
tar zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install
------------- -------------Keepalived install --------------------------
cd ..
wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
tar zxvf keepalived-1.2.4.tar.gz
cd keepalived-1.2.4
./configure
make && make install
######### 将keepalived做成启动服务,方便管理##########
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
service keepalived start
2、开启路由转发
vi /etc/sysctl.conf
修改下面的值,从0修改到1:
net.ipv4.ip_forward = 1
刷新系统变量,使系统文件变更马上生效
sysctl -p
3、配置Keepalived
vi /etc/keepalived/keepalived.conf
输入 :.,$d 删除所有内容,
在LVS-MASTER中输入以下内容:
! Configuration File for keepalived
global_defs {
notification_email {
king_819@163.com
}
notification_email_from king_819@163.com
smtp_server smtp.163.com
#smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface eth0
lvs_sync_daemon_interface eth0
virtual_router_id 51
priority 100 # 备份服务上将100改为90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.200
#(如果有多个虚拟VIP,继续换行填写.)
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.203 80 {
weight 100 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.204 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
priority 100 # 备份服务上将100改为90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.200
#(如果有多个虚拟VIP,继续换行填写.)
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.203 80 {
weight 100 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.204 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在LVS-BACKUP中输入以下内容:
! Configuration File for keepalived
global_defs {
notification_email {
king_819@163.com
}
notification_email_from king_819@163.com
smtp_server smtp.163.com
#smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP #备份服务器上将MASTER改为BACKUP
interface eth0
lvs_sync_daemon_interface eth0
virtual_router_id 51
priority 90 #备份服务上将100改为90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.200
#(如果有多个VIP,继续换行填写.)
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.203 80 {
weight 100 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.204 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
priority 90 #备份服务上将100改为90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.200
#(如果有多个VIP,继续换行填写.)
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.203 80 {
weight 100 #(权重)
TCP_CHECK {
connect_timeout 10 #(10秒无响应超时)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔10秒查询realserver状态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的连接60秒内被分配到同一台realserver)
protocol TCP #(用TCP协议检查realserver状态)
real_server 192.168.9.204 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置keepalived自启动
chkconfig --level 0123456 keepalived on
查看自启动状态
chkconfig --list keepalived
三、在WEB服务器上执行的如下
在WEB1和WEB2机器上编辑如下文件
vi /root/lvs_real.sh
#!/bin/bash
# description: Config realserver
#Written by : http://kerry.blog.51cto.com
SNS_VIP=192.168.9.200
/etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/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)
/sbin/ifconfig lo:0 down
/sbin/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
赋给执行权限
chmod 755 /etc/rc.d/init.d/functions 别人的配置文档中没这个步骤,我不知道为什么总是说执行到这句时没有权限,所以我添加了执行权限
chmod 755 /root/lvs_real.sh
/root/lvs_real.sh start
添加自动启动
echo "/root/lvs_real.sh start" >> /etc/rc.local
===================================================================================
关闭iptables,因为CentOS 6.3 X64默认是开启IPTABLES的,这样我们不方便测试这个实验,所以暂时采用关闭IPTABLES的办法,以后需要时再测试如何使用IPTABLES的规则。
配置iptables关闭自启动
chkconfig --level 0123456 iptables off
查看自启动状态
chkconfig --list iptables
将四台机器的IPTABLES全部关闭,防止出现其它问题。
光是这样还是不行的,因为不重启不能停止掉iptables,所以在四台上执行如下命令:
service iptables stop
===================================================================================
4、在2台WEBSERVER中分别配置HTTP,这里使用了一个简单的WEB SERVER:HTTPD这个软件包,当然也可以使用APACHE或者TOMCAT。
在192.168.9.203和192.168.9.204上执行如下命令:
yum -y install httpd
cd /var/www/html/
vi index.html
-----------------------------
192.168.9.203上内容:
<h1>WEB1/192.168.9.203</h1>
192.168.9.204上内容:
<h1>WEB1/192.168.9.204</h1>
-----------------------------
/etc/init.d/httpd start
结果发现出错无法启动:
我们修改一下:
vi /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
再次启动:
/etc/init.d/httpd restart
设定开机启动httpd
chkconfig --level 0123456 httpd on
另一台机器配置一样,过程略。
在两台LVS服务器上都要启动keepalvied,这点十分重要,否则不能正常查看到下面的界面:
service keepalived restart
四、测试
####高可用性测试####
模拟故障,将CentOS-LVS_MASTER上的keepalived服务停掉,然后观察CentOS-LVS_BACKUP上的日志,信息如下
从日志中可知,主机出现故障后,备机立刻检测到,此时备机变为MASTER角色,并且接管了主机的虚拟IP资源,最后将虚拟IP绑定在etho设备上。
将CentOS-LVS_MASTER 上的keepalived服务开启后,CentOS-LVS_BACKUP的日志状态。
从日志可知,备机在检测到主机重新恢复正常后,释放了虚拟IP资源重新成为BACKUP角色
####故障切换测试####
故障切换是测试当某个节点出现故障后,Keepalived监制模块是否能及时发现然后屏蔽故障节点,同时将服务器转移到正常节点来执行。
将WEB2节点服务停掉,假设这个节点出现故障,然后主、备机日志信息如下
从以上可以看出,Keepalived监控模块检测到192.168.9.204这台主机出现故障后,将WEB2从集群系统中剔除掉了。 此时访问http://192.168.9.200只能看到WEB1了)
重新启动WEB2节点的服务,日志信息如下:
Keepalived监控模块检测到192.168.9.204这台主机恢复正常后,又将此节点加入集群系统中,再次访问就可以访问到WEB2页面了)
更多推荐
所有评论(0)