Pie*_*rwe 8 dns hostname amazon-ec2 rabbitmq kubernetes
我正在尝试使用AWS上的Kubernetes运行Rabbitmq.我正在使用正式的Rabbitmq docker容器.每次pod重新启动时,rabbitmq容器都会获得一个新的主机名.我已经为具有可解析的DNS名称的pod设置了一个服务(类型为LoadBalancer).
但是,当我使用EBS使兔子配置/消息/队列在重新启动之间保持持久性时,它会断开:
exception exit: {{failed_to_cluster_with,
['rabbitmq@rabbitmq-deployment-2901855891-nord3'],
"Mnesia could not connect to any nodes."},
{rabbit,start,[normal,[]]}}
in function application_master:init/4 (application_master.erl, line 134)
Run Code Online (Sandbox Code Playgroud)
rabbitmq-deployment-2901855891-nord3是以前的主机名rabbitmq容器.这几乎就像Mnesia保存了旧的主机名: - /
容器的信息如下所示:
Starting broker...
=INFO REPORT==== 25-Apr-2016::12:42:42 ===
node : rabbitmq@rabbitmq-deployment-2770204827-cboj8
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : XXXXXXXXXXXXXXXX
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia/rabbitmq
Run Code Online (Sandbox Code Playgroud)
我只能将节点名称的第一部分设置为rabbitmq使用RABBITMQ_NODENAME环境变量.
设置RABBITMQ_NODENAME为可解析的DNS名称会破坏:
Can't set short node name!\nPlease check your configuration\n"
设置RABBITMQ_USE_LONGNAME为true中断:
Can't set long node name!\nPlease check your configuration\n"
更新:
设置RABBITMQ_NODENAME为rabbitmq @ localhost有效,但是否定了集群实例的任何可能性.
Starting broker...
=INFO REPORT==== 26-Apr-2016::11:53:19 ===
node : rabbitmq@localhost
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : 9WtXr5XgK4KXE/soTc6Lag==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia/rabbitmq@localhost
Run Code Online (Sandbox Code Playgroud)设置RABBITMQ_NODENAME为服务名称,在这种情况下rabbitmq-service像rabbitmq @ rabbitmq-service也可以工作,因为kubernetes服务名称可以通过DNS在内部解析.
Starting broker...
=INFO REPORT==== 26-Apr-2016::11:53:19 ===
node : rabbitmq@rabbitmq-service
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : 9WtXr5XgK4KXE/soTc6Lag==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia/rabbitmq@rabbitmq-service
Run Code Online (Sandbox Code Playgroud)这是正确的方法吗?如果节点名称相同,我还能集群多个实例吗?
这个想法是为您想要创建的每个节点使用不同的“服务”和“部署”。
正如您所说,您必须为每个即创建一个自定义 NODENAME:
RABBITMQ_NODENAME=rabbit@rabbitmq-1
Run Code Online (Sandbox Code Playgroud)
还得rabbitmq-1,rabbitmq-2,rabbitmq-3从各个节点来解决。为此,您可以使用 kubedns。遗嘱/etc/resolv.conf将如下所示:
search rmq.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)
并且/etc/hosts必须包含:
127.0.0.1 rabbitmq-1 # or rabbitmq-2 on node 2...
Run Code Online (Sandbox Code Playgroud)
这些服务的目的是为每个节点创建稳定的网络身份
rabbitmq-1.svc.cluster.local
rabbitmq-2.svc.cluster.local
rabbitmq-3.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)
不同的deployments资源将允许您在每个节点上安装不同的卷。
我正在开发一个部署工具来简化这些操作:我已经完成了一个演示,介绍如何在 kubernetes 上将rabbitmq从 1 个节点扩展和部署到 3 个节点:https: //asciinema.org/a/2ktj7kr2d2m3w25xrpz7mjkbu ?speed=1.5
更一般地说,部署集群应用程序所面临的复杂性在“petset提案”中得到解决:https ://github.com/kubernetes/kubernetes/pull/18016
| 归档时间: |
|
| 查看次数: |
2210 次 |
| 最近记录: |