Узел Riak больше не работает после изменения IP-адреса

Я использую виртуальный сервер Amazon EC2 Ubuntu 12.04 в качестве своего единственного узла Riak. Я прошел все надлежащие этапы настройки Riak на экземпляре, используя руководство на веб-сайте basho здесь. куда x.x.x.x это частный IP-адрес экземпляра, включая:

Монтаж

  • С помощью sudo su - чтобы получить права суперпользователя (EC2 регистрирует меня как 'Ubuntu').

  • Установка SSL Lib с помощью:

    sudo apt-get install libssl0.9.8

  • Загрузка 64-битного пакета для 12.04:

    wget http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/CURRENT/ubuntu/precise/riak_1.2.1-1_amd64.deb

  • Затем распаковка через:

    sudo dpkg -i riak_1.2.1-1_amd64.deb

Как указано в руководстве basho, я обновил эти два файла (используя vi):

vm.args

  • изменения -name riak@x.x.x.x на частный IP моего экземпляра.

app.config

  • изменения {http, [ {"x.x.x.x", 8098 } ]} на частный IP моего экземпляра.

  • изменения {pb_ip, "x.x.x.x"} на частный IP моего экземпляра.

Узел Riak работал нормально, когда я впервые настроил сервер и выполнил описанное выше, я мог подключиться к узлу и, используя riak start затем riak-admin test вернулся успешно с:

>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@x.x.x.x'

На следующий день я запустил экземпляр, повторил описанный выше процесс (игнорируя установку) с новым IP-адресом экземпляра. y.y.y.y (частный IP-адрес экземпляра меняется каждый раз, когда он останавливается / запускается) и набрал riak start в терминал, только чтобы встретить с:

>Attempting to restart script through sudo -H -u riak
>Riak failed to start within 15 seconds,
>see the output of 'riak console' for more information.
>If you want to wait longer, set the environment variable
>WAIT_FOR_ERLANG to the number of seconds to wait

В консоли riak выдается следующая ошибка:

>gen_server riak_core_capability terminated with reason: no function clause matching orddict:fetch('riak@y.y.y.y', [{'riak@x.x.x.x',[{{riak_core,staged_joins},[true,false]},{{riak_core,vnode_routing},[proxy,...]},...]}])

куда y.y.y.y это новый экземпляр IP-адрес и x.x.x.x был старый.

Я уже некоторое время ломаю голову над этим и не могу найти что-либо по этой теме, единственное решение, о котором я могу подумать, - это переустановить Riak на случай, если мои каталоги PATH выйдут из строя. Если это не удастся, моим последним средством будет завершить работу экземпляра и перенастроить Riak на новом экземпляре. Итак, прежде чем я прыгну пистолет, я хотел бы спросить:

  • После обновления полей в app.config а также vm.args с новым IP-адресом экземпляра, почему riak start Команда больше не успешна?

  • Есть ли способ для экземпляра Ubuntu EC2 назначить статический частный IP? Это не только поможет решить проблему, но и сэкономит мне время на обновление app.config а также vm.args каждый раз, когда я запускаю / останавливаю экземпляр.

3 ответа

Решение

Итак, после еще нескольких копаний и интенсивного чтения, я нашел решение:

Вам нужно удалить кольцо Riak и запустить Riak снова, чтобы сбросить riak_core.

Вы можете сделать это с помощью этой команды в терминале:

rm -rf /var/lib/riak/ring/*

  • ПРИМЕЧАНИЕ: это должно быть сделано после того, как вы обновили app.config а также vm.args с новым IP-адресом сервера могут возникнуть неприятные побочные эффекты.

затем

riak start

Я больше не выдавал ошибку "не удалось подключиться", и после выдачи riak-admin test Команда, которую я получил приятно (где y.y.y.y это частный IP моего экземпляра):

>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@y.y.y.y'

Должен отметить, что это решение относится как к виртуальным, так и к физическим серверам. Хотя я мог бы предположить, что переназначение IP-адресов будет гораздо более редким явлением на физических серверах.

Теперь, когда это решает проблему, это все равно означает, что всякий раз, когда мне нужно перезагрузить экземпляр, я должен пройти редактирование app.config а также vm.args файлы для изменения частного IP-адреса (помните, что частные IP-адреса меняются каждый раз при запуске / остановке экземпляра Ubuntu), а затем очищайте кольцо Riak с помощью приведенной выше команды, так что это не совсем элегантное решение.

Если кто-нибудь знает способ установить статический частный IP-адрес для экземпляра EC2 (или другое решение, которое решает обе проблемы?), Это решит эту проблему напрямую.

РЕДАКТИРОВАТЬ: 14/12/12

Ограниченное решение для присвоения статического IP-адреса экземпляру EC2:

Amazon Web Services позволяет связывать Elastic IP с экземплярами EC2 (любого типа). Поэтому, если с экземпляром связан эластичный IP-адрес, даже если он перезагружен, этот IP-адрес останется связанным с этим экземпляром. Вы можете найти документацию по эластичным IP здесь.

Если вы находитесь на уровне бесплатного использования Amazon, создание Elastic IP не должно взимать плату, если оно связано с работающим экземпляром. Если эластичный IP-адрес отключен, Amazon будет взимать плату за каждый час работы неиспользуемого Elastic IP-адреса до тех пор, пока этот Elastic IP-адрес остается диссоциированным. Например, завершение экземпляра приведет к разъединению эластичного IP, если только этот эластичный IP не будет повторно связан или освобожден, применяется вышеприведенное. Полная остановка вашего экземпляра и последующее его запуск также приведут к диссоциации эластичного IP.

У вас может быть максимум один эластичный IP на экземпляр, и это повлечет за собой дополнительные расходы.

Для тех, кто заинтересован, вы можете найти дополнительную информацию о ценах Elastic IP здесь в разделе Elastic IP Addresses.

Начиная с Riak 1.3, riak-admin reip устарел, и использование замены кластера riak-admin является рекомендуемым способом замены имени кластера.

Вот команды, которые я должен был выполнить:

riak stop # stop the node
riak-admin down riak@127.0.0.1 # take it down
sudo rm -rf /var/lib/riak/ring/* # delete the riak ring
sudo sed -i "s/127.0.0.1/`hostname -i`/g" /etc/riak/vm.args # Change the name in config
riak-admin cluster force-replace riak@127.0.0.1 riak@"`hostname -i`" # replace the name
riak start # start the node

Это должно установить имя узла на riak@[ваш внутренний IP-адрес EC2].

Помимо изменения PB и HTTP-IP в app.config и IP-адреса vm.args, мне также пришлось выполнить:

http://docs.basho.com/riak/1.2.0/references/Command-Line-Tools---riak-admin/

Без этого, запуская консоль riak и просматривая вывод, старый IP-адрес все еще присутствует в журнале ошибок.

Другие вопросы по тегам