负载均衡是很多大流量站都会用到的技术,有web服务器的负载均衡,也有数据库的负载均衡。下面我们来探讨一下,web服务器方面的负载均衡该如何配置。
      我们知道如今apache作为web服务器,用户量稳居同类型服务器第一位。但是apache在处理高并发用户访问上做的是很不到位的。所以如今国内的很多大站都在采用Nginx的服务器。因为它的核心优点就是处理高并发请求时有很不错的效果。同时它的开源,易扩展,使得很多的设计者不断的完善它。
      那么下面我们就来一块利用这款web服务器来配置一下OpenERP的负载均衡实例。
      测试的环境:
      Ubuntu VM1:用作Nginx的配置主机,客户端访问的是这个主机(192.168.254.134)
      Ubuntu VM2 : OpenERP的第一个WEB端(192.168.254.216),加入Nginx的upstream服务器列表中
      Ubuntu VM3:OpenERP的第二个WEB端(192.168.254.210),加入Nginx的upstream服务器列表中
 
      我们分以下步骤进行负载均衡的配置:
      一:数据库的配置
      在VM2和VM3中安装Postgresql数据库,安装方法以及注意事项如下:
      1,采用命令:sudo apt-get install postgresql
      2,安装完后,切换到postgres用户:sudo su postgres
      3,创建新的用户账户:createuser oe
      4,进入数据库:psql template1
      5,修改用户密码:alter role oe with password '123456';      //注意不要忘了分号
      6,退出数据库编辑:\q
      7,打开数据库配置文件:sudo nano /etc/postgresql/9.1/main/postgresql.conf
      8,修改连接权限:#listen_addresses = ‘localhost’改为 listen_addresses = ‘*’
      9,启用密码验证:#password_encryption = on改为password_encryption = on
      10,打开pg_hba.conf:sudo nano /etc/postgresql/9.1/main/pg_hba.conf
      11,在末尾加上可访问ip段:host all all 0.0.0.0 0.0.0.0 md5
      12,重启数据库服务:sudo /etc/init.d/postgresql restart
      说明:在进行数据库配置的时候一定注意连接权限和密码验证的修改,不修改的话是不能进行远程连接的。你可以用pgAdminIII或者一些数据库连接工具进行连接测试,能连接上说明配置成功。
 
       二:OpenERP的配置
       在VM2和VM3中安装OpenERP程序,安装之前需要先安装一些OE所需要的Python库,具体如下:
       1,安装Python库
       sudo apt-get install python-dateutil python-feedparser python-gdata python-ldap python-libxslt1 python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi 
       2,在更新源文件中增加OpenERP的更新地址:sudo nano /etc/apt/sources.list 
       3,文件打开以后,在最下面增加一行: deb http://nightly.openerp.com/7.0/nightly/deb/ ./            //注意最后一个.前有一空格
       4,更新来源: sudo apt-get update
       5,升级所有套件: sudo apt-get upgrade
       6,安装openerp的程序:sudo apt-get install openerp
       7,启动openerp服务:sudo /etc/init.d/openerp start
 
       三:Nginx的配置
       在VM1中安装Nginx服务器,其中会涉及到一些概念稍后会一一列举出来:
       1,安装nginx服务器:sudo apt-get install nginx
       2,打开nginx配置文件:sudo nano /etc/nginx/nginx.conf
       3,在http配置中加入upstream模块配置:
       Ubuntu下的OpenERP负载均衡实例
       4,继续添加虚拟主机的配置:
       Ubuntu下的OpenERP负载均衡实例
       5,重启nginx服务器:sudo /etc/init.d/nginx restart
       6,在windows主机浏览器中输入http://192.168.254.134:8069/ 即可看到OE页面
 
       四:关于upstream的说明
       通过上面的配置你会发现在某一浏览器下第一次以某个用户登录OE,那么下次就会仍然以这个用户进入。这就是ip_hash起到了作用。下面我们来看看它究竟是什么?
       Nginx服务器中有5种负载均衡的算法,ip_hash就是其中的一种,我们以前三种为例:
       1,默认(轮询)
       当在upstream配置中什么方式也不写的时候就是默认配置,具体的如下:
       upstream oeserver{
              server   192.168.253.41:8069;
              server   192.168.254.216:8069;
       }
       这就是轮询的方式,它按照请求的先后分配到两个server上,如果其中的一个server挂掉了,服务器会自动把它给踢出掉。
       我们可以在终端访问URL,然后观察后台server的分配情况:
       Ubuntu下的OpenERP负载均衡实例
      
       我采用for i in $(seq 4); do curl http://192.168.254.134:8069; done语句对Nginx服务器访问4次,我们看下面输出的结果。有两个db=my的结果,两个db=254的结果。这两个db是分别在两个server下的OE里创建的。通过这说明,轮询的时候是根据请求顺序在后台server中按顺序分配服务器的。
 
      2,weight(权重)
      有时候后台服务器的访问会不均匀,这时候我们可以给每一个server设置一个权重,提高或减小被分配到的几率。具体我们可以这样写:
      upstream oeserver{
              server   192.168.253.41:8069 weight=1;
              server   192.168.254.216:8069 weight=2;
       }
根据weight算法,weight值越大,它会被优先分配。那么也就是说会优先分配第二个server,但是这里的优先不是说就是一定会分配到四二个server。因为weight是几率值,即1/3的几率分到第一个server,2/3的几率分到第二个server。你可以利用1中的方法将seq的值设大一点,来看看是不是第二个server中的db=my多。
 
      3,ip_hash
       这个是进行OE负载配置的推荐写法,因为它可以解决session的问题,第一次访问了,下次会保留上次的结果。配置如下:
       upstream oeserver{
              ip_hash;
              server   192.168.253.41:8069;
              server   192.168.254.216:8069;
       }
       按照这个配置我们在浏览器中访问Nginx服务器的时候会始终访问第一个出现的server。到底是不是这样那,我们来看一下

Ubuntu下的OpenERP负载均衡实例
 
       可以发现,所有的db都是my这个数据库,也就是访问的都是第二个server。验证了我们所说的。这里要注意的是,不要将ip_hash和weight一块用(url_hash除外),否则在重启nginx服务器的时候会报如下错误:

Ubuntu下的OpenERP负载均衡实例
 
      这是因为在upstream中开头写了ip_hash,则运用了ip_hash算法,而在server后面又加了weight值,那么在ip_hash这个算法之中是没有weight这个参数的使用的。所以会报错。
 
    4,url_hash,fair自己可以到网上搜索资料
 
总结:通过上面的步骤,我们就完成了对OpenERP的负载均衡配置,但是session共享的问题以及数据库的同步问题还需要在进行配置。这里只是完成了OpenERP在Nginx的部署。