集群启动后各节点只能看到自身节点信息

  • 文档创建者:疏影横斜
  • 编辑次数:4次
  • 最近更新:Vic.zhang 于 2019-12-11
  • 1. 问题分析

    1.1 集群间无法通信,现象是各个节点只能看到自己的节点信息

    可能原因:

    1)网络不允许 UDP 组播

    如果网络不允许组波,而通信协议选择的是 UDP,需要改用 TCP;

    2)防火墙未开放集群通信端口

    a、对于 TCP,节点之间需要互相开放 7800, 7810, 7820, 7830, 7840, 7850, 7860, 7870 这八个端口;

    b、对于 UDP,需要开放45588~65536随机端口满足 UDP 访问;

    3)IP 互相 ping 不通(网段和 IP 选择不当)

    容器化部署web集群的时候使用的是bridge模式默认,导致不是同一台宿主机上面的节点不能 ping 通。

    解决方案容器启动镜像的时候采用--net=host采用host模式

    4)启动报错java.net.UnknownHostException: XXXX: XXXX: 未知的名称或服务

    每个节点执行一下,以把hostname加到/etc/hosts的127.0.0.1记录中

    sudo sed -i -e '/127.0.0.1/ s/\(localhost\)/'$(hostname)' \1/' /etc/hosts

    5)ip 显示的不对,需要手动选择服务器实际的ip

    1.2 节点启动后互相 telnet 78xx端口正常,但是各个节点只能看到自己的节点信息

    这种情况一般是两个节点的集群 id 不一致导致,检查两个节点 WEB-INF/config/db.properties文件的 hibernate.connection.url 值是否一致(字面意思,要一模一样,不要使用 localhost),如果不一致表示属于不同集群,所以会出现节点看不到对方节点,对于使用 oracle 数据库的,还需要检查 hibernate.default_schema 是否一致

    1.3 节点 id 冲突,现象是各个节点只能看到同一个节点的信息(2019.06以前版本)

    1)到每个节点的集群配置/节点管理查看id是否冲突;

    2)排查下面的原因:

    1573801918832848.png

    可能原因:

    1)docker部署

    (同镜像同启动顺序时,docker 指定的 mac 地址是一样的),或者使用了桥接模式,没有第三方网络工具的情况下应使用 host 模式,让宿主机和容器共享 ip 和端口;

    2)亚马逊服务器 EC2

    (或者类似的虚拟服务器)上部署(和上面类似,没有独立的 mac 地址?);

    3)cluster.properties

    手动在各机器 cluster.properties 指定了一样的节点 id;

    2. 随机 uuid 相关知识

    1、机器 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定;

    2、

    操作系统命令
    Windowswmic csproduct get UUID
    Linuxdmidecode -t 1
    macOSsystem_profiler SPHardwareDataType | awk '/UUID/ { print $3; }'

    附件列表


    主题: 部署集成
    • 有帮助
    • 没帮助
    • 只是浏览