RHEL集群网络通信组播or单播

文章介绍了RHEL不同版本中使用的集群软件,如RHEL5的openais,RHEL6和7的corosync,并详细对比了广播、多播、单播和流四种IP通信类型。广播模式因性能问题不适用于高性能部署,而多播能减轻网络负载。红帽集群的心跳机制由clustermessaginglayer和clusterresourcemanager两层构成,使用Totem协议处理节点间通信,包括心跳信息的传递。

RHEL集群网络通信
==========================================
    一、RHEL不同版本使用不同的集群软件
1、RHEL5 使用openais ;
2、RHEL6 使用corosync ;默认使用multicast(多播),在RHEL6.2中开始支持单播;
3、RHEL7 使用corosync; 默认使用udpu(单播);

    二、Red Hat Enterprise Linux (RHEL) High Availability 使用 4 种类型的 IP 通信。
1、广播:一个数据包被发送到子网的广播地址,子网中的所有节点都会看到该消息。所有这些集群节点都需要决定是否注意到该数据包。广播数据包没有路由,它们只是在整个网络中传输。
2、多播:数据包被发送到指定的多播地址。感兴趣的集群节点订阅多播地址,因此那些不订阅集群多播的节点看不到数据包。可以路由多播数据包(尽管许多交换机默认情况下做得很糟糕)。
3、单播:数据包被发送到特定的 IP 地址,只有特定的集群节点才能看到它。这些消息可以被路由。
4、流:上面的消息是 UDP 数据包,流是 TCP 的东西,总是单播的。成对的节点在它们之间建立连接并在任一/两个方向上交换字节流。

    三、广播模式对于集群来说可能不太可取,主要问题是性能:
1、广播模式不适用于需要高性能锁定的部署。如GFS、GFS2、cmirror,在RHEL之外使用任何需要高性能消息传输的openais或corosync,如Apache Qpid消息传递。
2、在广播模式下,数据包被发送到网络的广播地址,并由网络上的所有节点接收。节点必须接收并忽略不属于它们的数据包。这在网络上产生了大量不必要的流量,并增加了节点的处理负载。
3、在单播模式下,UDP数据包被直接发送到目标群集节点。本应广播或多播到所有集群节点的数据包现在必须发送N-1次(其中N是集群中集群节点的数量),因此与其他系统相比,流量增加,增加了节点的处理负载
4、多播允许我们将所有这些负载卸载到交换机。这意味着集群节点在发送和接收数据包方面的处理更少,并且网络上的负载更少,因为数据包只发送到需要它们的目的地。交换机达到组播最大数量可能导致异常。

    四、Redhat cluster 的心跳机制
Redhat cluster软件的架构分为两层:
底层的cluster messaging layer(集群信息层)负责在所有节点之间传递集群信息包括心跳信息
RHEL6及之前是CMAN,从RHEL7开始是Corosync。上层的cluster resource manager(集群资源管理器)管理划归集群所属的资源,包括IP地址、逻辑卷、文件系统等
RHEL6及之前是RGManager,从RHEL7开始是Pacemaker。心跳机制使用的是Totem协议,Totem是一个巨复杂的协议,心跳只是其中一个很小的部分,可以这么理解:Totem协议负责处理集群内部所有节点之间的通信问题,包含四个主要组件:Total Ordering Protocol, Membership Protocol, Recovery Protocol, Flow Control Mechanism。这里只讲与心跳有关的部分。

当遇到 k8s 初始化失败,执行 `kubectl get nodes` 提示连接服务器 `192.168.0.42:6443` 被拒绝的问题时,可以从以下几个方面进行排查和解决: ### 检查网络连接 确保节点之间网络是连通的,可通过 `ping` 命令测试节点之间的网络连通性: ```bash ping 192.168.0.42 ``` 同时,检查防火墙是否阻止了 `6443` 端口的通信。可以临时关闭防火墙(在生产环境中不建议长期关闭)进行测试: ```bash # 对于 CentOS/RHEL systemctl stop firewalld # 对于 Ubuntu/Debian sudo ufw disable ``` ### 检查 API Server 状态 API Server 是 k8s 集群的核心组件,需要确保其正常运行。可以通过以下命令检查 API Server 进程是否在运行: ```bash ps -ef | grep kube-apiserver ``` 如果 API Server 没有运行,可以尝试重启相关服务。对于使用 `kubeadm` 部署的集群,可以通过以下命令重启 kubelet 服务: ```bash systemctl restart kubelet ``` ### 检查 kubeconfig 文件 `kubectl` 命令依赖于 `kubeconfig` 文件来确定要连接的 API Server 地址。检查 `~/.kube/config` 文件中 `server` 字段是否正确指向 `https://192.168.0.42:6443`: ```bash cat ~/.kube/config ``` 如果地址不正确,可以手动修改该文件,或者使用以下命令重新配置: ```bash kubectl config set-cluster my-cluster --server=https://192.168.0.42:6443 kubectl config set-context my-context --cluster=my-cluster kubectl config use-context my-context ``` ### 检查节点状态 使用 `systemctl` 命令检查 kubelet 服务是否正常运行: ```bash systemctl status kubelet ``` 如果 kubelet 服务没有正常运行,可以查看其日志以获取更多信息: ```bash journalctl -u kubelet -f ``` ### 重新初始化集群 如果以上方法都无法解决问题,可以尝试重新初始化 k8s 集群。在主节点上执行以下命令: ```bash kubeadm reset kubeadm init ``` 按照 `kubeadm init` 命令的输出提示,配置 `kubectl` 和加入工作节点。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值