mongodb集群(副本集)

linux配置mongodb集群

副本集

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。

Primary:主节点,一个副本集有且仅有一台服务器处于Primary状态,只有主节点才对外提供读写服务。如果主节点挂掉,副本集将投票选出一个备节点成为新的主节点。

Secondary:备用节点,副本集允许有多台Secondary,每个备用节点的数据与主节点的数据是完全同步的。Recovering 恢复中,当副本集中某台服务器挂掉或者掉线后数据无法同步,重新恢复服务后从其他成员复制数据,这时就处于恢复过程,数据同步后,该节点又回到备用状态。

Arbiter:仲裁节点,该类节点可以不用单独存在,如果配置为仲裁节点,就主要负责在复本集中监控其他节点状态,投票选出主节点。该节点将不会用于存放数据。如果没有仲裁节点,那么投票工作将由所有节点共同进行。

mongodb官网下载

https://www.mongodb.com/try/download/community

1、软件上传解压

tar zxvf mongodb-linux-x86_64-amazon2-6.0.4.tgz

2、创建对应目录

创建文件夹
mkdir -pv /root/mongodb/{master,slave,arbiter}
mkdir: 已创建目录 "/root/mongodb"
mkdir: 已创建目录 "/root/mongodb/master"
mkdir: 已创建目录 "/root/mongodb/slave"
mkdir: 已创建目录 "/root/mongodb/arbiter"
创建master文件夹中的data、log、conf
mkdir -pv /root/mongodb/master/{data,log,conf}
mkdir: 已创建目录 "/root/mongodb/master/data"
mkdir: 已创建目录 "/root/mongodb/master/log"
mkdir: 已创建目录 "/root/mongodb/master/conf"
创建slave文件夹中的data、log、conf
mkdir -pv /root/mongodb/slave/{data,log,conf}
mkdir: 已创建目录 "/root/mongodb/slave/data"
mkdir: 已创建目录 "/root/mongodb/slave/log"
mkdir: 已创建目录 "/root/mongodb/slave/conf"
创建slave文件夹中的data、log、conf
mkdir -pv /root/mongodb/arbiter/{data,log,conf}
mkdir: 已创建目录 "/root/mongodb/arbiter/data"
mkdir: 已创建目录 "/root/mongodb/arbiter/log"
mkdir: 已创建目录 "/root/mongodb/arbiter/conf"

3、复制软件到相对应位置

cd mongodb-linux-x86_64-amazon2-6.0.1/
cp -ra ./* /root/mongodb/master/
cp -ra ./* /root/mongodb/slave/
cp -ra ./* /root/mongodb/arbiter/

4、创建master配置文件

编辑conf设置:vi master/conf/mongodb.conf

dbpath=/root/mongodb/master/data
logpath=/root/mongodb/master/log/mongodb.log
pidfilepath=/root/mongodb/master/master.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27017
oplogSize=10000
fork=true

5、创建slave配置文件

编辑conf设置:vi slave/conf/mongodb.conf

dbpath=/root/mongodb/slave/data
logpath=/root/mongodb/slave/log/mongodb.log
pidfilepath=/root/mongodb/slave/slave.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27018
oplogSize=10000
fork=true

6、创建arbiter配置文件

编辑conf设置:vi arbiter/conf/mongodb.conf

dbpath=/root/mongodb/arbiter/data
logpath=/root/mongodb/arbiter/log/mongodb.log
pidfilepath=/root/mongodb/arbiter/arbiter.pid
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=0.0.0.0
port=27019
oplogSize=10000
fork=true

7、配置文件参数解释

dbpath:数据存放目录
logpath:日志存放路径
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
logappend:以追加的方式记录日志
replSet:replica set的名字
bind_ip:mongodb所绑定的ip地址
port:mongodb进程所使用的端口号,默认为27017
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
fork:以后台方式运行进程
noprealloc:不预先分配存储
# usercenter replset master
bind_ip=
#指定服务器监听的端口,默认是27017
port=30010
#集群名字
replSet=test_set
#以守护进程的方式运行MongoDB
fork=true
#一个数据库一个文件夹
directoryperdb=true
##启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
journal = true
# 在收到客户数据,检查的有效性
objcheck=true
#操作日志大小限制2G
oplogSize=2000
#pidfile
pidfilepath=/data/mongo_set/test_set/30010/mongo_m30010.pid
#指定数据目录,默认是/data/db/。每个mongod进程都需要独立的目录,
#启动mongod时就会在数据目录中创建mongod.lock文件,防止其他mongod进程使用该数据目录。
dbpath=/data/mongo_set/test_set/30010
#指定日志输出路径,如果不指定则会在终端输出。每次启动都会覆盖原来的日志,如果不想覆盖就要用--logappend选项
logpath=/data/mongo_set/test_set/30010/mongo30010.log
logappend=true
#auth=true
#0:关闭,不收集任何数据。1:收集慢查询数据,默认是100毫秒。2:收集所有数据
profile=2
slowms=100
#.禁止HTTP状态接口
nohttpinterface=true
#.禁止REST接口-在生产环境下建议不要启用MongoDB的REST接口
rest=false

8、启动mongodb

# 启动主节点
/master/bin/mongod -f master/conf/mongodb.conf 
# 启动从节点
./slave/bin/mongod -f slave/conf/mongodb.conf
# 启动仲裁节点
./arbiter/bin/mongod -f arbiter/conf/mongodb.conf

9、查看启动进程

ps -ef | grep mongodb
ps aux | grep -v grep | grep mongod

10、安装shell工具

由于高版本的mongodb去掉了自带的shell工具
https://www.mongodb.com/try/download/shell
tar -zxvf mongosh-1.6.2-linux-x64.tgz
#移动文件
mv mongosh-1.6.2-linux-x64 /usr/local/mongosh
#无密码连接
/usr/local/mongosh/bin/mongosh 127.0.0.1:27017
 
#使用账号密码登录
 
/usr/local/mongosh/bin/mongosh -u root -p 123456

11、配置副本集

use admin
reset={_id:"testrs", members:[ {_id:0,host:'127.0.0.1:27011',priority:2}, {_id:1,host:'127.0.0.1:27012',priority:1}, {_id:2,host:'127.0.0.1:27013',arbiterOnly:true}]};
rs.initiate(reset) # 使配置生效
rs.status()

最外层的_id表示replica set的名字,members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的'127.0.0.1:27017'。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。

配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。可以根据rs.status()来检查是否生效了,如果生效会看到如下信息:

(副本集已经配置成功)

12、副本集设置用户名密码

db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]})
权限:
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
#副本集共享秘钥(目录以自己存放位置为准)
#keyFile=/home/mongod/mongodb/keyfile
#开启访问控制
#auth=true
作者:LLL_原文地址:https://segmentfault.com/a/1190000043566904

%s 个评论

要回复文章请先登录注册