Cấu hình nâng cao cho mô hình thiết kế multiple server
Việc quản lý và xử lý dữ liệu trở nên ngày càng phức tạp và quan trọng hơn bao giờ hết. Đặc biệt, khi mà các doanh nghiệp và tổ chức phải đối mặt với một lượng lớn dữ liệu và yêu cầu xử lý đa dạng. Để đáp ứng nhu cầu này, các mô hình thiết kế multiple server đã trở thành một trong những giải pháp hàng đầu. Trong bài viết này, cùng IZISolution khám phá những cấu hình nâng cao đáng chú ý cho mô hình thiết kế multiple server khi triển khai hệ thống Odoo.
I. Network File System (NFS)
Đây là một giao thức giúp chia sẻ file dữ liệu giữa client và server, giúp client có thể tương tác các dữ liệu như việc tương tác với dữ liệu ở local. Như vậy thì ta sẽ phải cần 1 NSF server và các NSF client.
* Build NSF server
$ sudo apt install nfs-kernel-server
$ sudo mkdir -p /export/odoo
$ sudo chown -R odoo /export
$ sudo vi /etc/exports
/export/odoo 192.168.56.0/255.255.255.0(rw,sync,no_subtree_check)
$ sudo exportfs -ra
$ sudo service nfs-kernel-server restart
* Build NSF client
$ sudo apt install nfs-common
$ sudo mkdir /filestore
$ sudo chown -R odoo /filestore
$ sudo vi /etc/fstab
...
# Odoo filestore
odoo-pg1:/export/odoo /filestore nfs rw,hard,intr 0 0
$ sudo mount /filestore
$ cd ~/.local/share/Odoo
$ cp -R ./ /filestore/
$ sudo vi /etc/odoo/odoo10.conf
...
data_dir = /filestore
$ sudo service odoo restart
II. Datas Replication
* Trên server chính
Create a user for replication
Để replicate, postgres yêu cầu 1 user với một số quyền đặc biết. Trên server Chính chạy câu lệnh sau
$ sudo -u postgres createuser -U postgres repuser -P -c 5 --replication
Chú thích:
sudo -u postgres chuyển user qua postgres.
-U Cho biết tạo với user với reuser bằng user postgres
-P Nhắc nhở bạn tạo password cho user mới.
-c Giới hạn số lượng connect cho user mới. Giá trị bằng 5 là vừa đủ cho replicate.
--replication gắn quyền REPLICATION cho user.
Create the archive directory
Tạo thư mục để lưu trữ dữ liệu
$ mkdir -p /var/lib/postgresql/main/mnt/server/archivedir
Edit pg_hba.conf
Edit file tương ứng với postgres version của bạn
$ vi /etc/postgresql/12/main/pg_hba.conf
Thêm đoạn code sau ở cuối file, trong đó [standby-IP] là ip của server replicate
# Allow replication connections
host replication repuser [standby-IP]/32 md5
Edit postgresql.conf
$ vi /etc/postgresql/9.3/main/postgresql.conf
Cập nhật lại các dữ liệu trong file như sau
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
max_wal_senders = 3
Restart the primary server
$ sudo service postgresql restart
* Trên replicate server
Tắt server của postgres đang chạy
$ sudo service postgresql stop
Edit postgresql.conf
$ vi /etc/postgresql/9.3/main/postgresql.conf
Cập nhật lại giá trị trong file postgressql.conf như sau và lưu lại
hot_standby = on
Tạo file cấu hình recovery
Tạo file recovery bằng cách copy file recovery mẫu bằng câu lệnh sau.
$ cp -avr /usr/share/postgresql/9.3/recovery.conf.sample /var/lib/postgresql/9.3/main/recovery.conf
Edit the recovery file
$ vi /var/lib/postgresql/9.3/main/recovery.conf
Cập nhật lại cấu hình trong file như sau
standby_mode = on
Cấu hình lại kết nối tới primary server. Thay [primary-external-IP] thanh external IP primary server và [password] là mật khẩu cho user repuser đã tạo bên trên và lưu lại.
primary_conninfo = 'host=[primary-external-IP] port=5432 user=repuser password=[password]'
Start postgres server
$ service postgresql start
Link tham khảo: https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby
III. Load balancing
HAProxy
Cài đặt HAProxy
$ sudo apt install haproxy
SSL certificate
$ sudo mkdir /etc/ssl/odoo
$ sudo openssl genrsa -out /etc/ssl/odoo/odoo.key 1024
$ sudo openssl req -new -key /etc/ssl/odoo/odoo.key
-out /etc/ssl/odoo/odoo.csr
> Country Name (2 letter code) [AU]:BE
> State or Province Name (full name) [Some-State]:Wal-Brabant
> Locality Name (eg, city) []:LLN
> Organization Name (eg, company) [Internet Widgits Pty Ltd]: PSTech
> Organizational Unit Name (eg, section) []:
> Common Name (e.g. server FQDN or YOUR name) []:odoo.training.internal
> Email Address []:
> Please enter the following 'extra' attributes to be sent with your certificate request
> A challenge password []:
> An optional company name []:
$ sudo openssl x509 -req -days 365 -in /etc/ssl/odoo/odoo.csr
-signkey /etc/ssl/odoo/odoo.key
-out /etc/ssl/odoo/odoo.crt
$ sudo cat /etc/ssl/odoo/odoo.crt /etc/ssl/odoo/odoo.key
| sudo tee /etc/haproxy/odoo.pem
Configure HAProxy
$ sudo vi /etc/haproxy/haproxy.cfg
global
log /dev/log local1 warning
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 3000
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
ssl-default-bind-options no-sslv3 no-tls-tickets
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 900s
timeout server 900s
timeout check 90s
listen stats
bind *:1936
mode http
stats enable
stats hide-version
stats realm Haproxy Statistics
stats auth odoo:odoo
stats uri /haproxy-status
frontend odoo_no_ssl
bind *:80
maxconn 3000
option http-server-close
option forwardfor
reqadd X-Forwarded-Proto: http
reqadd X-Forwarded-Port: 80
default_backend backend_odoo_no_ssl
frontend odoo_ssl
bind *:443 ssl crt /etc/haproxy/odoo.pem
maxconn 3000
option http-server-close
option forwardfor
reqadd X-Forwarded-Proto: https
reqadd X-Forwarded-Port: 443
default_backend backend_odoo_ssl
backend backend_odoo_no_ssl
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.0rnHost: odoo.training.internal
default-server inter 10s rise 1 fall 3
http-check send-state
server odoo1 192.168.56.10:80 check
server odoo2 192.168.56.11:80 check
backend backend_odoo_ssl
mode http
balance roundrobin
option httpchk HEAD / HTTP/1.0rnHost: odoo.training.internal
default-server inter 10s rise 1 fall 3
http-check send-state
server odoo1 192.168.56.10:443 ssl verify none check check-ssl
server odoo2 192.168.56.11:443 ssl verify none check check-ssl
IV. Sessions cleaning (Tùy chọn)
Cứ mỗi ~1000 request, Odoo sẽ xoá các session đã cũ. Và đó là một vấn đề trên hệ thống file local hay chia sẻ file như NFS. Để bỏ qua bottleneck hiệu năng ở đây ta sẽ phải dùng việc Odoo xoá dữ liệu bằng cách sử dụng kỹ thuật monkey patching để ghi đè đoạn code của Odoo.
Tạo một module mới, trong file session.py
from openerp import http
def session_gc(session_store):
pass
http.session_gc = session_gc
Tạo cron job xoá sessions như sau
$ crontab -e
48 * * * * find /filestore/sessions -mtime +8 -delete
Hi vọng những chia sẻ cấu hình nâng cao cho mô hình thiết kế multiple server ở trên có thể giúp ích cho bạn. Để biết thêm những thông tin mới nhất phần mềm quản lý doanh nghiệp ERP, hay muốn đăng ký tư vấn dùng thử phần mềm ERP, bạn có thể để lại thông tin hoặc liên hệ ngay với IZISolution nhé!