以副本集方式连接MongoDB副本集

MongoDB副本集通过维护多份数据副本来保证数据的高可用。相当于主备方式的数据冗余,其提供了自动故障转移的主从复制集群,其中复制集没有固定的主节点,当一个主机的故障后从节点会重新“选举”出一个新的主节点,从而提高的系统的可用性。MongoDB副本集只有Primary节点具有写数据的能力,当副本集中Primary节点宕机,或者副本集本身轮转升级时,副本集会触发选举,选出一个新的primary,原Primary节点则会降级成secondary。

                                              Diagram of default routing of reads and writes to the primary. â Enlarged

                                                                         MongoDB典型副本集架构

当客户端连接副本集时,如果以primary地址连接实例,当发生上述情况时,P节点降级为Secondary节点,客户端将无法继续执行写操作。为了解决这一问题,连接线上数据时,最好是使用副本集方式连接副本集。

正确连接副本集,可以参考官网的 https://docs.mongodb.com/manual/reference/connection-string/该文档描述了官方MongoDB drivers连接MongoDB实例的URI格式。

URI形如:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]]][/[database][?options]]

python客户端示例:

from pymongo import MongoClient



def get_mongo_conn_url_replicaset(ip_port_list, user=None, pwd=None, set_name=None):
    url = 'mongodb://'
    if user is not None:
        if pwd is None:
            pwd = user
        url += '%s:%s@' % (user, pwd)
    url += ','.join(ip_port_list)
    if set_name is not None:
        url += '/?replicaSet=%s' % set_name
    return url


ip_port_list = ['10.218.131.34:3005', '10.125.51.287:3009', '10.185.2.131:3014']
conn_url = get_mongo_conn_url_replicaset(ip_port_list, "usrname", "password", "mgsetxxx")
cli = RdsMongoClient(conn_url)
status = cli.admin.command('replSetGetStatus')

options选项

options部分是某些连接参数的设置,形如:name=value的格式,如replicaset=xxx,其他重要的参数如:

保证数据写入到大多数节点后返回?

在options里添加w= majority即可保证写请求成功写入大多数节点才向客户端确认。

设置连接数?

在options里添加maxPoolSize=xx即可将客户端连接池限制在xx以内。

实现读写分离(即将读请求优先到secondary)?

在options里添加readPreference=secondaryPreferred即可实现。

 

猜你喜欢

转载自blog.csdn.net/qq_35462323/article/details/87617836