2.9 KiB
Howto deploy a (room based) loadbalanced cluster
We use in this example an HA proxy loadbalancer to loadbalance between 3 backend server The static web will be loadbalanced rounrdobin, and the websocket(signaling) and the media will be loadbalnced based on roomId URL parameter.
IP and dns
In this basic example we use the following names and ips:
Backend
mm1.example.com<=>192.0.2.1mm2.example.com<=>192.0.2.2mm3.example.com<=>192.0.2.3
Redis
redis.example.com<=>192.0.2.4
LoadBalncer HAproxy
meet.example.com<=>192.0.2.5
Deploy multiple backend/worker
For example with ansible
Read more here: mm-ansible
Setup redis for central session store
Use one redis for all multiparty meeting
- Deploy a redis cluster so use one redis HA cluster for all instances.
- We will use in our actual example
192.0.2.4as redis HA cluster ip. It is out of scope howto deploy it.
- We will use in our actual example
OR
-
Just for testing you can use one of the redis from the worker's. e.g. If you plan only for testing on your first worker
-
Configure redis configs/redis/redis.conf to not only bind to your loopback but also to your global ip address too:
bind 192.0.2.1And use
192.0.2.1where we use in this example192.0.2.4 -
modify /etc/ferm/ferm.cfg or where ever your firewall config is to allow incoming redis
chain INPUT { policy DROP; saddr mm2.example.com proto tcp dport 6379 ACCEPT; saddr mm3.example.com proto tcp dport 6379 ACCEPT; }
-
-
Use password or if you don't (like in this basic example) take care and use strict firewall rules
Setup backends/workers
Setup App config
mm/configs/app/config.js
multipartyServer : 'meet.example.com',
Setup Server config
mm/configs/server/config.js
redisOptions : { host: '10.0.2.4'},
listeningPort: 80,
httpOnly: true,
trustProxy : ['10.0.2.5'],
Deploy host with HA proxy
-
configure cerificate / letsencrypt for your meet.example.com
- in this example we put concat the privkey and full cert chain to /root/fullchain.pem.
-
Install and setup haproxy
apt install haproxy -
Add to /etc/haproxy/haproxy.cfg config
backend multipartymeeting
balance url_param roomId
hash-type consistent
server mm1 192.0.2.1:80 check maxconn 20 verify none
server mm2 192.0.2.2:80 check maxconn 20 verify none
server mm3 192.0.2.3:80 check maxconn 20 verify none
frontend meet.example.com
bind 192.0.2.5:80
bind 192.0.2.5:443 ssl crt /root/fullchain.pem
http-request redirect scheme https unless { ssl_fc }
reqadd X-Forwarded-Proto:\ https
default_backend multipartymeeting