原文: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. delete/truncate/drop table的区别以及锁在这里的角色

    数据库删除语句 Drop/Delete/Truncate比较 Delete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行). 删除某一行:Delete from 数据表名 ...

  2. About Saliency Object Detection

    显著性对象检测综述 详见:http://mmcheng.net/zh/paperreading/ 一.    程明明等人的论文:Salient Object Detection: A Survey(简 ...

  3. SVN使用过程中遇到的一些问题

    更新svn的客户端TortoiseSVN后 ,之前使用svn管理的文件的关联图标消失了 说明:下面的解决方法及图片来自博客:装了SVN,你的关联图标变了没有? 解决办法:在同步的文件点击右键如下图   ...

  4. Kotlin中var和val的区别

    Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的. var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量.这种声明变量的方式和Java ...

  5. 【PAT】1043 Is It a Binary Search Tree(25 分)

    1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...

  6. 用python实现一个无界面的2048

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5519453.html 以前游戏2048火的时候,正好用其他的语言编写了一个,现在学习python,正好想起来,便决定 ...

  7. Codeforces 348B - Apple Tree

    348B - Apple Tree 我们设最后答案为 x , 我们我们就能用x表示出所有节点下面的苹果个数, 然后用叶子节点求lcm, 取最大的可行解. #include<bits/stdc++ ...

  8. Android-Drawable(三)

    Android-Drawable(三) 前两两篇文章已经学习了6个Drawable,接下来我们继续学习剩下的一些Drawable. Android系统的Drawable(一) Android系统的Dr ...

  9. ARP协议详解之ARP动态与静态条目的生命周期

    ARP协议详解之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自动添加和删除. q  每个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉.所以,生 ...

  10. [ 转载 ] Tcp三次握手和四次挥手详解

    #TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...