实现ODOO负载均衡集群我们主要需要做的是负载均衡器的搭建、负载均衡算法的实现、会话保持方案的实现、数据缓存以及共享存储方案的实现。
4.1 负载均衡端的实现
4.1.1 负载均衡器的搭建与配置
本文中我们使用yum在centos7上安装Nginx,首先通过rpm -ivh命令将Nginx源添加进来,然后#yum install nginx,即可成功安装Nginx。
Nginx官方文档中指出,Nginx支持轮询算法、最小连接算法、ip-hash算法3种负载均衡算法,但以上三种负载均衡算法都可以在配置中加入服务器节点的权重值来实现相应的带权重值的负载均衡算法,也就是说Nginx可实现6种负载均衡算法。
基本配置方法
在Centos7下,Nginx的配置文件默认为/etc/nginx/nginx.conf, Nginx作为负载均衡器最基本的配置方式为:
http {
upstream odoo_server {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://odoo_server;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
其中,odoo_server即ODOO集群节点服务器池,其中的3台服务器均运行了相同版本的ODOO实例。
在没有对负载均衡算法进行特殊配置的情况下,Nginx默认采用轮询算法。所有的请求按照平均分配的方式反向代理到odoo_server服务节点池中,Nginx默认应用Http负载均衡器来进行任务分配。
另一种配置方案是最小连接数优先算法,在完成某些请求需要花费较长时间的情况下,最小连接数优先算法表现的较为合适,它能更加合理地将请求分配到连接数较少的服务器节点上。
如果在Nginx的配置文件的服务器组中加入least_conn指令,Nginx将以最小连接数优先的方式来运行。
upstream odoo_server {
least_conn;
server odoo1;
server odoo2;
server odoo3;
}
通用哈希算法,客户端请求被发送至哪个服务器节点来处理取决于用户定义的一个关键词,这个关键词可以是文本、数字等的组合,还可以是来源IP或者端口。
upstream odoo_server {
hash $request_uri consistent;
server odoo1;
server odoo2;
server odoo3;
}
上面可选参数consistent用于开启ketama一致性哈希负载均衡。用户请求将会通过用户定义的关键词的哈希值均匀地分发到服务器节点。
2)服务器慢启动
服务器慢启动技术能防止刚刚恢复的服务器节点被大量连接覆盖而导致的超载进而失效。
在Nginx中,服务器慢启动技术能让集群中服务器节点在完全恢复并状态可用后权重逐步从0恢复到默认值。
具体配置方式:
upstream oe_server {
server odoo1 slow_start=30s;
server odoo2;
server odoo3;
}
4.1.2 动态负载均衡算法的实现
实现本文中的动态负载均衡算法,主要需要解决动态获取并评价结点负载信息的问题和客户端与服务器结点长连接的问题,还需要在调度的同时实现服务器动态扩容的问题。负载调度我们是在Nginx的基础上修改而来的,为了尽可能少的修改Nginx的核