记录几个小问题
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类型的.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步