原文: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. OracleDBConsoleorcl 启动不了 服务特定错误2【解决办法】

    问题描述: 我的oracle不知道为什么OracleDBConsoleorcl 启动不了 出现“服务特定错误2”现在我也不知道原因 估计是因为我电脑的IP经常变动,有时在公司用,有时在家里用! 我的o ...

  2. react-native 报错

    报错信息: java.lang.RuntimeException: Unable to load script from assets 'index.android.bundle'. Make sur ...

  3. HTTPS-加密SSL证书

    从第一部分HTTP工作原理中,我们可以了解到HTTPS核心的一个部分是数据传输之前的握手,握手过程中确定了数据加密的密码.在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似 ...

  4. Java编程的逻辑 (58) - 文本文件和字符流

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

  5. Mysql安装(msi版的安装)

    上次使用绿色版的MySQL,现在使用一次安装版的,具体的步骤都是按照别人的,这里就贴一个链接,如果有时间,以后再补充上来截图. 主要参考的是下面的链接: http://www.cnblogs.com/ ...

  6. IO知识点整理(四种基类的使用)

    一:介绍 1.两种基类 字节流 InputStream,OutputStream 字符流 Reader,Writer 二:字符流的基本方法(文字的处理比较常见) 1.Writer的API 2.File ...

  7. CUDA安装出现图形驱动程序安装失败

    win7安装cuda9时出现图形驱动程序安装失败,解决办法是右键计算机>管理>服务和应用程序>服务>找到“Windows Installer”,右键选择“启动” 参考自http ...

  8. NLP自然语言处理系列5-支持向量机(SVM)

    1.什么是支持向量机 支持向量机(Support Vector Machine,SVM)是一种经典的分类模型,在早期的文档分类等领域有一定的应用.了解SVM的推导过程是一个充满乐趣和挑战的过程,耐心的 ...

  9. Orleans介绍

    一.介绍 Orleans是一个框架,提供了一个直接的方法来构建分布式高规模计算应用程序 默认可扩展 -> Orleans处理构建分布式系统的复杂性,使您的应用程序能够扩展到数百台服务器.低延迟 ...

  10. 22.python中的面向对象和类的基本语法

    当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个 ...