更改IP地址后,Riak节点不再工作

Kil*_*705 5 amazon-ec2 riak ubuntu-12.04

我正在使用实例化的Amazon EC2虚拟Ubuntu 12.04服务器作为我的单个Riak节点.我已经通过关于使用芭蕉网站上的引导实例设置了Riak的所有适当的阶段了这里.x.x.x.x 实例的私有IP地址在哪里,其中包括:

安装

  • 使用sudo su -获得root权限(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'
Run Code Online (Sandbox Code Playgroud)

第二天,我启动了实例,重复上述过程(忽略安装),使用实例的新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
Run Code Online (Sandbox Code Playgroud)

在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,...]},...]}])
Run Code Online (Sandbox Code Playgroud)

y.y.y.y新实例IP地址在哪里,是旧实例x.x.x.x.

我一直在摸不着头脑,现在找不到任何关于这个主题的内容,我能想到的唯一解决办法是重新安装Riak,因为我的PATH目录出错了.如果失败了,我的最后一招就是终止实例并在新实例上重新配置Riak.所以在我开枪之前,我想问的是:

  • 在更新字段后app.config,并vm.args用新的实例IP地址,为什么是riak start命令不再成功?

  • 有没有办法为Ubuntu EC2实例分配静态专用IP?这不仅有助于解决这个问题,但节省了我的时间不必更新app.configvm.args每次启动/停止时间的实例.

Kil*_*705 5

因此,经过一些更深入的阅读和激烈的阅读,我找到了一个解决方案:

您需要删除Riak环并再次启动Riak以重置riak_core.

您可以在终端中使用此命令来执行此操作:

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

  • 注意: 这应该您更新完成app.configvm.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'
Run Code Online (Sandbox Code Playgroud)

我应该注意,此解决方案适用于虚拟服务器以及物理服务器.虽然我认为IP的重新分配在物理服务器中会非常罕见.

现在虽然这解决了问题,但仍然意味着每当我需要重新启动实例时,我必须通过编辑app.configvm.args文件来更改私有IP地址(记住每次启动/停止Ubuntu实例时私有IP都会更改)然后使用上面的命令清除Riak环,所以它不是一个优雅的解决方案.

如果有人知道如何设置静态私有IP到EC2实例(或另一个解决这两个障碍的解决方案?),它将彻底解决这个问题.

编辑:12/12/12

一个有限的解决方案来分配静态IP到EC2实例:

Amazon Web Services允许将弹性IP与EC2实例(任何类型)相关联.因此,如果实例具有与之关联的弹性IP,即使重新启动,该IP仍将与该实例关联.您可以在此处找到有关弹性IP的文档.

如果您使用的是亚马逊的免费使用套餐,那么创建弹性IP不应该向您收费,只要它与正在运行的实例相关联即可.如果弹性IP被解除关联,则只要该弹性IP保持解除关联,亚马逊就会对未使用的弹性IP的每个运行小时收取费用.例如,终止实例将解除弹性IP的关联,除非重新关联或释放弹性IP,否则上述情况适用.完全停止您的实例然后在以后启动它也将解除弹性IP的关联.

每个实例最多可以有一个弹性IP,这将产生费用.

对于那些有兴趣,你可以找到更多信息,弹性IP的定价这里弹性IP地址.