lvs+keepalived(DR模式)
(一) 网络架构1
2
3
4
5
6
7
8
9
D1: (LVS_MASTER)
eth1:192.168.1.111
D2:(LVS_BACKUP)
eth2: 192.168.1.113
R1: (web_server1)
eth1:192.168.1.214
R2: (web_server2)
eth1:192.168.1.215
VIP:192.168.1.200 (网站对外提供的虚拟ip地址,域名是解析到这个ip地址)
(二) 安装keepalived (D1,D2服务器都要安装keepalived)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# ls /usr/src/kernels/ (如果发现没有2.6.32-504.3.3.el6.x86_64这种文件是因为系统缺少包文件 #yum -y install kernel-devel 即可解决 )
# mkdir -p /data/software
# mkdir -p /data/apps
# mkdir -p /data/apps/keepalived# 创建安装目录
# cd /data/software/
# tar -zxvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
#./configure --sysconf=/data/conf/ --prefix=/data/apps/keepalived/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5PAE-i686# 如果出现!!! OpenSSL is not properly installed on your system. !!! 则执行yum -y install openssl-devel
# make
# make install
# /data/apps/keepalived/sbin/keepalived --help(说明安装完成)
Usage: /data/apps/keepalived/sbin/keepalived
-f, --use-file=FILE Use the specified configuration file
-P, --vrrp Only run with VRRP subsystem
-C, --check Only run with Health-checker subsystem
-l, --log-console Log messages to local console
-D, --log-detail Detailed log messages
-S, --log-facility= Set syslog facility to LOG_LOCAL
-V, --dont-release-vrrp Don't remove VRRP VIPs and VROUTEs on daemon stop
-I, --dont-release-ipvs Don't remove IPVS topology on daemon stop
-R, --dont-respawn Don't respawn child processes
-n, --dont-fork Don't fork the daemon process
-d, --dump-conf Dump the configuration data
-p, --pid=FILE Use specified pidfile for parent process
-r, --vrrp_pid=FILE Use specified pidfile for VRRP child process
-c, --checkers_pid=FILE Use specified pidfile for checkers child process
-v, --version Display the version number
-h, --help Display this help message
# ln -s /data/apps/keepalived/sbin/keepalived /sbin/keepalived
# cp /home/data/conf/rc.d/init.d/keepalived/etc/rc.d/init.d/
# cp /home/data/conf/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp /home/data/conf/keepalived/keepalived.conf /etc/keepalived/
# 开启路由功能
# echo "1" >/proc/sys/net/ipv4/ip_forward
(三) 安装ipvs管理软件(D1,D2服务器都要安装)
1: 检查kernel是否已经支持LVS的IPVS模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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
如果有类似上面的输出则说明内核已经支持
2: 安装ipvs
可以从http://www.linuxvirtualserver.org/software/ipvs.html 下载源码安装
这里我使用yum安装
1
2
# yum -y install ipvsadm
# ipvsadm --help(看到参数信息则说明安装成功)
(四) web服务器搭建
1 环境安装与搭建(略)
2 建立虚拟主机用于测试
R1,R2 上配置相同
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_nameimg.fangwentest.com;
root /data/wwwroot/web/fangwentest.com/;
access_log /data/wwwroot/log/img.fangwentest.com-access.log main_zdy;
error_log /data/wwwroot/log/img.quwenjiemi.com-error.log;
location / {
indexindex.html index.htm index.php;
}
}
# service nginx restart
1
2
3
4
5
6
R1上
# cd /data/wwwroot/web/fangwentest.com/
# echo "<h1>R1_Server</h1>" > index.html
R2上
# cd /data/wwwroot/web/fangwentest.com/
# echo "<h1>R2_Server</h1>" > index.html
(五) 配置keepalived
D1 上配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# vi /etc/keepalived/keepalived.conf
# 这里我只列出改动了的部分
vrrp_instance VI_1 {
state MASTER # 指定角色MASTER表示此主机是主服务器
interface eth1 # 表示网络监听的接口
virtual_router_id 51 # 标识数字,主从必须一样
priority 100 # 优先级,数字越大,优先级越高。主优先级必须大于从
advert_int 1 # 设置主从负载均衡器之间同步检查的时间间隔,单位为秒
authentication {# 设定验证类型和密码
auth_type PASS # 设置验证类型 主从必须设置相同才能通信
auth_pass 123456 # 设置验证密码 主从必须设置相同才能通信
}
virtual_ipaddress {
192.168.1.200# 对外的虚拟ip地址
}
}
virtual_server 192.168.1.200 80 {# 设置虚拟服务器,需要指定虚拟ip地址和服务器端口,ip与端口之间用空格隔开
delay_loop 6 # 设置运行情况检查时间,单位是秒
lb_algo rr # 设置负载均衡算法,这里设置为rr,即轮询算法
lb_kind DR # 设置LVS实现负载均衡的机制,有NAT,TUN,DR 三种模式,这里选用DR
persistence_timeout 50 # 会话保持时间,50秒,这个选项对动态网页是非常有用,为集群系统中session共享提供了一个很好的解决方案,有了这个会话保持功能,用户的请求会被一直分发到某个服务器节点,知道超过这个会话的保持时间
protocol TCP # 指定特定的协议类型,有TCP和UDP
real_server 192.168.1.214 80 {# 配置服务器节点1,需要指定real server 的真实IP地址和端口。ip和端口之间用空格隔开
weight 1 # 配置权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能低的服务器设置相对较低的权值,这样才能合理的利用和分配系统资源。0
TCP_CHECK { # real_server的状态检测设置部分,单位为秒
connect_timeout 3 # 表示3秒无响应则超时
nb_get_retry 3 # 表示重试次数
delay_before_retry 3 # 表示重试间隔
}
}
real_server 192.168.1.215 80 { # 配置主节点2
weight 1
TCP_CHECK { # real_server的状态检测设置部分,单位为秒
connect_timeout 3 # 表示3秒无响应则超时
nb_get_retry 3 # 表示重试次数
delay_before_retry 3 # 表示重试间隔
}
}
}
D2上配值和D1基本相同只是state MASTER改成state BACKUP,priority 100 改成 priority 80,interface eth1 改成 interface eth2 (主要是我在BACKUP上使用的网卡是eth2)
(六) Real_Server上的配置(R1,R2上执行相同的操作)
# 在LVS的DR模式下,用户的访问请求到达Real Server 后,是直接返回给用户的,不再经过前端的Director Server,因此,需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# chmod 777 /etc/rc.d/init.d/functions
# vi /etc/init.d/lvsrs
#!/bin/bash
#如果想启动LVS Server执行:/etc/init.d/lvsrs start
#如果想停止LVS Server执行:/etc/init.d/lvsrs stop
VIP=192.168.1.200 #虚拟IP,视具体情况而变
. /etc/rc.d/init.d/functions # 如果提示权限不够,那么先在命令行执行: chmod 777 /etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $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
route del $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/init.d/lvsrs
# service lvsrs start
(七) 管理lvs (以下D1,D2上都执行)
1)启动lvs调度器
# service keepalived start
# 开启路由功能
# echo "1" >/proc/sys/net/ipv4/ip_forward
2) 关闭lvs调度器
# service keepalived stop
# 开启路由功能
# echo "0" >/proc/sys/net/ipv4/ip_forward
(八) 管理真实服务器 (以下R1,R2都适用)
1) 启用lvs功能
# service lvsrs start
2) 停用lvs功能
# service lvsrs stop
(九) 人为去除一台真实服务器(比如R2)
vi /etc/keepalived/keepalived.conf 找到相应部分把
weight 1 把weight 改为 0
页:
[1]