ECMP и Nth, Проблемы и Решения

Описание каждой версии, обсуждение особенностей и недостатков
Ответить
Ilya.Terskov
Сообщения: 4
Зарегистрирован: 28 сен 2020, 14:54

Доброго времени суток имею RB760IGS, а так же 2 провайдера подключенного к нему по 100 мбит каждый (один с белым ip второй без). Попробовал PCC, ECMP и Nth варианты распределения нагрузки и больше всего нравится по чистой производительности Nth, но что-то у нас не сложилось с ним. Есть проблемы на некоторых сайтах, на youtube очень долго думает пока не прогрузит все превью, а так же банальный google.com запрос на поиск иногда задумывается по 30 секунд. С ECMP такого близко нет, все работает исправно. В p2p же все наоборот, ECMP порой задумывается скорость скачет, порой неравномерно распределяется трафик (PCC еще грустнее там огромные скачки), Nth очень быстро набирает около максимальную ширину канала и держит стабильно. На сайтах типа speedtest ECMP использует на upload только одного провайдера (который с белым ip), PCC выдает отличную download и хорошую upload, Nth выдает примерно так же как PCC. А вот на Fast.com (спидтест от нетфликс) все наоборот, Nth выдает низкую задержку 70-72 мс в обе стороны, но очень кривую скорость в оба направления (30-35 мбит) задействуя оба канала, PCC тоже выдает так себе и имеет 100+- мс, зато ECMP выдает 150-160 и на отдачу порядка 120-130, задержка порядка 90. Теперь главный вопрос, что я делаю не так или это особенности работы реализаций распределения нагрузки? Очень нравится Nth если честно и еще вопрос можно ли заменить некоторые правила в mangle на route rule?

Листинг ECMP и Nth

================================ECMP======================================
/ip firewall mangle

add action=mark-connection chain=forward connection-mark=no-mark new-connection-mark=con-WAN1 out-interface=WAN1 passthrough=yes
add action=mark-connection chain=forward connection-mark=no-mark new-connection-mark=con-WAN2 out-interface=WAN2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=con-WAN1 in-interface-list=!WAN new-routing-mark=WAN1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=con-WAN2 in-interface-list=!WAN new-routing-mark=WAN2 passthrough=yes

/ip route

add distance=1 gateway=XXXX routing-mark=WAN1
add distance=1 gateway=YYYY routing-mark=WAN2
add distance=1 gateway=XXXX,YYYY
add check-gateway=ping distance=100 gateway=YYYY
add check-gateway=ping distance=100 gateway=XXXX




================================NTH=======================================
/ip firewall mangle

add action=mark-connection chain=prerouting connection-state=new new-connection-mark=line1 nth=2,1 passthrough=yes src-address=192.168.35.0/24
add action=mark-connection chain=prerouting connection-state=new new-connection-mark=line2 nth=2,2 passthrough=yes src-address=192.168.35.0/24
add action=mark-routing chain=prerouting connection-mark=line1 new-routing-mark=line1 passthrough=yes src-address=192.168.35.0/24
add action=mark-routing chain=prerouting connection-mark=line2 new-routing-mark=line2 passthrough=yes src-address=192.168.35.0/24

/ip route

add check-gateway=ping distance=1 gateway=XXXX routing-mark=line1
add check-gateway=ping distance=1 gateway=YYYY routing-mark=line2
add check-gateway=ping distance=1 gateway=XXXX
add check-gateway=ping distance=2 gateway=YYYY


Если есть варианты решения на PCC буду только рад услышать.
Большое спасибо за любую помощь, я еще очень слаб в ROS.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Nth будет ломать приложения, где используются несколько параллельных соединений, и не предусмотрена работа с двух разных адресов.

Самый нормальный в этом плане вариант PCC с классификатором both-addresses.
Понятно, что при этом он не так ровно будет распределять, как Nth.

ECMP хорошо, когда NAT не используется: тогда его проще всего настроить, меньше нагрузка на CPU, fasttrack не обязательно отключать, но в случае с NAT'ом все равно без mangle не обойтись, так что никаких плюсов.


Telegram: @thexvo
Ilya.Terskov
Сообщения: 4
Зарегистрирован: 28 сен 2020, 14:54

xvo писал(а): 28 сен 2020, 15:13 Nth будет ломать приложения, где используются несколько параллельных соединений, и не предусмотрена работа с двух разных адресов.

Самый нормальный в этом плане вариант PCC с классификатором both-addresses.
Понятно, что при этом он не так ровно будет распределять, как Nth.

ECMP хорошо, когда NAT не используется: тогда его проще всего настроить, меньше нагрузка на CPU, fasttrack не обязательно отключать, но в случае с NAT'ом все равно без mangle не обойтись, так что никаких плюсов.
А что по поводу Route Rules? Говорят ими можно заменить правила mangle некоторые, разве fasttrack можно включать? Он же перебивает маркировку main?
Как можно дополнительно улучшить мой вариант ECMP или хороший пример PCC с нормальной балансировкой?


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Ilya.Terskov писал(а): 28 сен 2020, 15:29 А что по поводу Route Rules? Говорят ими можно заменить правила mangle некоторые
В некоторых случаях можно, будет работать быстрее, чем если через mangle.
Но там очень ограниченные возможности по выбору условий: самое главное, что не поддерживаются списки адресов или интерфейсов.
Так что они хороши, как дополнение.
Ilya.Terskov писал(а): 28 сен 2020, 15:29 разве fasttrack можно включать? Он же перебивает маркировку main?
Если не используется mangle, то почему нет?
Ilya.Terskov писал(а): 28 сен 2020, 15:29 Как можно дополнительно улучшить мой вариант ECMP или хороший пример PCC с нормальной балансировкой?
Не очень понимаю, что вы там хотите улучшить.
И про PCC тоже не очень понятно, о каких ещё вариантах идет речь, и что значит "с нормальной балансировкой"? Я уже написал, что самый нормальный вариант - это both-addresses.


