Nginx+keepalive主从双机热备配置1.安装keepaliveyuminstall-ygccopenssl-develpopt-devel软件路径:\\10.180.10.201\安装软件\应用软件\应用服务tarzxvfkeepalived-1.2.7.tar.gzcdkeepalived-1.2.7./configuremake&&makeinstallcp/usr/local/etc/rc.d/init.d/keepalived/etc/init.d/cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/chmod+x/etc/init.d/keepalivedchkconfig--addkeepalivedchkconfigkeepalivedonmkdir/etc/keepalivedln-s/usr/local/sbin/keepalived/usr/sbin/2.安装Nginxyuminstall-ypcre-devel软件路径:\\10.180.10.201\安装软件\应用软件\应用服务tarzxvfnginx-1.2.5.tar.gzcdnginx-1.2.5./configure--prefix=/usr/local/nginx--user==配置配置keepalive两台服务器端keepalived.conf内容都为如下,都设置为backup,不抢占,注意修改优先级不同,更详细的keepalived配置文件说明可以执行mankeepalived.conf查看:!ConfigurationFileforkeepalivedglobal_defs{notification_email{admin@lvtao.net}notification_email_fromadmin@lvtao.netsmtp_server127.0.0.1smtp_connect_timeout30router_idLVS_DEVEL}#监控服务.NGINXmysql等vrrp_scriptchk_nginx{script/home/check_nginx.shinterval2weight2}vrrp_instanceVI_1{stateBACKUP#主从设置MASTERinterfaceeth2#网卡名virtual_router_id51mcast_src_ip10.0.1.133#本机IPpriority50#从机小于主机advert_int1authentication{auth_typePASSauth_passchtopnet}virtual_ipaddress{10.0.1.2#VIP的IP}track_script{chk_nginx#检测脚本}}virtual_server10.0.1.280{delay_loop6lb_algorrlb_kindDRpersistence_timeout50protocolTCPreal_server10.0.1.13280{weight3TCP_CHECK{connect_timeout10nb_get_retry3delay_before_retry3connect_port80}}real_server10.0.1.13380{weight3TCP_CHECK{connect_timeout10nb_get_retry3delay_before_retry3connect_port80}}}启动相关服务。我在这儿使用的是nginx,每个上面开了一个站点,通过IP可以直接访问的。启动keepalive后,就可以通过VIP的虚拟IP10.0.1.2来访问站点了,测试方法就是停止任何其中一个站点,看它是否能自动切换到从服务器上。上面代码中nginx的检测脚本如下:vicheck_nginx.sh#!/bin/bashif[$(ps-ef|grepnginx:masterprocess|grep-vgrep)==]thenkillallkeepalivedfifi在两台WebServer上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.1.2、抑制ARP广播。virealserver.sh#!/bin/bash#description:ConfigrealserverVIP=10.0.1.2/etc/rc.d/init.d/functionscase$1instart)/sbin/ifconfiglo:0$VIPnetmask255.255.255.255broadcast$VIP/sbin/routeadd-host$VIPdevlo:0echo1/proc/sys/net/ipv4/conf/lo/arp_ignoreecho2/proc/sys/net/ipv4/conf/lo/arp_announceecho1/proc/sys/net/ipv4/conf/all/arp_ignoreecho2/proc/sys/net/ipv4/conf/all/arp_announcesysctl-p/dev/null2&1echoRealServerStartOK;;stop)/sbin/ifconfiglo:0down/sbin/routedel$VIP/dev/null2&1echo0/proc/sys/net/ipv4/conf/lo/arp_ignoreecho0/proc/sys/net/ipv4/conf/lo/arp_announceecho0/proc/sys/net/ipv4/conf/all/arp_ignoreecho0/proc/sys/net/ipv4/conf/all/arp_announceechoRealServerStoped;;*)echoUsage:$0{start|stop}exit1esacexit0附:keepalive相关参数说明!ConfigurationFileforkeepalivedglobal_defs{notification_email{admin@lvtao.net#设置报警邮件地址,可以设置多个,每行一个。需开启本机的sendmail服务}notification_email_fromadmin@lvtao.net#设置邮件的发送地址smtp_server127.0.0.1#设置smtpserver地址smtp_connect_timeout30#设置连接smtpserver的超时时间router_idLVS_DEVEL#表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息}vrrp_instanceVI_1{stateMASTER#指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器interfaceeth0#指定HA监测网络的接口virtual_router_id51#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的priority100#定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级advert_int1#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒authentication{#设置验证类型和密码auth_typePASS#设置验证类型,主要有PASS和AH两种auth_pass1111#设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信}virtual_ipaddress{#设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个10.0.0.148}}virtual_server10.0.0.14880{#设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开delay_loop6#设置运行情况检查时间,单位是秒lb_algorr#设置负载调度算法,这里设置为rr,即轮询算法lb_kindDR#设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选persistence_timeout50#会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。#需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,#那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制protocolTCP#指定转发协议类型,有TCP和UDP两种real_server10.0.0.13780{#配置服务节点1,需要指定realserver的真实IP地址和端口,IP与端口之间用空格隔开weight3#配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器#分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源TCP_CHECK{#realserver的状态检测设置部分,单位是秒connect_timeout10#表示3秒无响应超时nb_get_retry3#表示重试次数delay_before_retry3#表示重试间隔connect_port80}}real_server10.0.0.13980{weight3TCP_CHECK{connect_timeout10nb_get_retry3delay_before_retry3connect_port80}}}