Здравствуйте.
Вкратце хотим добиться:
Максимально возможное количество соединений на edge-сервере при раздаче потоков, лимит которых будет упираться в лимит CPU/и или памяти.
Edge имеют одно dns имя. Все edge за classic load balancer+auto scaling group. Соответственно потоки клиенты будут получать по dns имени балансировщика. Тесты проводились с одним edge.
Окружение:
клиент (тестирующий) - c5.4xlarge (CPU-16 RAM-32):
-Xmx16G
-Xms16G
edge - c5.4xlarge (CPU-16 RAM-32):
-Xmx16G
-Xms16G
origin - с5.2xlarge (CPU-8 RAM-16):
-Xmx8G
-Xms8G
Везде:
Версия:
5.2.838 (при обновлениях на более новые появляется проблема подключения по ws. По возможности хотел бы вернуться к этому позже. пока проверяю на той, что работает)
сборщик мусора - ZGC
ice_tcp_transport=true
net.ipv4.ip_local_port_range = 54001 65000
media_port_from=31008
media_port_to=47000
wcs_agent_port_from=49001
wcs_agent_port_to=53999
WCS_FD_LIMIT=100000
webrtc_cc2_twcc=false
Есть другие настройки, скорее всего ненужные.
iptables -S:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4431 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1935 -j ACCEPT
-A INPUT -p udp -m udp --dport 1935 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 554 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8081 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8084 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8082 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8445 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8444 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9091 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20000:53999 -j ACCEPT
-A INPUT -p udp -m udp --dport 20000:53999 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -j DROP
-A OUTPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
(некоторые порты от прежних настроек, будем убирать)
/etc/sysctl.conf сожержит:
fs.file-max = 100000
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_congestion_control=htcp
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_rfc1337 = 1
net.ipv4.tcp_fin_timeout = 15
net.core.somaxconn = 1024
net.core.netdev_max_backlog = 65536
net.core.optmem_max = 25165824
net.ipv4.tcp_mem = 65536 131072 262144
net.ipv4.udp_mem = 65536 131072 262144
net.core.rmem_default = 25165824
net.core.rmem_max = 25165824
net.ipv4.tcp_rmem = 20480 12582912 25165824
net.ipv4.udp_rmem_min = 16384
net.core.wmem_default = 25165824
net.core.wmem_max = 25165824
net.ipv4.tcp_wmem = 20480 12582912 25165824
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_reuse = 1
(по умолчанию не было, выставляли исходя из рекомендаций по настройке сети., ни на что не повлияло)
Проверка канала напрямую по внешнему ip (от тестирующего к edge):
iperf3 -c xxxxxx -p 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 579 MBytes 4.85 Gbits/sec 48 718 KBytes
[ 4] 1.00-2.00 sec 539 MBytes 4.52 Gbits/sec 103 870 KBytes
[ 4] 2.00-3.00 sec 566 MBytes 4.75 Gbits/sec 116 981 KBytes
[ 4] 3.00-4.00 sec 538 MBytes 4.51 Gbits/sec 153 397 KBytes
^C[ 4] 4.00-4.62 sec 349 MBytes 4.72 Gbits/sec 0 922 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-4.62 sec 2.51 GBytes 4.67 Gbits/sec 420 sender
[ 4] 0.00-4.62 sec 0.00 Bytes 0.00 bits/sec receiver
iperf3 -c xxxxxx -p 5201 -R
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 572 MBytes 4.79 Gbits/sec
[ 4] 1.00-2.00 sec 571 MBytes 4.79 Gbits/sec
[ 4] 2.00-3.00 sec 571 MBytes 4.79 Gbits/sec
[ 4] 3.00-4.00 sec 571 MBytes 4.79 Gbits/sec
^C[ 4] 4.00-4.61 sec 346 MBytes 4.78 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-4.61 sec 0.00 Bytes 0.00 bits/sec sender
[ 4] 0.00-4.61 sec 2.57 GBytes 4.79 Gbits/sec receiver
Edge находятся в AWS Classic load balancer+ Autoscaling group (настраивал согласно статье
https://flashphoner.com/cdn-s-balan...rovaniem-na-baze-amazon-web-services/?lang=ru)
Тестирующий, origin, edge находятся в одной placement group. тип - cluster (
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)
Проверка канала по dns имени балансировщика edge (от тестирующего к edge):
iperf3 -c xxxxxx -p 5201:
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 371 MBytes 3.11 Gbits/sec 95 235 KBytes
[ 4] 1.00-2.00 sec 471 MBytes 3.95 Gbits/sec 115 505 KBytes
[ 4] 2.00-3.00 sec 516 MBytes 4.33 Gbits/sec 229 472 KBytes
[ 4] 3.00-4.00 sec 365 MBytes 3.06 Gbits/sec 274 404 KBytes
[ 4] 4.00-5.00 sec 455 MBytes 3.82 Gbits/sec 106 359 KBytes
[ 4] 5.00-6.00 sec 514 MBytes 4.31 Gbits/sec 148 626 KBytes
[ 4] 6.00-7.00 sec 469 MBytes 3.93 Gbits/sec 182 293 KBytes
[ 4] 7.00-8.00 sec 436 MBytes 3.66 Gbits/sec 266 221 KBytes
[ 4] 8.00-9.00 sec 402 MBytes 3.38 Gbits/sec 144 444 KBytes
[ 4] 9.00-10.00 sec 440 MBytes 3.69 Gbits/sec 157 614 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 4.34 GBytes 3.72 Gbits/sec 1716 sender
[ 4] 0.00-10.00 sec 3.98 GBytes 3.42 Gbits/sec receiver
iperf3 -c xxxxxx -p 5201 -R:
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 100 KBytes 822 Kbits/sec
[ 4] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec
[ 4] 2.00-3.00 sec 0.00 Bytes 0.00 bits/sec
[ 4] 3.00-4.00 sec 0.00 Bytes 0.00 bits/sec
[ 4] 4.00-5.00 sec 0.00 Bytes 0.00 bits/sec
iperf3: error - control socket has closed unexpectedly
На тестирующей машине выставляется:
wcs_activity_timer_timeout=86400000
Тестировалось с помощью "pull streams" в количестве 1000 соединений. Указывался внешний IP непосредственно edge.
Исходный поток, опубликованный на origin имеет битрейт примерно от 1.5 до 2 мбит
При тестировании наблюдается следующее:
при достижении примерно 300 соединений (примерно 500 мбит/с) перестаёт расти скорость, так и остаётся - максимум 500 мбит/с. Количество соединений при этом увеличивается до 1000, как и было указано при запуске теста. При этом изображение начинает опаздывать, затем тормозить, если соединений больше, чем примерно 300.
Скорость замерялась утилитой nload.
Значительных нагрузок на CPU, память не наблюдается как на edge, так и на тестирующей машине.
Ставили много экспериментов, всё упирается в скорость раздачи в 500 мбит/с. Просьба помочь с настройками, дать рекомендации по настройке инфраструктуры, если допустили концептуальные ошибки.
Те же результаты наблюдались с типом машин edge, тестирующей- с5.2xlarge (CPU-8 RAM-16 -Xmx8G
-Xms8G).
Заранее спасибо.