且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用nginx负载均衡lucene

更新时间:2022-02-05 01:50:13

server a是之前退役的,现存放着一些小些php站点和lucene 搜索,
server a
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk:scsi 74G *2 (raid 0)
os:as4
app:nginx+php+fcgi+xcache+mysql+tomcat+postfix

server b为刚退役,没有站点。
server b
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk: sata 80G *1 (7200)
os:as4
app:nginx+tomcat

—————————————
server a 的搜索每天有几十万PV,平均load 5,更新索引达30,高峰时tomcat会挂掉。
产品结构:nginx代理tomcat,jsp提供搜索结果,jsp+mysql记录搜索关键字,crontab定时生成索引。

方案一:server a 提供生成索引和mysql服务,server b 提供纯web搜索服务,用rsync同步索引文件
方案二:server a 提供生成索引和mysql服务,server b 和server a使用负载均衡一起提供需web搜索服务,用rsync同步索引文件。

一。先设置两台服务器时间是同步的。

二。设置rsync时不需要登录。
用server b 去拉server a的索引
使用crontab+ssh每天自动完全备份mysql数据

三。写更新的bash和设置crontab
rsync在第一次是全部同步,以后就是只更新有异动的文件。
目前索引为1G左右,
cache使用三级目录分布小文件,占4G

在server b上
vi rsync_index.sh
#!/bin/bash
#获取lucene索引
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/index / >> /opt/shell/rsync_index.log

vi rsync_cache.sh
#!/bin/bash
#获取职位的cache和关键词
/usr/bin/rsync -avlR –delete -e /usr/bin/sshrsync@221.0.0.1:/lucene/keyword/ >> /opt/shell/rsync_keyword.log
/usr/bin/rsync -avlR –delete -e /usr/bin/sshrsync@221.0.0.1:/lucene/cache/ >> /opt/shell/rsync_cache.log

crontab每小时更新一次。
50 * * * * /bin/sh /opt/shell/rsync_cache.sh > /dev/null 2>&1
52 * * * * /bin/sh /opt/shell/rsync_index.sh > /dev/null 2>&1

四。设置nginx
设置nginx的配置文件,使用方案一

      location / {
           proxy_passhttp://127.0.0.1:8080;
       location ~* ^.+/.(jpg|jpeg|gif|png|css|js)$ {
    root /opt/tomcat/webapps/search;
    access_log   off;
    expires 3d;
    break;
       }
      }           

重启nginx,将域名指向server b.
server b平均load 为5,当rsync更新时load 会达到20,还是不可靠,使用方案二。

     upstream mysvr {
 #ip_hash; (据说可以以C类IP将用户固定在某台server,开启后并发大降不能肯定是否有bug)
 server 127.0.0.1:8080;
 server 221.0.0.1:8080;
     }

server {
      …..

      location / {
           #proxy_passhttp://127.0.0.1:8080;
    proxy_passhttp://mysvr;
       location ~* ^.+/.(jpg|jpeg|gif|png|css|js)$ {
    root /opt/tomcat/webapps/search;
    access_log   off;
    expires 3d;
    break;
       }
      }           

      …….

}

重启nginx,将域名指向server b.
server b 和server 平均load 为1~2,更新会到5,还可以接受。

<SCRIPT type=text/javascript><!-- google_ad_client = "pub-4117525570087365"; /* 468x15, 创建于 08-10-27 */ google_ad_slot = "2143600273"; google_ad_width = 468; google_ad_height = 15; //--> </SCRIPT> <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT> <SCRIPT src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></SCRIPT> <SCRIPT> window.google_render_ad(); </SCRIPT>