4323e 发表于 2015-1-13 09:30:46

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]
查看完整版本: lvs+keepalived(DR模式)