Amazon ec2 更改IP地址后Riak节点不再工作
我使用一个实例AmazonEC2虚拟Ubuntu 12.04服务器作为我的单一Riak节点。我已经使用basho网站上的指南完成了在实例上设置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
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
- 更改
到我实例的私有IP李>-名称riak@x.x.x.x
- 将
更改为我的实例的私有IP{http,[{“x.x.x.x”,8098}}
- 将
更改为我的实例的私有ip{pb_ip,“x.x.x.x”}
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
rm-rf/var/lib/riak/ring/*
- 注意:这应该在更新
和app.config
新服务器IP后进行,否则会产生严重的副作用vm.args
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