Telegram: @thexvo
Ilya.Terskov
Сообщения: 4
Зарегистрирован: 28 сен 2020, 14:54

xvo писал(а): 28 сен 2020, 18:27
Ilya.Terskov писал(а): 28 сен 2020, 15:29 А что по поводу Route Rules? Говорят ими можно заменить правила mangle некоторые
В некоторых случаях можно, будет работать быстрее, чем если через mangle.
Но там очень ограниченные возможности по выбору условий: самое главное, что не поддерживаются списки адресов или интерфейсов.
Так что они хороши, как дополнение.
Ilya.Terskov писал(а): 28 сен 2020, 15:29 разве fasttrack можно включать? Он же перебивает маркировку main?
Если не используется mangle, то почему нет?
Ilya.Terskov писал(а): 28 сен 2020, 15:29 Как можно дополнительно улучшить мой вариант ECMP или хороший пример PCC с нормальной балансировкой?
Не очень понимаю, что вы там хотите улучшить.
И про PCC тоже не очень понятно, о каких ещё вариантах идет речь, и что значит "с нормальной балансировкой"? Я уже написал, что самый нормальный вариант - это both-addresses.
Вот как раз хотелось бы заменить правила мангл на route rule, такие как lookup-only-in-table, я не совсем понимаю как их можно внести в мой скрипт. С PCC both addresses совсем грустные показатели скорости, на отдачу задействован только провайдер с белым ip, both addresses and ports веселее, но сайты с авторизацией глючат.
Поэтому решил копать в сторону ecmp и максимально упростить код чтобы меньше задержки и нагрузка на процессоре была.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Ilya.Terskov писал(а): 29 сен 2020, 03:24 Вот как раз хотелось бы заменить правила мангл на route rule, такие как lookup-only-in-table, я не совсем понимаю как их можно внести в мой скрипт.
Если сможете реализовать всю логику на route rule - почему бы нет.
Только учтите, что использовать lookup-only-in-table нужно осторожно, например для того, чтобы продолжал работать failover надо держать в именованных таблицах и резервные маршруты тоже.
Ilya.Terskov писал(а): 29 сен 2020, 03:24 С PCC both addresses совсем грустные показатели скорости, на отдачу задействован только провайдер с белым ip, both addresses and ports веселее, но сайты с авторизацией глючат.
Поэтому решил копать в сторону ecmp и максимально упростить код чтобы меньше задержки и нагрузка на процессоре была.
Если PCC не делит канал при нескольких активных соединениях, то где-то ошибка в конфиге.
При PCC both-addresses даже обычный ookla'вский спидтест на загрузку использует оба канала на полную. На отдачу - да, только один.

Ну а так, в принципе у ECMP в некоторых сценариях стохастичность будет лучше даже чем PCC both-addresses-and-ports, но и проблемы те же - банковские сайты/приложения могут не работать.


Telegram: @thexvo
Ilya.Terskov
Сообщения: 4
Зарегистрирован: 28 сен 2020, 14:54

xvo писал(а): 29 сен 2020, 11:00
Ilya.Terskov писал(а): 29 сен 2020, 03:24 Вот как раз хотелось бы заменить правила мангл на route rule, такие как lookup-only-in-table, я не совсем понимаю как их можно внести в мой скрипт.
Если сможете реализовать всю логику на route rule - почему бы нет.
Только учтите, что использовать lookup-only-in-table нужно осторожно, например для того, чтобы продолжал работать failover надо держать в именованных таблицах и резервные маршруты тоже.
Ilya.Terskov писал(а): 29 сен 2020, 03:24 С PCC both addresses совсем грустные показатели скорости, на отдачу задействован только провайдер с белым ip, both addresses and ports веселее, но сайты с авторизацией глючат.
Поэтому решил копать в сторону ecmp и максимально упростить код чтобы меньше задержки и нагрузка на процессоре была.
Если PCC не делит канал при нескольких активных соединениях, то где-то ошибка в конфиге.
При PCC both-addresses даже обычный ookla'вский спидтест на загрузку использует оба канала на полную. На отдачу - да, только один.

Ну а так, в принципе у ECMP в некоторых сценариях стохастичность будет лучше даже чем PCC both-addresses-and-ports, но и проблемы те же - банковские сайты/приложения могут не работать.
Вот хотелось бы пример без мангл правил аналогичный тому что с мангл у меня или хотя бы с сокращением этих правил.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Ilya.Terskov писал(а): 29 сен 2020, 12:33 Вот хотелось бы пример без мангл правил аналогичный тому что с мангл у меня или хотя бы с сокращением этих правил.
Конкретно в случае с ECMP вам особо и нечего заменять на route rules - там и так mangle правил по-минимуму.

Их можно использовать для PBR, исключения какие-нибудь прописать или прибить туннели к определенному провайдеру.
А тут они вам не помогут.


Telegram: @thexvo
Ответить