环境描述:有三台ubuntu服务器,,每台服务器上已经有mongodb实例。创建3个mongo2.4的新实例,分别作为三个复制集节点,同时保证了当前单节点环境的稳定

3台服务器都已经有单个mongo实例运行

步骤

1.创建mongo新实例需要的目录资源   主要是数据库存放目录、日志文件、配置文件、key文件(保证节点通信)

文件可以在任何地方创建,我在/usr/local下的创建mongodb_rs作为新实例的目录,在该目录下创建资源目录

1.数据库  mkdir db

2.日志文件  mkdir log

3.配置文件  touch rs.conf  可以cat /etc/mongodb.conf>rs.conf初始化,添加或修改下面几项

port = 29010             #更改端口 先lsof -i:29010查看是否被占用

fork=true                   #后台demon进程运行

journal=true              #启用可靠性日志

oplogSize=2048

smallfiles=true

replSet=test_rs         #复制集名称

keyFile=/usr/local/mongodb_rs/key.key   #复制集通信key

4.key文件  touch key.key  生成秘钥 openssl rand 888 -base64>key.key  用888不要太长 key的长度是有限制的

好了  目前目录资源都已经创建,先不启动。在其它2个节点重复以上过程,当然第4步用重复,把第一台上的key.key文件内容复制到每一个节点的key.key文件下

在每一台服务节点启动mongo的新实例(mongodb_rs目录下)  mongod -f rs.conf 稍等一会儿会提示successful  如果不成功查看rs.log日志文件查找原因,可能更换一下端口号

2.配置复制集

选一台服务节点作为primary库192.168.1.132,在服务器上连接mongod实例mongo --port=29010

1.初始化复制集  rs.initiate()  查看rs.conf()  正常情况下生成了一个节点hostname:29010

这个hostname是主机名,把这个主机名添加到另外2台节点的/etc/hosts文件里面

2.添加节点

rs.add("192.168.1.133:29010")

rs.add("192.168.1.134:29010")

3.设置优先级,当主节点当机之后重启的时候任然能成为primary节点,一个节点为0  不会成为主节点

cfg = rs.conf()

cfg.members[0].priority=3

cfg.members[1].priority=1

cfg.members[0].priority=0

重新加载

rs.reconfg(cfg)

4.查看各个节点的状态 (当然你可以先退出 在登录查看状态)

health:1  #正常状态

"stateStr" : "PRIMARY"   #标识主节点

STARTUP:刚加入到复制集中,配置还未加载

STARTUP2:配置已加载完,初始化状态

RECOVERING:正在恢复,不适用读

ARBITER: 仲裁者

DOWN:节点不可到达

UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂

REMOVED:移除复制集

ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态

FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步

PRIMARY:主节点

SECONDARY:备份节点

5.为数据库创建用户名和密码  保证程序任何情况下(主库挂了)访问一个可靠的库  如为app库创建一个账号

use app

db.addUser("test","123")

3.测试数据同步  主从切换

1.完成了配置之后  先看看secondary是否同步了主库的数据   或者kill主库的mongo进程  等待一会儿看看是否主库发生了切换   然后重启看主库是不是重新成为了主库

4.使用pymongo连接mongodb数据库

import pymongo

client=pymongo.MongoClient("192.168.1.132:29010",replicaSet="test_rs")

db = client["app"]

db.authenticate('test','123')

db.user.find()

db.connection.host  #打印当前连接服务器

使用pymongo连接数据库之后可以测试   ,当kill主库之后  再次打印db.connection.host看看是否还是上次那个host   如果不同说明故障转移了

5.如果要做读写分离,设置从库可读,pymongo也提高了这样的api,大家有兴趣可以看看

作者:lpj24
链接:https://www.jianshu.com/p/edff38a59967
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

