原文: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 高可用实战的更多相关文章

  1. MogoDB(6)--mongoDB高可用和4.0特性

    5.1.MongoDB 用户管理 1.用户管理1.1.添加用户为 testdb 添加 tom 用户 use testdb db.createUser({user:"tom",pwd ...

  2. MySQL/MariaDB数据库的MHA实现高可用实战

      MySQL/MariaDB数据库的MHA实现高可用实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL高可用常见的解决方案 1>.Multi-Master ...

  3. LVS集群和Keepalived高可用实战

    第四十章LVS集群和Keepalived高可用实战 一.ARP协议 1.概念 地址解析协议,即ARP(AddressResolutionProtocol),是根据IP地址获取物理MAC地址的一个TCP ...

  4. MongoDB 高可用集群副本集+分片搭建

    MongoDB 高可用集群搭建 一.架构概况 192.168.150.129192.168.150.130192.168.150.131 参考文档:https://www.cnblogs.com/va ...

  5. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  6. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

  7. MongoDB 高可用集群架构简介

    在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. 转载自严澜的博文——<如何搭建高效的 ...

  8. 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.所有节点更改 ...

  9. 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

随机推荐

  1. 使用@SpringBootApplication注解

    很多Spring Boot开发者总是使用@Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类. 由于这些注解被如此 ...

  2. LeetCode(17):电话号码的字母组合

    Medium! 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23& ...

  3. java 完全解耦

    只要有一个方法操作的是类而非接口,那么你就只能使用这个类及其子类,如果你想要将这个方法应用于不在此继承结构中的某个类,那么你就会触霉头,接口可以在很大程度上放宽这种限制,因此,我们可以编写可服用性更好 ...

  4. Java编程的逻辑 (28) - 剖析包装类 (下)

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  5. Generator函数执行器-co函数库源码解析

    一.co函数是什么 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行.短小精悍只有短短200余行,就可以免去手动编写G ...

  6. 使用ApiPost模拟发送get、post、delete、put等http请求

    现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get.post.delete.put请求,还可以导出文档,支持团队协作也是它 ...

  7. eclipse launching workspace太慢的解决方法

    这几天eclipse调试Android项目的时候反应超慢,右下显示launching workspace就不怎么动了,今天终于卡的受不了了,在网上搜了写方法,设置了下总算好点了,现在把方法贴出来,跟大 ...

  8. [BZOJ3757]苹果树(树上莫队)

    树上莫队共有三种写法: 1.按DFS序列分块,和普通莫队类似.常数大,不会被卡. 2.按块状树的方式分块.常数小,会被菊花图卡到O(n). 3.按[BZOJ1086]王室联邦的方式分块.常数小,不会被 ...

  9. 【NOI2005】聪聪和可可 概率与期望 记忆化搜索

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 958[Submit][Statu ...

  10. 异步接收MSMQ消息

    在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发.MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信. 在一个典型的场景中,我们要向维护一个队列的 ...