前期准备:
首先安装mini版的系统,安装nginx先做测试;
更换源为阿里云:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #CentOS 5 #wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo #CentOS 6 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo yum clean all yum makecache
添加nginx的yum安装源:
echo '[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/ gpgcheck=0 enabled=1' > /etc/yum.repos.d/nginx.repo yum makecache #将其中的centos替换成对应系统,6替换成系统版本。具体查看http://nginx.org/en/linux_packages.html
然后安装nginx:
yum install -y nginx service nginx start #iptables -I INPUT -p tcp --dport 80 -j ACCEPT #service iptables stop
结构:
DR:192.168.253.82 VIP:192.168.253.80 nginx/1.10.3 | |
RS1:192.168.253.83 nginx/1.10.3 | RS2:192.168.253.84 nginx/1.11.12 |
DR上的设置:
IPVS
首先确认是否存在 ipvs模块:
# 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
然后安装ipvsadm:
# yum install ipvsadm
采用shell脚本完全管理,如下:
# vim /etc/init.d/lvsDR #!/bin/sh # description: Start LVS of Director server VIP=192.168.253.80 RIP1=192.168.253.83 RIP2=192.168.253.84 /etc/rc.d/init.d/functions case "$1" in start) echo " start LVS of Director Server" # set the Virtual IP Address and sysctl parameter /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up echo "1" >/proc/sys/net/ipv4/ip_forward #Clear IPVS table /sbin/ipvsadm -C #set LVS /sbin/ipvsadm -A -t $VIP:80 -s rr -p 1 #-p [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个Real Server处理。此参数一般用于有动态请求的操作中,timeout 的默认值为300 秒。例如:-p 600,表示持续服务时间为600秒。 #-s [rr|wrr|lc|wlc|lblc|lblcr|dh|sh] LVS使用的调度算法,此处为了测试出效果,使用rr轮询 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g #Run LVS /sbin/ipvsadm ;; stop) echo "close LVS Directorserver" echo "0" >/proc/sys/net/ipv4/ip_forward /sbin/ipvsadm -C /sbin/ifconfig eth0:0 down ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
以上参考http://ixdba.blog.51cto.com/2895551/554029
安装ldirectord
下载ldirectord安装包(找了很久没找到yum源,,,)http://rpm.pbone.net/index.php3/stat/4/idpl/23860919/dir/centos_6/com/ldirectord-3.9.5-3.1.x86_64.rpm.html
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/ldirectord-3.9.5-3.1.x86_64.rpm rpm -ivh ldirectord-3.9.5-3.1.x86_64.rpm # 提示有很有依赖包安装 yum install -y perl-MailTools "perl(IO::Socket::INET6)" "perl(LWP::Debug)" "perl(LWP::UserAgent)" perl-Net-SSLeay perl-libwww-perl # 然后再安装即可 rpm -ivh ldirectord-3.9.5-3.1.x86_64.rpm # 复制一份配置文件到/etc/ha.d/ cp `find / -name ldirectord.cf` /etc/ha.d/
配置ldirectord.cf
# Global Directives checktimeout=20 #判定real server出错的时间间隔。 checkinterval=10 #指定ldirectord在两次检查之间的间隔时间。 fallback=127.0.0.1:80 #当所有的real server节点不能工作时,web服务重定向的地址。 autoreload=yes #是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。 logfile="/var/log/ldirectord.log" #设定ldirectord日志输出文件路径。 quiescent=no #当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果选择为yes,当某个real server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模板仍然保留在Director上。 #注意:以上几行为ldirectord.cf文件的“全局”设置,它们可以应用到下面多个虚拟主机,下面是每个虚拟主机的配置。 # Sample for an http virtual service virtual=192.168.253.80:80 #指定虚拟的IP地址和端口号,注意,在virtual行后面的行必 须缩进4个空格或以一个tab字符进行标记。 real=192.168.253.83:80 gate #指定Real Server服务器地址和端口,同时设定LVS工作模式, 用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。 real=192.168.253.84:80 gate fallback=127.0.0.1:80 gate service=http #指定服务的类型,这里是对http服务做负载均衡。 request="test.html" #ldirectord将根据指定的Real Server地址,结合该选项给出 的请求路径,发送访问请求,检查Real Server上的服务是否正 常运行,确保这里给出的页面地址是可访问的,不然ldirectord 会误认为此节点已经失效,发生错误监控现象。 receive="ok" #指定检测的关键字,这里的设置表示测试访问index.html页面是否包含ok关键字,如果有则说明该节点正常,否则认定为故障。 scheduler=rr #指定调度算法,这里是rr(轮叫)算法。 protocol=tcp #指定协议的类型,LVS支持TCP和UDP协议。 checktype=negotiate #指定Ldirectord的检测类型,默认为negotiate。 checkport=80 #指定监控的端口号。 virtualhost=www.sevenfal.com #虚拟服务器的名称,随便指定。
然后就可以启动ldirectord服务了,不过在此之前还需要配置一下RealServer
RS配置
2台RS配置一样,一下给出一份:
vim /etc/init.d/lvsRS #!/bin/bash #description : Start Real Server VIP=192.168.253.80 /etc/rc.d/init.d/functions case "$1" in start) echo " Start LVS of Real Server" /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 ;; stop) /sbin/ifconfig lo:0 down echo "close LVS Director server" 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 "Usage: $0 {start|stop}" exit 1 esac
然后设置一个用于ldirectord检测页面
vim /usr/share/nginx/html/test.html ok
至此,启动所有服务即可(需要注意防火墙等设置)
如上设置,一直刷新http://192.168.253.80 的页面(需要在2台RS上分别定义不同的index.html内容),会显示出不同的结果一直轮换,如果把其中一个nginx服务stop或者把检测的页面移除,则在192.168.253.82上输入ipvsadm可以看到其中一台rs的weight被设置成了0
© 著作权归作者所有
文章评论(1)
DR可做RS,直接在启动脚本中添加一条为本机的即可,