原文: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:[email protected]]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);
原文地址:https://www.cnblogs.com/shihaiming/p/9990462.html