Add HAproxy doc
parent
f2f548112d
commit
35c2bc7dd8
|
|
@ -0,0 +1,109 @@
|
||||||
|
# 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.1`
|
||||||
|
* `mm2.example.com` <=> `192.0.2.2`
|
||||||
|
* `mm3.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](https://github.com/misi/mm-ansible)
|
||||||
|
[](https://asciinema.org/a/311365)
|
||||||
|
|
||||||
|
## 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.4` as redis HA cluster ip.
|
||||||
|
It is out of scope howto deploy it.
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
``` plaintext
|
||||||
|
bind 192.0.2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
And use `192.0.2.1` where we use in this example `192.0.2.4`
|
||||||
|
|
||||||
|
* modify /etc/ferm/ferm.cfg or where ever your firewall config is to allow incoming redis
|
||||||
|
|
||||||
|
``` plaintext
|
||||||
|
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
|
||||||
|
|
||||||
|
``` js
|
||||||
|
multipartyServer : 'meet.example.com',
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setup Server config
|
||||||
|
|
||||||
|
mm/configs/server/config.js
|
||||||
|
|
||||||
|
``` 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
|
||||||
|
|
||||||
|
``` plaintext
|
||||||
|
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
|
||||||
|
```
|
||||||
Loading…
Reference in New Issue