(一) 网络架构
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)
[root@D1 kernels]# ls /usr/src/kernels/ (如果发现没有2.6.32-504.3.3.el6.x86_64这种文件是因为系统缺少包文件 [root@D1 kernels]# yum -y install kernel-devel 即可解决 ) [root@D1 ~]# mkdir -p /data/software [root@D1 ~]# mkdir -p /data/apps [root@D1 ~]# mkdir -p /data/apps/keepalived # 创建安装目录 [root@D1 software]# cd /data/software/ [root@D1 software]# tar -zxvf keepalived-1.2.13.tar.gz [root@D1 software]# cd keepalived-1.2.13 [root@D1 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 [root@D1 keepalived-1.2.13]# make [root@D1 keepalived-1.2.13]# make install [root@D1 sbin]# /data/apps/keepalived/sbin/keepalived --help (说明安装完成) Usage: /data/apps/keepalived/sbin/keepalived [OPTION...] -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=[0-7] Set syslog facility to LOG_LOCAL[0-7] -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 [root@D1 ~]# ln -s /data/apps/keepalived/sbin/keepalived /sbin/keepalived [root@D1 ~]# cp /home/data/conf/rc.d/init.d/keepalived /etc/rc.d/init.d/ [root@D1 ~]# cp /home/data/conf/sysconfig/keepalived /etc/sysconfig/ [root@D1 ~]# mkdir /etc/keepalived [root@D1 ~]# cp /home/data/conf/keepalived/keepalived.conf /etc/keepalived/ # 开启路由功能 [root@D1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
(三) 安装ipvs管理软件(D1,D2服务器都要安装)
1: 检查kernel是否已经支持LVS的IPVS模块
[root@D1 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 如果有类似上面的输出则说明内核已经支持
2: 安装ipvs
可以从http://www.linuxvirtualserver.org/software/ipvs.html 下载源码安装
这里我使用yum安装
[root@D1 software]# yum -y install ipvsadm [root@D1 software]# ipvsadm --help (看到参数信息则说明安装成功)
(四) web服务器搭建
1 环境安装与搭建(略)
2 建立虚拟主机用于测试
R1,R2 上配置相同
server { listen 80; server_name img.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 / { index index.html index.htm index.php; } } [root@R1 fangwentest.com]# service nginx restart
R1上 [root@R1 sites-available]# cd /data/wwwroot/web/fangwentest.com/ [root@R1 fangwentest.com]# echo "<h1>R1_Server</h1>" > index.html R2上 [root@R2 sites-available]# cd /data/wwwroot/web/fangwentest.com/ [root@R2 fangwentest.com]# echo "<h1>R2_Server</h1>" > index.html
(五) 配置keepalived
D1 上配置
[root@D1 software]# 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地址,这样数据才能直接返回给用户
[root@R1 ~]# chmod 777 /etc/rc.d/init.d/functions [root@R1 ~]# 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
[root@R1 ~]# chmod 755 /etc/init.d/lvsrs
[root@R1 ~]# service lvsrs start
(七) 管理lvs (以下D1,D2上都执行)
1)启动lvs调度器
[root@D1 ~]# service keepalived start
# 开启路由功能
[root@D1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward
2) 关闭lvs调度器
[root@D1 ~]# service keepalived stop
# 开启路由功能
[root@D1 ~]# echo "0" >/proc/sys/net/ipv4/ip_forward
(八) 管理真实服务器 (以下R1,R2都适用)
1) 启用lvs功能
[root@R1 ~]# service lvsrs start
2) 停用lvs功能
[root@R1 ~]# service lvsrs stop
(九) 人为去除一台真实服务器(比如R2)
vi /etc/keepalived/keepalived.conf 找到相应部分把
weight 1 把weight 改为 0