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

Amazon ec2 更改IP地址后Riak节点不再工作,amazon-ec2,ubuntu-12.04,riak,Amazon Ec2,Ubuntu 12.04,Riak,我使用一个实例AmazonEC2虚拟Ubuntu 12.04服务器作为我的单一Riak节点。我已经使用basho网站上的指南完成了在实例上设置Riak的所有适当阶段。其中x.x.x.x是实例的私有IP地址,包括: 装置 使用sudosu-获得root权限(EC2将我作为“Ubuntu”登录) 使用以下内容安装SSL库: sudo apt get安装libssl0.9.8 下载12.04版本的64位软件包: wgethttp://downloads.basho.com.s3-website-us

我使用一个实例AmazonEC2虚拟Ubuntu 12.04服务器作为我的单一Riak节点。我已经使用basho网站上的指南完成了在实例上设置Riak的所有适当阶段。其中
x.x.x.x
是实例的私有IP地址,包括:

装置
  • 使用sudosu-获得root权限(EC2将我作为“Ubuntu”登录)

  • 使用以下内容安装SSL库:

    sudo apt get安装libssl0.9.8
  • 下载12.04版本的64位软件包:

    wgethttp://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
按照中的说明,我更新了这两个文件(使用vi):

vm.args
  • 更改
    -名称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管理测试
成功返回:

>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@x.x.x.x'
第二天,我启动了该实例,用实例的新IP地址重复上述过程(忽略安装)(实例的私有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
是新实例IP地址,
x.x.x
是旧实例IP地址

我已经为这个问题绞尽脑汁了一段时间,但在这个主题上找不到任何东西,我能想到的唯一解决方案是重新安装Riak,以防我的路径目录出错。如果失败,我最后的办法就是终止实例并在新实例上重新配置Riak。所以在我开炮之前,我想问的是:

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

  • 有没有办法为Ubuntu EC2实例分配一个静态私有IP?这不仅有助于解决问题,而且节省了每次启动/停止实例时更新
    app.config
    vm.args
    的时间


因此,在深入研究和精读之后,我找到了一个解决方案:

您需要卸下Riak环并再次启动Riak以重置Riak_核心。

您可以在终端中使用以下命令:

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

  • 注意:这应该在更新
    app.config
    vm.args
    新服务器IP后进行,否则会产生严重的副作用
然后

riak开始

我不再被抛出“连接失败”错误,在发出
riak管理测试
命令后,我愉快地收到了命令(其中
y.y.y
是我实例的私有IP):

我应该注意,这个解决方案不仅适用于物理服务器,也适用于虚拟服务器。尽管我认为在物理服务器中重新分配IP的情况要难得多

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

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

编辑:14/12/12

将静态IP分配给EC2实例的有限解决方案: AmazonWeb服务允许弹性IP与EC2实例(任何类型)关联。因此,如果一个实例有一个与其关联的弹性IP,即使它重新启动,该IP仍将与该实例关联。您可以在弹性IP的上找到文档

如果您在亚马逊的免费使用层下,创建弹性IP不应该向您收费,只要它与正在运行的实例关联即可。如果弹性IP解除关联,只要弹性IP保持解除关联状态,亚马逊将对未使用的弹性IP的每运行小时产生费用。例如,终止实例将解除弹性IP的关联,除非该弹性IP重新关联或释放,否则上述情况适用。完全停止您的实例,然后稍后再启动它也会解除弹性IP的关联

每个实例最多可拥有一个弹性IP,如果更多,将产生费用

对于那些感兴趣的人,您可以在弹性IP地址下找到弹性IP定价的更多信息


以及更改app.config中的PB和HTTP IP以及vm.args IP
>Attempting to restart script through sudo -H -u riak
>Successfully completed 1 read/write cycle to 'riak@y.y.y.y'
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