Tomsk Sysadmins Forum
Unix => Администрирование => Topic started by: igor7777 on August 30, 2010, 23:23:26
-
Всем доброго времени суток.
Не сочтите за троллизм и не бейте ногами, задача такова: надо оттестить пару сервисов в "типакластерном" режиме.
Проблема - компутер только один, но на нем 2 сетевые карты. FreeBSD 8.1. Тестировать предполагается чередующимся отрыванием кабелей от сетевых карт. Надо повесить на каждую из сетевух адрес вида 192.168.0.x/24 и при этом чтобы каждая отвечала сама за себя, т.е. ответ шел с той сетевухи, на которую пришел запрос. Обе карты воткнуты в один свитч, естественно.
Можно ли такое сделать без особых танцев с бубном? Варианты "не клепать мозги и сделать по-нормальному" не предлагайте, в рабочем варианты будет все по-нормальному, а потестить хотелось бы на скорую руку с имеющимися средствами.
Заранее благодарен за ответы.
-
эээ... уважаемый... как бы так по корректнее ответить то??? эммм... в общем, если я все правильно понял, то тебе надо сильно "по клепать мозги" чтобы сделать наоборот...
-
Когда компутер один, ставят виртуалки. Кластера бывают сильно разными, это довольно общий такой термин, надо уточнить.
-
dudes, по дефолту ответ всегда приходит на ту сетевуху (а если мы говорим о все же о классических сервисах, то читать "на тот ip address") с которой пришел запрос... как бы оно по умолчанию так...
-
Вопрос простой - можно или нельзя? Я уже сказал, что это тестовый изврат, что на продакшене будут нормальные 2 машины. Можно ли на скорую руку сделать так, чтобы каждая сетевуха отвечала сама за себя, чтобы на каждый из IPёв можно было повесить по сервису, nginx, mysql & etc, чтобы это работало как 2 разные машины? Работоспособность нужна исключительно в пределах одного свитча.
Убедительно прошу абстрагироваться от философских вопросов зачем так извращаться и советов как сделать "правильно" и просто ответиться на вопрос - можно ли во фре8.1 сделать описанное мною? если нет, то так и отвечаем, на этом диалог иссякнет.
2Green: сегодня проверил. На машине em0 (192.168.0.1) и em1(192.168.0.2), обе тыкнуты в один свитч. В тот же свитч ткнута машина, с которой делались пинги (192.168.0.3). Оба айпи пингуются. При выдергивании кабеля из ем1, перестает пинговаться только 192.168.0.2, 192.168.0.1 - пингуется. При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0. Хочется узнать, можно настроить так, чтобы переставал пингаться только тот интерфейс, из которого выдернут кабель, а второй работал бы при этом?
-
Перестаньте извращаться и идите по нормальному пути, как это происходит в кластерах. Если позволяет ваш свитч, объедините обе сетевухи в один канал (bonding, etherchannel. etc). Это обеспечит вам надежность канала и увеличение пропускной способности. Доступность сервисов в кластере обеспечивается инфраструктурой кластера, которая "играет" с mac-адресами узлов кластера для обеспечения поддержания подключений при миграции виртуальных машин с одного узла кластера на другой.
Сомневаюсь, что в BSD эти технологии отличаются от применяемых в Linux.
Т.е. RTFM, наконец! ;)
-
При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0. Хочется узнать, можно настроить так, чтобы переставал пингаться только тот интерфейс, из которого выдернут кабель, а второй работал бы при этом?
сами себе и ответили
абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.
зы: но bonding всё-же лучше
-
как вариант, наверное, можно поднять две виртуалки и тестить на них
-
сами себе и ответили
абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.
Спасибо огромное. Хоть кто-то услышал что мне надо. Я знаю, что задача дурная, о чем честно предупредил сразу.
зы: но bonding всё-же лучше
Мне надо было выяснить можно ли сделать так, чтобы с точки зрения сети 1 машина выглядела как 2. Не объединить, а наоборот - разделить интерфейсы, чтобы они работали независимо, при этом находясь и логически, и физически в одной сети.
Предложенный метод немного не то, что хотелось бы, но если по-другому нельзя, то подойдет и этот, все одно задача временная.
Еще рас спасибо за подсказку.
как вариант, наверное, можно поднять две виртуалки и тестить на них
Про это думал уже, но времени возиться особо нет.
-
абстрагируюсь. задача конечно дурная, но решается скриптом-watchdog типа-демоном (крон не осилит), чекающим состояние линка раз 50-100 в секунду, чуть что - выдаёт команду смены дефолтного интерфейса. python|perl|C|и тп по вкусу.
Кстати, как это делается? Не нагуглил сходу ответа, у ifconfig'а только defaultif похожа на нужное, но она для ICMPv6.
-
с точки зрения сети 1 машина выглядела как 2
bonding + два ip на bond-interface ?
зы: ниже правильно припомнили возможность ipfw (iptables в линукс) возвращать пакет на интерфейс откуда пришел запрос - эффект тотже будет
Кстати, как это делается?
iproute во фрибсд есть поди ?
было допустим "default via 192.168.3.1 dev eth0"
ip ro del default
ip ro add default dev eth1 via 192.168.3.1
а как на С - взять исходник тогоже iproute
-
В гугле встречал решения для отправки пакета через тот интерфейс откуда он пришел (решается на уровне ipfw). В моем случае были правда vpn + em0.
-
Один момент - если оба адреса будут в одной подсети, между ними никакого рутинга настроить не удастся.
-
так вроде и не нужен по постановке задачи
-
Не, ну сделать-то так конечно можно, хоть задача и извратная. Лет 5 назад я с таким экспериментировал. Вот только это не имеет никакого смысла - потому что тестироваться-то будут совсем другие условия, чем будет в "нормальном" решении. Ключи тоже можно искать под фонарем, да найти не свои...
-
В гугле встречал решения для отправки пакета через тот интерфейс откуда он пришел (решается на уровне ipfw). В моем случае были правда vpn + em0.
хм, типа так? не могу сейчас проверить, будет ли такое работать
ipfw XX add fwd 192.168.0.2 ip from 192.168.0.2 to any via em1
-
Такая строка бессмысленна, зачем слать пакет хосту, с которого он пришел?.. Решение, среди прочего, описано на http://nuclight.livejournal.com/124348.html (правда, небольшой патч нужен).
Однако повторюсь - это не та задача, которую следует решать и проверять, потому что реальные условия будут совсем иные. Только вредная потеря времени, это как "ложное чувство безопасности".
-
Однако повторюсь - это не та задача, которую следует решать и проверять, потому что реальные условия будут совсем иные. Только вредная потеря времени, это как "ложное чувство безопасности".
Спасибо, почитаю, попытаюсь осознать. И в свою очередь повторюсь, раз в третий уже наверное: мне надо оттестить работу двух нод. Для двух нод по-хорошему надо 2 машины. Но машина - только одна, зато с двумя сетевухами. Поэтому спросил можно сделать так, чтобы с точки зрения сети машина была не одна, а как бы две. Внутренний роутинг не нужен. Нужно поднять 2 одинаковых сервиса на разных айпи, чтобы каждый из них был доступен только при условии физического соединения соответствующей сетевухи со свитчом. Это очень узкая частная мелкая задачка, которая решается в преддверии полномасштабного проектирования. Не надо при виде слова "кластер" начинать мыслить штампами в виде бондинга, эзерлинка, транков и прочего. Задача ровно такая, как я ее описал, не надо ничего додумывать.
Собственно, вопрос был задан толко потому, что при гуглении видел, что такой вопрос задавался много где, но ответа не было дано, зато везде начинали советовать не клепать мозги и учить как надо делать. Тут, увы, получилось почти то же самое.
-
аха, афтар таки воткул и настроил две сетевухи в одну сеть и посмотрел что будет происходить и сделал быстрые выводы. выводы не полные, потому как надо четко понимать как работает ARP, адресация на MAC-уровне и какие там таймауты. таймауты ключевое слово.
рекомендую подтянуть мат часть и сделать правильные выводы.
правильно здесь подсказавают про виртуальные машины, никто не мешает запустить две виртуальки на одном компе.
не обязательно запускать полные виртуалки, в данном случае наверно можно обойтись простым FreeBSD'шным jail'ом (я только не уверен допинали ли его в 8.1 до уровня разных ARP таблиц, надо пробовать)
ну и /usr/ports/sysutils/heartbeat вам в помощь.
-
Мда. Автор СРАЗУ воткнул две сетевухи в одну сеть. Автор НЕ настроил две сетевухи так, как хотел. Выводов, соответственно, никаких НЕ сделал. Автор способен сам решить, нужна ему такая схема или нет, соответственно, НЕ нуждается в советах так НЕ делать. Автору нужен был простой ответ на вопрос, можно ли сделать описываемое или нельзя. Если можно, то как? Если нельзя, то почему?
ЗЫ: Хёртбит на этой машине мне не нужен, он будет стоять в другом месте.
-
Внутренний или внешний, но если "... повесить на каждую из сетевух адрес вида 192.168.0.x/24" то нужно ещё заставить машину забыть, что оба адреса принадлежат ей. Иначе все пакеты спокойно пойдут через lo. А таблица маршрутизации на части не делится...
-
2Green: сегодня проверил. На машине em0 (192.168.0.1) и em1(192.168.0.2), обе тыкнуты в один свитч. В тот же свитч ткнута машина, с которой делались пинги (192.168.0.3). Оба айпи пингуются. При выдергивании кабеля из ем1, перестает пинговаться только 192.168.0.2, 192.168.0.1 - пингуется. При выдергивании кабеля из ем0 пинговаться перестают оба адреса. Очевидно, что принимают запросы оба интерфейса, а ответ уходит с одного дефолтного, в данном случае - ем0.
вот тут вы сделали выводы,
потом вы отрицаете, что сделали выводы.
-
2SinKlaus: кажется начинает доходить. Выходит, я пытаюсь сделать так, чтобы машина извне была как 2, но при этом сама себя она тоже должна иметь какой-то определенный интерфейс, чтобы видеть сеть. Фактически, надо сделать так,чтобы машина растроилась, 2 для внешних пользователей + одна сама для себя. Мда, это уже шизофрения выходит)
Кстати, в 7.1 добавили опцию ROUTETABLE=X. Несколько таблиц роутинга. Не то ли это самое деление таблицы маршрутизации?
-
Вот видите, Вы уже сами начинаете понимать, чем эта задача отличается от настоящих двух нод. Да, её нужно либо "утроить" (хост + 2 ноды-вируталки), либо на хост-машине поднимается виртуалка со своим адресом, подключенная к выходу сетевухи хоста через виртуальный свитч (делается бридж). Тогда двумя нодами будут хост и виртуалка. Правда, здесь будет больше геморроя, чем в варианте с 2 виртуалками, играться с CARP и т.п.
А несколько таблиц роутинга в 7-ке для Вашей задачи не очень подходят, потому что полного разделения сетевого стека при этом нет. Для несколько другого создавались, всё же.
-
Всем доброго времени суток.
Не сочтите за троллизм и не бейте ногами, задача такова: надо оттестить пару сервисов в "типакластерном" режиме.
Проблема - компутер только один, но на нем 2 сетевые карты. FreeBSD 8.1. Тестировать предполагается чередующимся отрыванием кабелей от сетевых карт. Надо повесить на каждую из сетевух адрес вида 192.168.0.x/24 и при этом чтобы каждая отвечала сама за себя, т.е. ответ шел с той сетевухи, на которую пришел запрос. Обе карты воткнуты в один свитч, естественно.
Можно ли такое сделать без особых танцев с бубном? Варианты "не клепать мозги и сделать по-нормальному" не предлагайте, в рабочем варианты будет все по-нормальному, а потестить хотелось бы на скорую руку с имеющимися средствами.
Заранее благодарен за ответы.
Реально ставь две сетевухи и в rc.conf присваивай им IP обе будут работать только не факт что ответы будут отсылаться с тожу сетевухи на которую пришёл запрос, ну на карйня фаервол PF и там благодаря reply-to всё у тебя будет раюботать.
Ну а так если чесно можно хоть 10 ip из одной и тойже подсети навешать на 1у сетеуху может тебе это пригодится:
ifconfig_em0="inet 192.168.0.1 netmask 255.255.0.0"
ifconfig_em0_alias0="inet 192.168.1.252 netmask 255.255.0.0"
ifconfig_em0_alias1="inet 192.168.10.1 netmask 255.255.0.0"
и т. д.