生产环境下搭建mongodb复制集高可用环境(python)
环境描述:有三台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)的更多相关文章
- MongoDB复制集高可用选举机制(三)
复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...
- MongoDB复制集原理、环境配置及基本测试详解
一.MongoDB复制集概述 MongoDB复制集实现了冗余备份和故障转移两大功能,这样能保证数据库的高可用性.在生产环境,复制集至少包括三个节点,其中一个必须为主节点,一个从节点,一个仲裁节点.其中 ...
- Windows搭建MongoDB复制集
上篇,我们已经知道了什么是MongoDB的复制集,不知道的可以查看上篇哦,传送门来了. 光说不练,假把式,咱来自己搭建一个复制集.先下载安装哦,不知道的查看上篇哦,https://blog.csdn ...
- mongodb副本集高可用架构
一.简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点. Mongodb Driver(客户端)的所有数据都写入Primary,Sec ...
- Docker下搭建mongodb副本集
背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...
- Centos下部署DRBD+NFS+Keepalived高可用环境记录
使用NFS服务器(比如图片业务),一台为主,一台为备.通常主到备的数据同步是通过rsync来做(可以结合inotify做实时同步).由于NFS服务是存在单点的,出于对业务在线率和数据安全的保障,可以采 ...
- win10环境下搭建zookeeper伪集群
一.下载zookeeper https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 这里笔者下载的是zookeeper-3.3.6 二.配置zoo ...
- (转)CentOS7.4环境下搭建--Gluster分布式集群存储
原文:https://blog.csdn.net/qq_39591494/article/details/79853038 环境如下:OS:Centos7.4x86_64IP地址如下: Daasban ...
- MongoDb复制集实现故障转移,读写分离
前言 数据库技术是信息系统的一个核心技术,发展很快,各种功能类型数据库层出不穷,之前工作中使用过关系型数据库(mysql.oracle等).面相对象数据库(db4o).key-value存储(Memc ...
随机推荐
- 带你学Node系列之express-CRUD
前言 hello,小伙伴们,我是你们的pubdreamcc,本篇博文出至于我的GitHub仓库node学习教程资料,欢迎小伙伴们点赞和star,你们的点赞是我持续更新的动力. GitHub仓库地址:n ...
- 嵌入式cpu架构
原文:http://www.kaixin001.com/repaste/11007221_7220618944.html### 内容: 目前主要CPU架构有ARM.X86/Atom.MIPS.Powe ...
- TYVJ P1577 泥泞的道路
题目链接:http://www.tyvj.cn/p/1577# P1577 泥泞的道路 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 公园中有n个景点,编号 ...
- C#-訪问轰炸机,新建进程,结束进程...(ConsoleApp)---ShinePans
这个程序能够自己主动打开要打开的网址,而且自己主动结束进程,这样能够达到博文点击流量的添加 program.cs using System; using System.Collections.Gene ...
- 【转】Spring框架深入理解
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...
- vim中末行去掉^M
在Ubuntu系统中打开文件,发现文件中每一个末行都有^M,我们要做的是知道这一个无关的字符是什么作用,然后删除掉这一个无关的字符. 工具/原料 ubuntu操作系统 Vim编辑器 方法/步骤 ...
- ivy在eclipse中的重新加载
ivy在eclipse中的重新加载 如果由于网速的原因,导致了ivy没有正常的加载,可以进行ivy的重新加载: 1,右键点击项目,选择属性->Java Build Path->Librat ...
- 转:为什么Uber宣布从Postgres切换到MySQL?
转: http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653547609&idx=1&sn=cbb55ee823dd ...
- 上篇:es5、es6、es7中的异步写法
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/es-async 本博客同步在http://www.cnbl ...
- gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')
我们要考虑两种情况? 1. 本地安装和全局安装gulp npm i -g gulp && npm i --save-dev gulp 2.新建package.json,然后手动填写缺少 ...