Узел 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-адрес все еще присутствует в журнале ошибок.