Смешанный кластер Riak с экземплярами Docker-контейнеров и неконтейнерных экземпляров
У меня есть кластер riak, работающий на нескольких виртуальных машинах. Сейчас я экспериментирую с Docker и хотел бы добавить узлы в кластер, которые работают в Docker-контейнерах.
Как настроить сетевые компоненты в этом сценарии? Мои контейнеры могут видеть неконтейнерные экземпляры и могут присоединяться к кластеру, но неконтейнерные экземпляры не могут инициировать связь с контейнерными экземплярами.
Допустим, у меня есть две виртуальные машины, работающие в режиме riak с IP-адресами 192.168.1.1 и.2. Мой док-хост имеет IP-адрес 192.168.1.3. Трем контейнерам riak назначаются IP-адреса 172.17.0.1, .2 и.3. Я подключил каждый экземпляр контейнера к кластеру.
Бег riak-admin member-status
на любом узле показывает что-то вроде этого:
Статусный ожидающий узел звонка ------------------------------------------ действительный 0,0% 32,8% 'riak@172.17.0.1' действительный 0,0% 0,0% 'riak@172.17.0.2' действительный 0,0% 0,0% 'riak@172.17.0.3' действительный 50,0% 32,8% 'riak@192.168.1.1' действительный 50,0% 32,8% 'riak@192.168.1.2'
Кластер не может сбалансировать себя, потому что виртуальные машины не могут инициировать связь с контейнерами.
Я знаю, как выставить порты в моем контейнере и опубликовать их на хосте докера, но я не уверен, как тогда присоединить контейнерный узел riak к кластеру, используя IP-адрес хоста докера и опубликованный порт...
1 ответ
Репликация с несколькими центрами данных предназначена для копирования данных между кластерами, вероятно, это не поможет настроить ваш кластер.
Ключ, вероятно, будет открывать все необходимые порты, в том числе:
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 должны быть открыты для работы кластера, два других нужны только в том случае, если клиентские запросы будут напрямую достигать экземпляров в контейнерах.