1)实验拓扑信息
说明:
a、在客户端使用www.wanwan.com,将由负载均衡器提交给vip1所对应的集群进行处理
b、在客户端使用img.wanwan.com,将由负载均衡器提交给vip1所对应的集群进行处理
c、10.10.10.129和10.10.10.130两台负载均衡器,其中某一台出现故障均不影响整个系统运行
2)haproxy的安装与启动脚本配置
参考我的上一篇博客:http://www.jb51.cc/article/p-sytmwgiq-xe.html
3)haproxy的配置(两台负载均衡器10.10.10.129/10.10.10.130均需配置)
[root@MysqL-master~]#adduserhaproxy-s/sbin/nologin-M [root@MysqL-master~]#cd/usr/local/haproxy/conf/ [root@MysqL-masterconf]#cathaproxy.cfg global log127.0.0.1local0info maxconn4096 userhaproxy grouphaproxy daemon nbproc1 pidfile/usr/local/haproxy/logs/haproxy.pid defaults modehttp retries3 timeoutconnect10s timeoutclient20s timeoutserver30s timeoutcheck5s frontendwww bind*:80 modehttp optionhttplog optionforwardfor optionhttpclose logglobal #来自www.wanwan.com的请求,均交给htmpool进行处理,来自img.wanwan.com的请求,则提交给imgpool进行处理。默认不指定的话,交给htmpool进行处理 aclhost_wwwhdr_dom(host)-iwww.wanwan.com aclhost_imghdr_dom(host)-iimg.wanwan.com use_backendhtmpoolifhost_www use_backendimgpoolifhost_img default_backendhtmpool backendhtmpool modehttp optionredispatch optionabortonclose balancestatic-rr cookieSERVERID optionhttpchkGET/index.html serverweb0110.10.10.128:80cookieserver1weight6checkinter2000rise2fall3 serverweb0210.10.10.132:80cookieserver2weight6checkinter2000rise2fall3 backendimgpool modehttp optionredispatch optionabortonclose balancestatic-rr cookieSERVERID optionhttpchkGET/index.html serverimg110.10.10.131:80cookieserver1weight6checkinter2000rise2fall3 serverimg210.10.10.133:80cookieserver2weight6checkinter2000rise2fall3 #配置haproxy的web监控界面 listenadmin_stats bind0.0.0.0:9188 modehttp log127.0.0.1local0err statsrefresh30s statsuri/haproxy-status statsrealmwelcomelogin\Haproxy statsauthadmin:admin~!@ statshide-version statsadminifTRUE
4)keepalived的配置
负载均衡器配置两个vip:10.10.10.188以及10.10.10.189(在两台负载均衡器上互为主备)
[root@MysqL-masterconf]#cat/etc/keepalived/keepalived.conf !ConfigurationFileforkeepalived global_defs{ notification_email{ 314324506@qq.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_serversmtp.qq.com smtp_connect_timeout30 router_idLVS_7 } #配置这个脚本的作用是为了避免haproxy服务停止后,keepalived不释放vip vrrp_scriptchk_http_port{ script"/opt/check_haproxy.sh" interval2 weight2 } vrrp_instanceVI_188{ stateMASTER#主服务器 interfaceeth0 virtual_router_id188 priority150#slave上的数值更小,数值越大,代表优先级越高 advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 10.10.10.188/24#vip地址,在系统里面通过ipaddlist可以查看 } } vrrp_instanceVI_189{ stateBACKUP#从服务器 interfaceeth0 virtual_router_id189 priority100#master上的数值更大,数值越大,代表优先级越高 advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 10.10.10.189/24#vip地址,在系统里面通过ipaddlist可以查看 } }
5)keepalived的启动脚本
#!/bin/sh # #StartupscriptfortheKeepaliveddaemon # #processname:keepalived #pidfile:/var/run/keepalived.pid #config:/etc/keepalived/keepalived.conf #chkconfig:-2179 #description:StartandstopKeepalived #Sourcefunctionlibrary ./etc/rc.d/init.d/functions #Sourceconfigurationfile(wesetKEEPALIVED_OPTIONSthere) ./etc/sysconfig/keepalived RETVAL=0 prog="keepalived" start(){ echo-n$"Starting$prog:" daemonkeepalived${KEEPALIVED_OPTIONS} RETVAL=$? echo [$RETVAL-eq0]&&touch/var/lock/subsys/$prog } stop(){ echo-n$"Stopping$prog:" killprockeepalived RETVAL=$? echo [$RETVAL-eq0]&&rm-f/var/lock/subsys/$prog } reload(){ echo-n$"Reloading$prog:" killprockeepalived-1 RETVAL=$? echo } #Seehowwewerecalled. case"$1"in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; condrestart) if[-f/var/lock/subsys/$prog];then stop start fi ;; status) statuskeepalived ;; *) echo"Usage:$0{start|stop|reload|restart|condrestart|status}" exit1 esac exit$RETVAL
6)效果测试
a、在客户端测试www.wanwan.com
b、测试img.wanwan.com
如上:负载均衡调度的作用已经实现,那么我们在测试下keepalived的相关功能
c、测试keepalived的相关功能
[root@MysqL-master~]#ipaddlist 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:67:b3:45brdff:ff:ff:ff:ff:ff inet10.10.10.129/24brd10.10.10.255scopeglobaleth0 inet10.10.10.188/24scopeglobalsecondaryeth0 inet6fe80::20c:29ff:fe67:b345/64scopelink valid_lftforeverpreferred_lftforever [root@MysqL-slave~]#ipaddlist 1:lo:<LOOPBACK,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:53:cf:52brdff:ff:ff:ff:ff:ff inet10.10.10.130/24brd10.10.10.255scopeglobaleth0 inet10.10.10.189/24scopeglobalsecondaryeth0 inet6fe80::20c:29ff:fe53:cf52/64scopelink valid_lftforeverpreferred_lftforever
我们可以看到,两个vip地址,10.10.10.188以及10.10.10.189分别在两台负载均衡器上(仔细看下keepalived的配置可以发现,我们配置两台负载均衡互为主从)
模拟10.10.10.129-主负载均衡器宕机,然后观察ip地址切换以及负载均衡是否正常
[root@MysqL-slave~]#ipaddlist 1:lo:<LOOPBACK,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:53:cf:52brdff:ff:ff:ff:ff:ff inet10.10.10.130/24brd10.10.10.255scopeglobaleth0 inet10.10.10.189/24scopeglobalsecondaryeth0 inet10.10.10.188/24scopeglobalsecondaryeth0 inet6fe80::20c:29ff:fe53:cf52/64scopelink valid_lftforeverpreferred_lftforever 如上,我们可以观察到vip已经切换到另外一台负载均衡上了,然后我们观察负载均衡器的使用情况
负载正常,keepalived的功能也实现了,我们重新开启主负载均衡器 [root@MysqL-masterkeepalived]#ipaddlist 1:lo:<LOOPBACK,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:67:b3:45brdff:ff:ff:ff:ff:ff inet10.10.10.129/24brd10.10.10.255scopeglobaleth0 inet10.10.10.188/24scopeglobalsecondaryeth0 inet6fe80::20c:29ff:fe67:b345/64scopelink valid_lftforeverpreferred_lftforever vip地址10.10.10.188已经切换回来了 [root@MysqL-slave~]#ipaddlist 1:lo:<LOOPBACK,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:53:cf:52brdff:ff:ff:ff:ff:ff inet10.10.10.130/24brd10.10.10.255scopeglobaleth0 inet10.10.10.189/24scopeglobalsecondaryeth0 inet6fe80::20c:29ff:fe53:cf52/64scopelink valid_lftforeverpreferred_lftforever
到此,keepalived+haproxy的基本功能已经实现了,由于haproxy配置比较多,这里我就不细讲了,后面会整理一篇关于haproxy常用的参数配置。