环境描述:
操作系统 RedHat 6.4 x64 minimal 安装
LVS_master 192.168.0.220 LVS_backup 192.168.0.221 LVS_vip 192.168.0.222
WEB_223 192.168.0.223 WEB_224 192.168.0.224 GATEWAY 192.168.0.1
一、配置 LVS_master 主机
1、下载软件包
Ipvsadm http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
Keepalived http://www.keepalived.org/software/keepalived-1.2.10.tar.gz
2、安装服务依赖包
[root@LVS_master ~]# yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt-devel popt-static
3、编译安装软件
安装 ipvsadm
[root@LVS_master ~]# cd /usr/local/src/
[root@LVS_master src]# tar zxf ipvsadm-1.26.tar.gz
[root@LVS_master src]# cd ipvsadm-1.26
[root@LVS_master ipvsadm-1.26]# make && make install
安装 keepalived
[root@LVS_master ~]# cd /usr/local/src/
[root@LVS_master src]# tar zxf keepalived-1.2.10.tar.gz
[root@LVS_master src]# cd keepalived-1.2.10
[root@LVS_master keepalived-1.2.10]# ./configure --prefix=/usr/local/keepalived
[root@LVS_master keepalived-1.2.10]# make && make install
4、将 keepalived 配置为系统服务 方便管理
[root@LVS_master ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@LVS_master ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@LVS_master ~]# mkdir /etc/keepalived
[root@LVS_master ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@LVS_master ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
5、编辑 keepalived 主配置文件 keepalived.conf
[root@LVS_master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
888@163.com ## 故障接收联系人
}
notification_email_from 888@163.com ## 故障发送人
smtp_server smtp.163.com ## 发送邮件地址
smtp_connect_timeout 30
router_id LVS_MASTER ## 在备机上要改为 LVS_BACKUP
}
vrrp_instance VI_1 { ## VIP 配置
state MASTER ## 备机上改为 BACKUP
interface eth0
virtual_router_id 51 ## 虚拟路由标识 主从一至
priority 100 ## 备机改为90
advert_int 1
authentication {
auth_type PASS
auth_pass abcd ## 主从认证密码必须保持一至
}
virtual_ipaddress {
192.168.0.222 ## 虚拟IP 如有多个换行接着写
}
}
virtual_server 192.168.0.222 80 { ## 基于web的虚拟IP
delay_loop 6 ## 检查真实服务器时间 s
lb_algo rr ## 调度算法 rr 轮训
lb_kind DR ## LVS 负载均衡模式为DR
nat_mask 255.255.255.0
persistence_timeout 50 ## 同IP 50秒内重复连接会分配到同一台真实机
protocol TCP ## 使用 TCP 协议检查 realserver 状态
real_server 192.168.0.223 80 { ## 第一台真实web服务器
weight 1 ## 节点权重值
TCP_CHECK { ## 健康检查方式
connect_timeout 3 ## 连接超时
nb_get_retry 3 ## 重试次数
delay_before_retry 3 ## 重试间隔
}
}
real_server 192.168.0.224 80 { ## 第二台真实web服务器
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
6、启动 keepalived 服务并设置防火墙
[root@LVS_master ~]# service keepalived start
[root@LVS_master ~]# chkconfig --add keepalived
[root@LVS_master ~]# chkconfig --level 35 keepalived on
[root@LVS_master ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@LVS_master ~]# service iptables save
[root@LVS_master ~]# service iptables reload
7、使用 ip addr 可以看到现在VIP绑定在了LVS_master 的 eth0 网卡上
[root@LVS_master ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:13:e9:66 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.220/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.222/32 scope global eth0
inet6 fe80::20c:29ff:fe13:e966/64 scope link
valid_lft forever preferred_lft forever
二、配置 LVS_backup 主机
## backup 上的操作步骤跟 master 上基本一样,需要更改的地方为真实IP 、主机名和 keepalived.conf 这个文件的这三个值 router_id、state、priority
三、在两台WEB真实服务器上编写启动脚本
[root@WEB_223 ~]# vim /etc/init.d/realserver.sh
VIP=192.168.0.222
. /etc/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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
echo "LVS RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
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 "LVS RealServer Stoped OK"
;;
*)
echo "Usage: $0 (start|stop)"
exit 1
esac
稍微处理一下别的东西
[root@WEB_223 ~]# chmod +x /etc/init.d/realserver.sh
[root@WEB_223 ~]# /etc/init.d/realserver.sh start
LVS RealServer Start OK
[root@WEB_223 ~]# echo "/etc/init.d/realserver.sh start" >> /etc/rc.local
[root@WEB_223 ~]# yum -y install httpd
[root@WEB_223 ~]# echo "welcome to WEB1" > /var/www/html/index.heml ## 第二台WEB 改为WEB2
[root@WEB_223 ~]# service httpd start
[root@WEB_223 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@WEB_223 ~]# service iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定]
[root@WEB_223 ~]# service iptables reload
四、测试
访问 http://192.168.0.222 他会循环显示 WEB1 WEB2 切断主空机或者备控机访问不会断
可以通过命令显示负载状态
[root@LVS_master ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.222:80 rr
-> 192.168.0.223:80 Route 1 0 9
-> 192.168.0.224:80 Route 1 0 10
但是咱们这里的话,你刷新页面他是不会轮询的 、哈哈,
因为一个参数 persistence_timeout 50 ## 同IP 50秒内重复连接会分配到同一台真实机 对就是他! 注释掉就可以轮询了,改这个值是不生效的,也不知道为什么 !