https://support.process-one.net/doc/display/ERL/Starting+a+set+of+Erlang+cluster+nodes
一、配置SSH客户端:无需密码的连接
1. SSH客户端RSA key授权
i). 生成SSH RSA key:
ssh-keygen -t rsa
全回车取缺省,将在~/.ssh目录下将生成id_rsa和id_rsa.pub俩文件
ii) 将生产的公共RSA key拷贝到目标机器上:
a).将id_rsa.pub文件拷贝到目标机器上:
scp ~/.ssh/id_rsa.pub userid@ssh2_server:id_rsa.pub
b). ssh登陆目标机器,在目标机器的~/.ssh目录下生成文件内容:
cat id_rsa.pub >>$HOME/.ssh/authorized_keys
删掉id_rsa.pub
以上两步命令可以用一条命令实现:
ssh-copy-id ssh2-server
本质上都是把master上生成的id_rsa.pub文件拷贝到slave机器./ssh目录下,同时改名为authorized_keys
这一步完成后,从master机器上登录slave机器直接
ssh slave
就行了,不用输入密码。
同样的,slave到master也得这样:不用输入密码直接ssh
集群内所有的机器相互之间都要这样实现无密码输入就能直接ssh
2. 在启动master节点的那个机器上,启动SSH-agent软件并添加你的用户ID
这样每次连接时就不需要passphrase了,办法是让ssh-agent记住你
i) 首先确认你的机器上有ssh-agent在运行(一般都没有)
ps aux|grep ssh-agent
查看ssh-agent运行在当前窗口管理器(或者shell)下
pstree
如果不是,在shell中创建一个ssh-agent会话:
ssh-agent screen
这回启动了一个带ssh-agent的screen会话窗口,以后这个screen控制台内的所有命令都要经过ssh-agent
ii) 添加你的ID
ssh-add
你可以查看当前ssh-agent中已添加的ID
ssh-add -l
也可以删除一个ID
ssh-add -d
3. 集群的路由进出
当建立集群后,经常需要访问作为网关(或者负载均衡器)的前端计算机。要访问其它节点,你需要告诉作为网管的机器将你的请求路由到机器节点中。
例如,假设你的网关是80.65.232.137。控制用的计算机在集群之外,这个机器是操作员用于控制集群的计算机。集群内部网络是192.0.0.0。在你的客户计算机上,启动命令:
route add -net 192.0.0.0 gw 80.65.232.137 netmask 255.255.255.0
这个命令需要确保网关计算机上IP forwarding 可用
要确保正确的路由,可以维护一个常用的/etc/hosts文件,该文件中记录了你的集群中的所有计算机,例子中,集群有7台计算机组成.
10.9.195.12 controler
80.65.232.137 gateway
192.0.0.11 eddieware
192.0.0.21 yaws1
192.0.0.22 yaws2
192.0.0.31 mnesia1
192.0.0.32 mnesia2
也可以设置DNS服务器,但对小网络来说/etc/hosts文件就已经足够了
二、启动Erlang master节点并建立Erlang集群
一旦通过SSH连接集群不再提示输入密码后建立一个Erlang集群将变得非常容易。
1. 启动Erlang master节点的模块:
-module(cluster).
-export([slaves/1]).
%% Argument:
%% Hosts: List of hostname (string)
slaves([]) ->
ok;
slaves([Host|Hosts]) ->
Args = erl_system_args(),
NodeName = "cluster",
{ok, Node} = slave:start_link(Host, NodeName, Args),
io:format("Erlang node started = [~p]~n", [Node]),
slaves(Hosts).
erl_system_args()->
Shared = case init:get_argument(shared) of
error -> " ";
{ok,[[]]} -> " -shared "
end,
lists:append(["-rsh ssh -setcookie ",
atom_to_list(erlang:get_cookie()),
Shared, " +Mea r10b "]).
%% Do not forget to start erlang with a command like:
%% erl -rsh ssh -sname clustmaster
启动master
mremond@controler:~/cvs/cluster$ erl -rsh ssh -sname demo
Erlang (BEAM) emulator version 5.3 [source] [hipe]
Eshell V5.3 (abort with ^G)
(demo@controler)1> cluster:slaves(["gateway", "yaws1", "yaws2", "mnesia1", "mnesia2", "eddieware"]).
Erlang node started = [cluster@gateway]
Erlang node started = [cluster@yaws1]
Erlang node started = [cluster@yaws2]
Erlang node started = [cluster@mnesia1]
Erlang node started = [cluster@mnesia2]
Erlang node started = [cluster@eddieware]
ok
这里的要点是:集群间所有节点(至少是master对所有slave节点)之间都要能实现“相互”无密码输入的ssh登录
我想无密码输入的原理可能是:
机器A生成RSA key,有一个公开的密钥,别的机器B要想无密码ssh这同机器,B必须在本地拥有A的公开密钥
分享到:
相关推荐
集群中的节点可以是磁盘节点或内存节点,前者用于持久化消息,后者则更注重性能。 2. 节点同步:RabbitMQ使用镜像队列策略,确保消息在集群中多个节点间同步,保证数据一致性。 3. 故障转移:当某个节点故障时,...
7. 分布式特性:Erlang支持多节点集群,节点间可以透明地通信,这使得构建分布式系统变得简单。 8. 数据类型:Erlang有多种内建数据类型,包括原子(atom)、整数、浮点数、列表、二进制、元组和映射等。这些类型...
4. OTP(Open Telephony Platform):Erlang的标准库包括OTP,这是一个包含设计原则、行为模式和库的集合,用于构建可靠、容错的系统。OTP提供了如GenServer、GenEvent、Supervisor等行为模块,它们帮助开发者遵循...
**Broker** 在RabbitMQ中指的是运行着RabbitMQ应用程序的Erlang节点的逻辑集合。它可以是一个或多个节点,每个节点都运行着RabbitMQ服务。 Broker的主要任务是接收、存储和转发消息。 **Cluster** 是一组通过共享元...
集群可以将多个RabbitMQ节点组成一个整体,提高服务的可用性和性能。持久化可以确保即使服务器重启,消息也不会丢失。而监控则可以帮助我们了解系统的运行状态,及时发现和解决问题。 总的来说,这个“RabbitMQ相关...
同时,Redis Cluster提供了一个分布式解决方案,允许数据在多个节点之间自动分片,以实现水平扩展和高可用性。 6. Redis与其他编程语言的兼容性 Redis不仅限于Java,还支持C/C++、C#、PHP、JavaScript、Perl、...
3. **节点管理**: 如何管理集群中的节点。 4. **数据库管理**: 如何管理集群中的数据库。 5. **分片**: 如何在集群中使用分片来分散数据和负载。 #### 十六、JSON结构参考 1. **所有数据库文档**: 介绍了CouchDB中...
AKKA是基于Scala语言和Erlang虚拟机的一种框架,用于构建并发、分布式和容错的应用程序。其核心理念和设计灵感源自于斯堪的纳维亚地区的萨米神话中的智慧与美丽的女神以及瑞典拉普兰地区一座风景秀丽的山峰。在AKKA...
1. **视图管理**: 在VSR中,视图是集群中的节点集合,视图变更用于处理节点故障或网络分区。在Scala/Akka中,这可以通过创建一个管理Actor来实现,它负责维护当前视图,触发视图变更,并确保新视图的正确传播。 2. ...
- **集群模式:** 在集群环境下,需要创建一个keyFile文件,并且为该文件设置合适的权限。使用`mongod --keyFile`参数指定密钥文件的位置。所有客户端都必须经过用户名/密码验证才能访问数据库。 **2.4 DBA常用命令*...
- **集群定义:** 多个RabbitMQ节点组成一个集群,共同提供消息传递服务。 - **工作原理:** 节点间共享队列数据,实现高可用和负载均衡。 **14. RabbitMQ的镜像队列(Mirrored Queues)是什么?** - 镜像队列是指...