CentOS MongoDB 高可用实战
原文:https://www.sunjianhua.cn/archives/centos-mongodb.html
一、MongoDB 单节点
1.1、Windows 版安装
1.1.1 获取社区版本
A. 查看Windows版本
cmd输入:
B. 下载对应Windows版本
地址: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/
1.1.2 安装Windows社区版本
mongodb-win32-x86_64-2008plus-ssl-3.4.9-signed.msi
1.1.3 运行Windows社区版本(可直接使用2.1.4)
A.设置环境变量
"D:Program FilesMongoDBServer3.4binmongod.exe" --dbpath d:MongoDBdata
B.启动MongoDB
"D:Program FilesMongoDBServer3.4binmongod.exe"
C.连接MongoDB
"D:Program FilesMongoDBServer3.4binmongo.exe
D.开始使用MongoDB
https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started
1.1.4 配置为服务
A.管理员方式打开命令行
按windows 键,输入cmd,然后按ctrl+shift+alt以管理员方式运行
B.创建目录
mkdir D:MongoDBdatadb
mkdir D:MongoDBdatalog
C.创建配置文件
在安装目录下创建配置文件:
D:Program FilesMongoDBServer3.4mongod.cfg
D.安装为服务
"D:Program FilesMongoDBServer3.4binmongod.exe" --config "D:Program FilesMongoDBServer3.4mongod.cfg" --install
E.启动服务
net start MongoDB
F.停止或移除服务
停止: net stop MongoDB
移除: "D:Program FilesMongoDBServer3.4binmongod.exe" --remove
1.2、Linux 社区版 (centos6 )
1.2.1 安装社区版
#A.配置yum
> vi /etc/yum.repos.d/mongodb-org.3.4.repo
#B.Yum安装
> sudo yum install -y mongodb-org
#C.配置
> vi /etc/mongod.conf
1.2.2 运行社区版
#A.启动MongoDB
#B.验证是否安装成功
> cat /var/log/mongodb/mongod.log
出现以上则成功!
#加入开机启动:
#C.停止MongoDB
#D.重启MongoDB
#E.开始使用MongoDB
https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started
1.2.3 卸载社区版
#A.停止MongoDB
#B.移除安装包
#C.移除数据目录
1.3、单节点配置
1.3.1 配置安全策略
#A.创建管理员
> use admin
#创建超级管理员最大权限
> use admin;
> db.createUser(
{
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
}
)
#然后,我们在修改下配置文件,先在mongo脚本里输入exit退出mongo。之后再输入以下命令修改配置文件:
> vim /etc/mongod.conf
重启
centos7以下的启动、停止服务命令如下:
sudo service mongod start //启动服务
sudo service mongod stop //停止服务
centos7以上的启动停止服务命令如下:
systemctl start mongod.service //启动服务
systemctl stop mongod.service //停止服务
systemctl status mongod.service //查看服务状态
B.创建新DB
C.创建数据库所有者:
1.3.2、配置防火墙
vi /etc/sysconfig/iptables 加入
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
或者:
iptables -I INPUT -s 192.168.20.0/24 -j ACCEPT
iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT
重启: service iptables restart
二、MongoDB 副本集
2.1、副本集架构简介
One、三成员副本集(1主2从/1主1从1决策者)
##### 以上为 (1主1从) #####
##### 以上为 (1主1从1决策者) #####
##### 以上为 (Two、两个或两个以上数据中心副本集) #####
2.2、副本集安装
##### 注 : 此处为1主2从1决策者
##### CentOS release 6.5 (Final)
2.2.1 主从安装
方法同单节点linux安装
2.2.2 决策者安装
方法同上!
2.3、副本集配置
2.3.1 配置主从
#副本集名称: mongoReplicas
#副本集keyfiles:
> mkdir -p /usr/local/mongodb/
> openssl rand -base64 756 > /usr/local/mongodb/clientAuth.key
> chown -R mongod.mongod /usr/local/mongodb/clientAuth.key
> chmod 400 /usr/local/mongodb/clientAuth.key
#copy上面key到其他两个机器并赋值权限!
> vi /etc/mongod.conf
最终效果如下图:
#用shell连接mongo,然后初始化副本集:
> rs.initiate(
{
_id : "mongoReplicas",
members: [
{ _id : 0, host : "192.168.10.152:27017" },
{ _id : 1, host : "192.168.10.159:27017" },
{ _id : 2, host : "192.168.10.160:27017" }
]
}
)
#然后rs.status() 查看主节点
查看配置: rs.conf()
2.3.2 配置角色
#初始化完成后,创建用户:
#创建管理员
> db.getSiblingDB("admin").createUser(
{
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
}
);
> use admin;
> db.auth(“root”,”root”);
> db.getSiblingDB("admin").createUser(
{
"user" : "clusterAdmin",
"pwd" : "clusterAdmin",
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)
> db.getSiblingDB("admin").createUser(
{
user:"dba",
pwd:"dba",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]
}
);
#创建普通库:
> db.getSiblingDB("sunjianhua").createUser(
{
user:"sunjianhua",
pwd:"sunjianhua",
roles:[{role:"dbOwner",db:"sunjianhua"}]
}
)
#搭建完成后,用工具连接,最终效果如下图:
2.3.3 配置决策者
#安装mongo方式同上,修改配置文件
> vi /etc/mongod.conf
#然后启动: service mongod restart
#在primary节点加入决策者:
> rs.addArb("192.168.10.231:30000")
#最后查看rs.conf() 和rs.status()
2.4、副本集测试
2.4.1 副本集数据同步测试
在主节点插入:
在存节点插入:
查看是否在从节点存在db1了:
2.4.2 副本集选举测试
service mongod stop
然后刷新节点,发现159机器已经变成主节点
再次启动160Down的机器
service mongod start
然后刷新节点,发现160机器已经变成从节点
三、MongoDB 附录
3.1、客户端连接工具
Robo 3T :
https://robomongo.org/download
NoSQL Manager for MongoDB:
https://www.mongodbmanager.com
3.2、MongoDB角色
内置角色
1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore;
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6.超级用户角色:root, 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7.内部角色:__system
具体角色
1.read:允许用户读取指定数据库
2.readWrite:允许用户读写指定数据库
3.dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
4.userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
5.clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
6.readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
7.readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
8.userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
9.dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
10.root:只在admin数据库中可用。超级账号,超级权限.
3.3、MongoDB基础
英文: https://docs.mongodb.com/manual/
中文: http://www.cnblogs.com/liruihuan/tag/MongoDB/
参考: https://docs.mongodb.com/v3.4/core/replica-set-architectures/
https://help.aliyun.com/document_detail/26558.html?spm=a2c4g.11186623.6.539.r7B3bf
主从: https://docs.mongodb.com/manual/replication/
3.3.1 mongo和sql
https://docs.mongodb.com/manual/reference/sql-comparison/
3.3.2 连接mongo
A.登陆
mongo 192.168.20.250:27017/sunjianhua -usjh_dbOwner -psjh_dbOwner ;
B.切换数据库
use sunjianhua;
C. ......
3.4、主备切换异常
3.4.1 连接失败
A.应正确连接副本集
mongodb://[username:password@]host1:port1,...[,hostN[:portN]]]/[database]
例如:
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=2&wtimeoutMS=2000
B.hosts别名导致
cfg = rs.conf()
cfg.members[0].name= "ip:27017”
rs.reconfig(cfg)
3.4.2 切换正常数据异常
可能未禁止primary 故障后,再次启动后又变成主节点!
禁止方法: 设置副本集 Priority 都一致
3.5、Spring data mongo 集成
3.5.1 单节点集成
Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>
引入jar包
<!-- provide by spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.1</version>
</dependency>
<!-- provide by spring end -->
<!-- mongo-java-dirver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.5.0</version>
</dependency>
<!-- spring-data-mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.7.RELEASE</version>
</dependency>
Spring 集成
配置文件:
3.5.2 副本集集成
Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>
引入jar包:(同单节点)
注意以下版本:
<!-- mongo-java-dirver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.6.3</version>
</dependency>
<!-- spring-data-mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.10.11.RELEASE</version>
</dependency>
Spring 集成
配置文件:
3.6、副本集常用命令
注: 需要在primary节点认证之后执行!
添加节点:
rs.add( { host: "192.168.10.153:27017", priority: 1, votes: 1 } )
删除节点:
rs.remove("192.168.10.152:27017")
替换节点:
cfg = rs.conf()
cfg.members[0].host = "192.168.10.154"
rs.reconfig(cfg)
设置priority :
cfg = rs.conf()
cfg.members[2].priority = 0.5
rs.reconfig(cfg)
转换一个单节点为副本集:
rs.initiate(); //需要使用超级管理员执行:
需修改/etc/mongod.conf配置:
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Listen to local interface only, comment to listen on all interfaces.
security:
authorization: enabled
keyFile: /usr/local/mongodb/clientAuth.key
replication:
replSetName: "mongoReplicas"
调整priority(优先级):
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2
rs.reconfig(cfg)
阻止从节点变为主节点:
cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)
配置隐藏节点:
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)
配置从节点延迟:
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)
配置非选举节点:
cfg = rs.conf();
cfg.members[3].votes = 0;
cfg.members[3].priority = 0;
cfg.members[4].votes = 0
cfg.members[4].priority = 0;
cfg.members[5].votes = 0
cfg.members[5].priority = 0;
rs.reconfig(cfg);
CentOS MongoDB 高可用实战的更多相关文章
- MogoDB(6)--mongoDB高可用和4.0特性
5.1.MongoDB 用户管理 1.用户管理1.1.添加用户为 testdb 添加 tom 用户 use testdb db.createUser({user:"tom",pwd ...
- MySQL/MariaDB数据库的MHA实现高可用实战
MySQL/MariaDB数据库的MHA实现高可用实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL高可用常见的解决方案 1>.Multi-Master ...
- LVS集群和Keepalived高可用实战
第四十章LVS集群和Keepalived高可用实战 一.ARP协议 1.概念 地址解析协议,即ARP(AddressResolutionProtocol),是根据IP地址获取物理MAC地址的一个TCP ...
- MongoDB 高可用集群副本集+分片搭建
MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...
- MongoDB高可用集群搭建(主从、分片、路由、安全验证)
目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...
- centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课
centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课 heartbeat是Linu ...
- MongoDB 高可用集群架构简介
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...
- Mysql之MGR高可用实战案例
MGR高可用实战案例 1.环境准备 node1 rocky8.6 10.0.0.8 node2 rocky8.6 10.0.0.18 node3 rocky8.6 10.0.0.28 2.所有节点更改 ...
- 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇
1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...
随机推荐
- OracleDBConsoleorcl 启动不了 服务特定错误2【解决办法】
问题描述: 我的oracle不知道为什么OracleDBConsoleorcl 启动不了 出现“服务特定错误2”现在我也不知道原因 估计是因为我电脑的IP经常变动,有时在公司用,有时在家里用! 我的o ...
- react-native 报错
报错信息: java.lang.RuntimeException: Unable to load script from assets 'index.android.bundle'. Make sur ...
- HTTPS-加密SSL证书
从第一部分HTTP工作原理中,我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密码.在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似 ...
- Java编程的逻辑 (58) - 文本文件和字符流
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Mysql安装(msi版的安装)
上次使用绿色版的MySQL,现在使用一次安装版的,具体的步骤都是按照别人的,这里就贴一个链接,如果有时间,以后再补充上来截图. 主要参考的是下面的链接: http://www.cnblogs.com/ ...
- IO知识点整理(四种基类的使用)
一:介绍 1.两种基类 字节流 InputStream,OutputStream 字符流 Reader,Writer 二:字符流的基本方法(文字的处理比较常见) 1.Writer的API 2.File ...
- CUDA安装出现图形驱动程序安装失败
win7安装cuda9时出现图形驱动程序安装失败,解决办法是右键计算机>管理>服务和应用程序>服务>找到“Windows Installer”,右键选择“启动” 参考自http ...
- NLP自然语言处理系列5-支持向量机(SVM)
1.什么是支持向量机 支持向量机(Support Vector Machine,SVM)是一种经典的分类模型,在早期的文档分类等领域有一定的应用.了解SVM的推导过程是一个充满乐趣和挑战的过程,耐心的 ...
- Orleans介绍
一.介绍 Orleans是一个框架,提供了一个直接的方法来构建分布式高规模计算应用程序 默认可扩展 -> Orleans处理构建分布式系统的复杂性,使您的应用程序能够扩展到数百台服务器.低延迟 ...
- 22.python中的面向对象和类的基本语法
当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...