接上文 ? 學(xué)習(xí)日記4:nginx負(fù)載均衡(二)2012.01.08
......
到此,整體工作還差一個(gè)備用nginx proxy,其中涉及到keepalived,做心跳。
?
黃線以上做完了。
?
?
本次主要做的是1加一臺(tái)從nginx_proxy ,暫且命令為front2(為從)。之前的nginx_proxy命令為front(為主)
?
1 在主nginx上配置keepalived。
cd /usr/local/src/ wget http: // keepalived.org/software/keepalived-1.2.7.tar.gz tar -xzvf keepalived- 1.2 . 7 . tar .gz cd keepalived - 1.2 . 7 / . /configure --prefix=/usr/local/keepalived
這時(shí)候會(huì)報(bào)錯(cuò)的!
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
缺少gcc,安裝下面擴(kuò)展
yum install gcc gcc -c++ autoconf automake
繼續(xù)編譯,下面還會(huì)報(bào)錯(cuò),類似這樣的錯(cuò)誤。
?
make
: *** No targets specified and no makefile found. Stop.
configure: error: ! OpenSSL is not properly installed on your system. configure: error: !
?
?對(duì)此,我們安裝以下擴(kuò)展即可解決。
yum -y install openssl-devel
yum -y install popt-devel
?
在編譯
./configure --prefix=/usr/local/keepalived
?
這時(shí)候,會(huì)出現(xiàn)下面的結(jié)果,這個(gè)結(jié)果就表明是ok的。到此你的keepalived安裝是成功的!
Keepalived configuration ------------------------ Keepalived version : 1.2 . 7 Compiler : gcc Compiler flags : -g - O2 Extra Lib : -lpopt -lssl - lcrypto Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : No Use VRRP Framework : Yes Use VRRP VMAC : Yes SNMP support : No Use Debug flags : No
?
繼續(xù)下面的操作
?
make make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ mkdir /etc/ keepalived cd /etc/ keepalived vim keepalived.conf
?
keepalived.conf配置文件比較重要
front1 :主nginx的配置文件如下:
! Configuration File for keepalived global_defs { router_id LVS_01 } vrrp_instance VI_1 { state MASTER #master 主nginx interface eth1 virtual_router_id 51 mcast_src_ip 192.168 . 65.133 #本機(jī)ip地址也即主nginx地址 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168 . 65.128 #vip 虛擬出來(lái)的ip地址 要求在內(nèi)網(wǎng)中未被使用 } }
?
到此,主nginx配置完成。同樣的操作,在從nginx上也配置一遍。
不過(guò)從nginx的配置文件如下:
[root@localhost nginx]# vim /etc/keepalived/ keepalived.conf ! Configuration File for keepalived global_defs { router_id LVS_01 } vrrp_instance VI_1 { state BACKUP #slave interface eth2 virtual_router_id 51 mcast_src_ip 192.168 . 65.137 #slave ip priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168 . 65.128 #vip } }
?
重啟兩邊的keepalived服務(wù):
[root@localhost conf.d]# service keepalived restart
Stopping keepalived: [FAILED]
Starting keepalived: [ OK ]
主nginx上,用
[root@localhost conf.d]# ip a 1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link /loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00 inet 127.0 . 0.1 / 8 scope host lo inet6 :: 1 / 128 scope host valid_lft forever preferred_lft forever 2 : eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link /ether 00 :0c: 29 : 20 :e9: 20 brd ff:ff:ff:ff:ff:ff inet 192.168 . 65.133 / 24 brd 192.168 . 65.255 scope global eth1 inet 192.168 . 65.128 / 32 scope global eth1 inet6 fe80::20c:29ff:fe20:e920 / 64 scope link valid_lft forever preferred_lft forever
?到此,我們的vip算是真正的綁定上了。
查看keepalived的日志:
root@localhost conf.d]# tail -f /var/log/ messages Jan 9 18 : 53 : 06 localhost Keepalived_healthcheckers[ 3355 ]: Using LinkWatch kernel netlink reflector... Jan 9 18 : 53 : 06 localhost Keepalived_vrrp[ 3356 ]: Configuration is using : 34824 Bytes Jan 9 18 : 53 : 06 localhost Keepalived_vrrp[ 3356 ]: Using LinkWatch kernel netlink reflector... Jan 9 18 : 53 : 06 localhost Keepalived_vrrp[ 3356 ]: VRRP sockpool: [ifindex( 2 ), proto( 112 ), fd( 11 , 12 )] Jan 9 18 : 53 : 06 localhost Keepalived_vrrp[ 3356 ]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 9 18 : 53 : 07 localhost Keepalived_vrrp[ 3356 ]: VRRP_Instance(VI_1) Entering MASTER STATE Jan 9 18 : 53 : 07 localhost Keepalived_vrrp[ 3356 ]: VRRP_Instance(VI_1) setting protocol VIPs. Jan 9 18 : 53 : 07 localhost avahi-daemon[ 1765 ]: Registering new address record for 192.168 . 65.128 on eth1.IPv4. Jan 9 18 : 53 : 07 localhost Keepalived_healthcheckers[ 3355 ]: Netlink reflector reports IP 192.168 . 65.128 added Jan 9 18 : 53 : 07 localhost Keepalived_vrrp[ 3356 ]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 192.168 . 65.128 Jan 9 18 : 53 : 12 localhost Keepalived_vrrp[ 3356 ]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 192.168 . 65.128
從nginx上,同樣
[root@localhost nginx]# ip a 1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link /loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00 inet 127.0 . 0.1 / 8 scope host lo inet6 :: 1 / 128 scope host valid_lft forever preferred_lft forever 2 : eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link /ether 00 :0c: 29 :a7: 81 :c7 brd ff:ff:ff:ff:ff:ff inet 192.168 . 65.137 / 24 brd 192.168 . 65.255 scope global eth2 inet6 fe80::20c:29ff:fea7:81c7 / 64 scope link valid_lft forever preferred_lft forever
我們發(fā)現(xiàn)并沒(méi)有綁定vip 128
同時(shí);
[root@localhost nginx]# tail -f /var/log/ messages Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Registering Kernel netlink reflector Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Registering Kernel netlink command channel Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Opening file ' /etc/keepalived/keepalived.conf ' . Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Opening file ' /etc/keepalived/keepalived.conf ' . Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Configuration is using : 34822 Bytes Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Configuration is using : 4821 Bytes Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Using LinkWatch kernel netlink reflector... Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Entering BACKUP STATE Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: VRRP sockpool: [ifindex( 2 ), proto( 112 ), fd( 11 , 12 )] Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Using LinkWatch kernel netlink reflector...
?
貌似從nginx似乎出了什么問(wèn)題,先不著急。
這時(shí)候我們停止掉主nginx的服務(wù),再看看效果怎么樣!
killall
nginx
再觀察從nginx的狀態(tài)變化
[root@localhost nginx]# tail -f /var/log/ messages Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Registering Kernel netlink reflector Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Registering Kernel netlink command channel Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Opening file ' /etc/keepalived/keepalived.conf ' . Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Opening file ' /etc/keepalived/keepalived.conf ' . Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Configuration is using : 34822 Bytes Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Configuration is using : 4821 Bytes Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: Using LinkWatch kernel netlink reflector... Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Entering BACKUP STATE Jan 9 19 : 16 : 25 localhost Keepalived_vrrp[ 22421 ]: VRRP sockpool: [ifindex( 2 ), proto( 112 ), fd( 11 , 12 )] Jan 9 19 : 16 : 25 localhost Keepalived_healthcheckers[ 22420 ]: Using LinkWatch kernel netlink reflector... Jan 9 19 : 17 : 33 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 9 19 : 17 : 34 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Entering MASTER STATE Jan 9 19 : 17 : 34 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) setting protocol VIPs. Jan 9 19 : 17 : 34 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth2 for 192.168 . 65.128 Jan 9 19 : 17 : 34 localhost avahi-daemon[ 1810 ]: Registering new address record for 192.168 . 65.128 on eth2.IPv4. Jan 9 19 : 17 : 34 localhost Keepalived_healthcheckers[ 22420 ]: Netlink reflector reports IP 192.168 . 65.128 added Jan 9 19 : 17 : 39 localhost Keepalived_vrrp[ 22421 ]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth2 for 192.168 . 65.128
從第33秒后發(fā)現(xiàn),備用nginx已經(jīng)轉(zhuǎn)為master狀態(tài)。
再看
[root@localhost nginx]# ip a 1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link /loopback 00 : 00 : 00 : 00 : 00 : 00 brd 00 : 00 : 00 : 00 : 00 : 00 inet 127.0 . 0.1 / 8 scope host lo inet6 :: 1 / 128 scope host valid_lft forever preferred_lft forever 2 : eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link /ether 00 :0c: 29 :a7: 81 :c7 brd ff:ff:ff:ff:ff:ff inet 192.168 . 65.137 / 24 brd 192.168 . 65.255 scope global eth2 inet 192.168 . 65.128 / 32 scope global eth2 inet6 fe80::20c:29ff:fea7:81c7 / 64 scope link valid_lft forever preferred_lft forever
發(fā)現(xiàn)沒(méi)有?vip飄過(guò)來(lái)了!
?
針對(duì)Keepalived的不足,用check_nginx.sh來(lái)監(jiān)控nginx進(jìn)程,實(shí)現(xiàn)真正意義上的負(fù)載均衡高可用.
此腳本思路其實(shí)也很簡(jiǎn)單,即放置在后臺(tái)一直監(jiān)控nginx進(jìn)程;如進(jìn)程消失,嘗試重啟nginx,
如是失敗則立即停掉本機(jī)的keepalived服務(wù),讓另一臺(tái)負(fù)載均衡器接手.
vi /shell/nginx_pid. sh ################################################### # !/bin/ bash while : do nginxpid =` ps -C nginx --no-header | wc - l` if [ $nginxpid -eq 0 ] then /usr/local/nginx- 0.8 . 53 /sbin/ nginx sleep 5 if [ $nginxpid -eq 0 ] then /etc/init.d/ keepalived stop fi fi sleep 5 done ###################################################
?
?
我們?nèi)匀豢梢岳^續(xù)訪問(wèn)我們的站點(diǎn)。至此。故障點(diǎn)切換宣告結(jié)束。
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
