You can try out distribution this way:

First, start two erl processes, one in each window.  In the first window, do

erl -sname gandalf

In the second, do

erl -sname bilbo

In the first window, you can start up a kvs server.  To do this, type

kvs:start().

In the second window (on bilbo) do 

rpc:call(NAME,kvs,store,[weather,fine]).
rpc:call(NAME,kvs,lookup,[weather]).

This should return {ok,fine}.  In the above, NAME is the name that is
displayed on the promot in the first window.  For example, on my
machine, when I start erl I get:

erl -sname gandalf
Erlang R14A (erts-5.8) [source] [64-bit] [smp:16:16] [rq:16] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8  (abort with ^G)
(gandalf@bigmac)1> 

So for me, NAME would be gandalf@bigmac.  What is happening is that I
am starting a server on one machine, and using Erlang's rpc module to
send remote function calls from a different machine to interact with
it.

You can also spawn processes on remote machines (called Nodes) by
passing the node argument to spawn().  In particular, I could do, from bilbo

spawn(NAME,fun() -> kvs:start() end).

and then continue as before.  This spawns, from bilbo, a process that
starts the kvs process on gandalf.