Odoo负载均衡搭建
Odoo负载均衡搭建
序言
各位做odoo的开发应当都知道, odoo上生产环境一般就两台机器, 一台应用服务器, 一台数据库服务器. pg的扩展还可能通过pgpoll实现, 通过中间件的方式达到应用层无感的读写分离. 但是应用服务器, 应当如何扩展,,我给大家提供一些微小的经验.
架构
背景
Odoo应用为什么难以扩展, 难以在多台服务器上部署, 主要是在于下两个问题:
Session 问题
- List item
- ir.attachment存放问题
Session Store
Odoo的Session Store到底是什么东西?其实就是网页的cookie。使用过Odoo的同行都知道Session Store默认存放在 /var/lib/odoo/.local/share/Odoo下,该文件夹下有addons,session,filestore文件夹,session文件夹就是存储session stroe的目录。如果session_id=0089b5460e3ba5bf52b0945d29545e31a0b59a10,那么在应用服务器/var/lib/odoo/.local/share/Odoo/session 就有werk_zeug_0089b5460e3ba5bf52b0945d29545e31a0b59a10.sess 文件。那如果我们搭建负载均衡时多个odoo应用服务器时每个服务器器都会产生session文件怎么处理呢?session的解决方案很简单, 用redis来存放即可, 网上也有解决方案。但是网上很多写的有点难以理解。自己查过网上很多资料,发现网上写的都挺乱的。所以我自己整理了一下。
simle_redis
通过下载smile_redis_session_store模块后。在odoo配置文件中配置如下,主要配置是odoo启动是加载该模块,然后就是redis的配置
ir.attachment
odoo提供了附件的功能, 用以存放图片, js, css等静态文件. odoo默认使用的包括res.partner模型的image字段, 各种编译之后的scss.css文件, 以及压缩之后的 web.assets_common.js, web.assets_backend.js等js文件. 存储方式都是在db的 ir_attachment 表的 store_fname 字段中存放文件路径.
如果odoo应用程序部署在两台机器上, data_dir的读取问题是无法避免的.也就是说一个Odoo应用能找到对应的附件, 另一台服务器上的Odoo就只能返回file not exists
那应该怎么解决呢?在网上找了很多资料,发现又是需要改源码又是需要配置nginx的。感觉几麻烦又耗时。不过我们公司的理念就是能用钱解决的问题都不是问题。当然了原理还是要懂的,私下倒腾倒腾也挺有感觉。那用钱怎么解决呢?那就要介绍阿里云的文件存储(NAS)什么是NAS呢,这里就不多说。各位可以自行了解。https://help.aliyun.com/document_detail/27518.html?spm=a2c4g.11186623.6.542.3f597424ZcFMRG
通过购买阿里云的文件存储服务呢?在购买应用服务器时把购买好的NAS挂载到应用服务器就好了。(如果是多台应用的话也是同样才做)如下图
添加完后我们远程到应用服务器适用df -h 查看挂载情况,如下图:
挂载成功以后,修改odoo配置文件,把data_dir存放目录修改到我们的NAS目录下就完成了。如下图:
以上就是Odoo负载均衡的搭建,以上架构本人都是使用阿里云的服务。例如: 负载均衡、云数据库、Redis 。并没有过多配置,如果是需要自行在自己服务器安装。以下是一些基本的配置大家可以参考一下。
举例:
192.168.1.1(nginx代理服务器)
192.168.1.2(odoo应用服务器一)
192.168.1.3(odoo应用服务器二)
192.168.1.4(postgresql服务器)
192.168.1.5(redis服务器)
Nginx配置:
以下是nginx代理服务器配置,仅供参考。更多加权轮询算法各位自行了解
odoo应用服务器配置
首先先安装Python-redis,版本根据odoo版本安装
sudo apt install python3-redis
odoo配置文件
以下是odoo配置文件配置,仅供参考:更多配置参数自行了解)
Postgresql
安装Postgresql
sudo apt install postgresql postgresql-contrib
修改配置文件pg_hba.conf 添加允许访问。如下图:
修改配置文件postgresql.conf 修改监听端口。如下图
创建用户给odoo连接访问
sudo -i -u postgres
psql
create user username with password ‘123456’;
创建完用户以后呢这是当前用户是没有任务权限的,所以需要给username授予权限
alter role username createdb;
Redis
安装Redis(安装方法自行了解)
配置redis允许远程连接以及需要密码验证
配置允许远程连接
配置密码认证