1)erlang的节点无法ping通。
一般影响erlang节点互ping的因素大致有如下几个:
a) 设置相同的cookie;
b) 防火墙关闭;
两个server节点和 mnesia节点互ping的过程中,首先设置了相同的cookie,其中一台物理机上的server1节点设置相同的cookie后,没发ping通mneisa节点,但两台物理机之间可以互相ping通,说明网段访问没问题。
cookie又再次检查,在erlang的shell下,erlang:get_cookie(),查看获取的cookie是一样的。 防火墙看了下, 在linux的shell下,执行命令$ service iptables status , iptables: Firewall is not running 说明防火墙没开启,没问题.
纠结中,对linux的hostname不使用其名字,而用ip地址,发现可以ping通,如root@127.0.0.1
然后,在 vim /etc/hosts 下,写下要ping的这个网段的所有 ip和hostname对应的关系,
再继续设置相同的cookie后,net_adm:ping/1 ,成功了,网段内的节点之前可以互相ping通访问了。
2) mongodb存UTC时间
Erlang存mongo的UTC时间,是为了创建collection的时候,创建该时间,然后在索引中设置过期时间,这样就可以定时删除过期数据了。
这里的这个collection的创建时间,为mongo的utc时间. 需要注意的是:mongo中的date类型以UTC(Coordinated Universal Time)存储,就等于GMT(格林尼治标准时)时间,我们是+8时区,也就是时差相差8,所以+8小时就是系统当前时间.
对于java来说,直接new Data() ,获取的即是UTC时间,而这个字段为date数据类型的.
对于erlang来说,没有date的数据类型,而一开始走着想是先把时间转为UTC时间,然后在存入,发现这样存到mongo中的是string类型的.最后,发现now() 这样,直接存入的即是mongo的UTC时间,也是data类型的.