生产环境下搭建mongodb复制集高可用环境(python)的更多相关文章

  1. MongoDB复制集高可用选举机制(三)

    复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...

  2. MongoDB复制集原理、环境配置及基本测试详解

    一.MongoDB复制集概述 MongoDB复制集实现了冗余备份和故障转移两大功能,这样能保证数据库的高可用性.在生产环境,复制集至少包括三个节点,其中一个必须为主节点,一个从节点,一个仲裁节点.其中 ...

  3. Windows搭建MongoDB复制集

    ​上篇,我们已经知道了什么是MongoDB的复制集,不知道的可以查看上篇哦,传送门来了. 光说不练,假把式,咱来自己搭建一个复制集.先下载安装哦,不知道的查看上篇哦,https://blog.csdn ...

  4. mongodb副本集高可用架构

    一.简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点. Mongodb Driver(客户端)的所有数据都写入Primary,Sec ...

  5. Docker下搭建mongodb副本集

    背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...

  6. Centos下部署DRBD+NFS+Keepalived高可用环境记录

    使用NFS服务器(比如图片业务),一台为主,一台为备.通常主到备的数据同步是通过rsync来做(可以结合inotify做实时同步).由于NFS服务是存在单点的,出于对业务在线率和数据安全的保障,可以采 ...

  7. win10环境下搭建zookeeper伪集群

    一.下载zookeeper https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 这里笔者下载的是zookeeper-3.3.6 二.配置zoo ...

  8. (转)CentOS7.4环境下搭建--Gluster分布式集群存储

    原文:https://blog.csdn.net/qq_39591494/article/details/79853038 环境如下:OS:Centos7.4x86_64IP地址如下: Daasban ...

  9. MongoDb复制集实现故障转移,读写分离

    前言 数据库技术是信息系统的一个核心技术,发展很快,各种功能类型数据库层出不穷,之前工作中使用过关系型数据库(mysql.oracle等).面相对象数据库(db4o).key-value存储(Memc ...

随机推荐

  1. Java教程收集

    极客学院Wiki离线教程-Java类: 官网:http://wiki.jikexueyuan.com/list/java/ 离线版本:链接:http://pan.baidu.com/s/1pKD2oH ...

  2. win7配置java环境变量

    http://jingyan.baidu.com/article/9f63fb91d87fb0c8400f0e93.html 安装JDK,从Oracel官方网站上下载,也可以通过搜索,进入链接.下载完 ...

  3. Qt编写串口通信程序全程图文讲解 .

    在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qex ...

  4. uml精粹——10.状态机图

    10.状态机图state machine diagram   状态机图是常见的描写叙述一个系统行为的技术. 在面向对象的方法中,为单个类绘制一个状态机图来展示单个对象的生命周期行为. 见图10.1 图 ...

  5. 系统重装 WIN7如何创建和使用VHD文件

    1 在磁盘管理中,点击操作-创建VHD,然后可以创建一个空的VHD文件   2 右击这个磁盘,点击初始化磁盘,然后可以新建简单卷   3 右击这个磁盘,设置为脱机或者联机就可以在计算机中显示和隐藏这个 ...

  6. react 使用 moment 进行 日期格式化

    在react中使用得先导入: import moment from 'moment'; 调用: npm install moment var moment = require('moment'); m ...

  7. k进制正整数的对k-1取余与按位取余

    华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/8/24 先说一下结论 有k进制数abcd,有abcd%(k−1)=(a+b+c+d)%(k−1) 这是由于kn=((k−1)+1)n=∑ ...

  8. php 0、null、empty和false之间的关系

    // 判断 0 与 ''.null.empty.false 之间的关系 $a = 0; echo "0 与 ''. empty.null.false 之间的关系:"; if($a ...

  9. Monkey测试的参数

    一.Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键等操作来对设备上的程序进行压 力测试,检测程序多久 ...

  10. java8--面向对象 上(疯狂java讲义3) 复习笔记

    1.初始化块总在构造器执行之前被调用 2.静态初始化块用于初始化类,在类初始化阶段被执行 3.如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类 4.一旦程序员为一个类提供了构造器,系 ...