cassandra跨数据中心、多网络接口部署
cassandra集群以前运行于本地机房,现在需要扩展到云端,云主机添加为集群的新数据中心。因为并不是公有云,所有没有启动SSL认证和加密。
本地机房与云机房通过专线连接,并且本地只有两个互联ip地址可用。本地机房原集群内节点只使用私有网络地址,无法被云端访问。云端主机使用私有地址,云平台将私有地址映射到专线可以访问的“公有地址”,这里并不是真正的“公有地址”,仍然是一个大的私有网络,不过本地机房和云机房通过这些地址可以互访,所有这里也叫做“公有地址”
因此集群的本地机房节点通过NAT映射,将私有地址的7000和9042端口映射到公有地址,从而可以被云主机访问,同时做了端口回流,保证本地机房其他机器也可以通过公有地址访问节点。
如果不做或不能做端口回流,应该也可以使用iptables/nftables在集群内节点以及需要访问集群的客户机器上添加nat转换规则,从公有ip转换到对应的私有ip,这个没试。
这样本地机房和云机房的节点都有私有地址和映射后的公有地址,cassandra集群节点需要使用公有地址进行互访,但cassandra都无法直接监听公有地址。这需要配置cassandra.yaml,设置listen_address和rpc_address为私有地址,设置broadcast_address和broadcast_rpc_address为公有ip地址,但是listen_on_broadcast_address设置为false,因为各个节点并不能在公有ip上监听。这样当跨数据中心时使用公有ip通讯,但在本地网络内部可以使用私有网络。
cassandra-rackdc.properties配置文件可以打开prefer_local选项,这样可以优先使用本地网络,降低网络延迟。
配置实例:
1 | listen_address: 192.168.136.250 |
这样本地数据中心和云数据中心就可以通过公有ip相互通讯了。
备注:rpc并不是必须的,只使用cql是可行的。
References:
[1]Using multiple network interfaces