У меня есть кластер riak, который работает на нескольких разбросанных виртуальных машинах. Сейчас я экспериментирую с докером и хочу добавить в кластер узлы, работающие в контейнерах докеров.
Как мне настроить сетевые компоненты в этом сценарии? Мои контейнеры могут видеть неконтейнерные экземпляры и могут присоединяться к кластеру, но неконтейнерные экземпляры не могут инициировать связь с контейнерными экземплярами.
Допустим, у меня есть две виртуальные машины, на которых запущен riak с IP-адресами 192.168.1.1 и .2. Мой хост-докер имеет IP-адрес 192.168.1.3. Трем контейнерам riak назначены IP-адреса 172.17.0.1, .2 и .3. Я присоединил каждый экземпляр контейнера к кластеру.
Бег riak-admin member-status
на любом узле показывает примерно так:
Status Ring Pending Node ------------------------------------------ valid 0.0% 32.8% 'riak@172.17.0.1' valid 0.0% 0.0% 'riak@172.17.0.2' valid 0.0% 0.0% 'riak@172.17.0.3' valid 50.0% 32.8% 'riak@192.168.1.1' valid 50.0% 32.8% 'riak@192.168.1.2'
Кластер не может сбалансировать себя, потому что виртуальные машины не могут инициировать обмен данными с контейнерами.
Я знаю, как открывать порты в моем контейнере и публиковать их на хосте докеров, но я не уверен, как затем присоединить контейнерный узел riak к кластеру, используя IP-адрес хостов докеров и опубликованный порт ...
Репликация с несколькими центрами обработки данных предназначена для копирования данных между кластерами, она, вероятно, не поможет настроить ваш кластер.
Ключ, вероятно, будет открывать все необходимые порты, в том числе:
tcp/4369 (epmd)
tcp/8098 (riak http)
tcp/8087 (riak protocol buffers)
tcp/8099 (riak handoff)
tcp/x (riak disterl)
Порт disterl по умолчанию выбирается из временного диапазона портов ОС, но вы можете ограничить его, используя erlang.distribution.port_range.minimum
и erlang.distribution.port_range.maximum
настройки.
Порты 8098 и 8087 необходимы клиентам для доступа к экземпляру Riak в контейнере.
Порт 4369 предназначен для EPMD, который является устройством сопоставления портов, которое позволяет другим узлам находить порт disterl узла Riak.
Порт 8099 необходим экземпляру Riak для приема передачи обслуживания от других узлов.
Порт disterl - это основной канал связи между узлами.
4369, 8099 и порт disterl должны быть доступны для работы кластера, два других необходимы только в том случае, если клиентские запросы будут напрямую достигать экземпляров в контейнерах.