这是环境:
[ Data Center 1 ]
[ load balancer, ip: 45.45.45.45]
[ Server 1-A, internal ip: 10.0.0.1, external ip: 200.0.0.1 ]
[ Server 1-B, internal ip: 10.0.0.2, external ip: 200.0.0.2 ]
[ Server 1-C, internal ip: 10.0.0.3, external ip: 200.0.0.3 ]
[ Data Center 2 ]
[ load balancer, ip: 90.90.90.90]
[ Server 2-A, internal ip: 10.0.0.1, external ip: 201.0.0.1 ]
[ Server 2-B, internal ip: 10.0.0.2, external ip: 201.0.0.2 ]
[ Server 2-C, internal ip: 10.0.0.3, external ip: 201.0.0.3 ]
[ Data Center 3 ]
[ load balancer, ip: 88.88.88.88]
[ Server 3-A, internal ip: 10.0.0.1, external ip: 221.0.0.1 ]
[ Server 3-B, internal ip: 10.0.0.2, external ip: 221.0.0.2 ]
[ Server 3-C, internal ip: 10.0.0.3, external ip: 221.0.0.3 ]
我想要实现的是每个服务器安装一个mongo服务器,并且只允许数据中心1服务器(1-A,1-B和1-C)为主服务器。数据中心2和数据中心3中的MongoDB服务器只是辅助服务器。应用程序可以专门从数据中心2读取数据,因为这些应用程序可能与数据中心2位于同一网络中,数据中心2的连接速度比连接到数据连接器1更快。服务器正在使用复制集。没有分片。
以下是我的问题:
设置复制集时,是否需要使用外部真实IP地址从数据中心2和3指定主机? e.g。
config = { _id: 'foo', members: [
// data center 1
{_id: 0, host: '10.0.0.1:27017'},
{_id: 1, host: '10.0.0.2:27017'},
{_id: 2, host: '10.0.0.3:27017'},
// data center 2
{_id: 3, host: '201.0.0.1:27017'},
{_id: 4, host: '201.0.0.2:27017'},
{_id: 5, host: '201.0.0.3:27017'},
// data center 3
{_id: 6, host: '221.0.0.1:27017'},
{_id: 7, host: '221.0.0.2:27017'},
{_id: 8, host: '221.0.0.3:27017'}
]
}
由于数据中心2中的服务器将落后于负载均衡器和防火墙,因此IP地址可能无法向外界爆炸。是否可以使用负载均衡器IP地址?如果是的话,该怎么做?
我应该使用priorty = 0在数据中心2和数据中心制作服务器。数据中心3永远不是主要的,对吗?
其他应用程序如何连接到数据中心2和3中的MongoDB(仅用于读取数据)?假设应用程序(服务器端应用程序)也在数据中心2网络中。应用程序使用什么IP地址连接到DC2中的MongoDB?我应该使用内部IP还是外部IP?如果应用程序在DB内部网络之外并且想要在DC2中连接到MongoDB以仅读取数据,那么我应该使用负载均衡器IP还是外部IP?
因为我希望DC2和DC3中的服务器能够允许读取数据,如何设置slaveOk?我应该在主“slaveOK”中设置它,还是应该在DC2和DC3中的每个服务器中设置它?
更进一步,假设DC1,DC2和DC3都是单独的复制集。例如DC 1有唯一的主要和次要。 DC2有自己的主要和次要,到目前为止DC3。当DC1发生变化(新记录或更新)时,是否有一种简单实时的方法来更新DC2和DC3?
答案 0 :(得分:3)