缺月挂梧桐 漏断人初静

导航

mongodb 副本集

 mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,sharding模式, 三种模式各有优劣,适用于不同的场合,属Replica set应用最为广泛,主从模式现在用的较少,sharding模式最为完备,但配置维护较为复杂。本节我们来看下Replica Set模式的搭建方法。

2.Replica Set模式

       Replica Set模式主要包括3个部分,主节点,备节点,仲裁节点. 

       主节点相当于主库,所有插入,查询,修改操作都可以在主节点执行。

       备节点相当于从库,用来做备份,也可以承担查询的功能,减轻主节点的压力,

       仲裁节点用于当主节点宕机后,从众多备份节点中选择一个节点作为主节点,仲裁节点不承担数据的增删改查功能,主要用来选举主节点。

       

  接下来我们看看Replica Set环境的搭建的搭建方法

 

1、  安装mongodb并负责三份

 

2、  配置三台mongodb配置

[root@jx-redis-02 mongodb-cluster]# cat mongodb-1/conf/monogdb.conf

dbpath=/data1/mongodb-cluster/mongodb-1/data/

#数据库日志存放目录

logpath=/data1/mongodb-cluster/mongodb-1/logs/mongod.log

#以追加的方式记录日志

logappend = true

#端口号 7

port=27017

#以后台方式运行进程

fork=true

 

#关闭http接口,默认关闭http端口访问

#nohttpinterface=true

#mongodb所绑定的ip地址

bind_ip=10.253.126.41

replSet=rs1

 

#启用日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

#quiet=true

 

 

[root@jx-redis-02 mongodb-cluster]# cat mongodb-2/conf/monogdb.conf 

dbpath=/data1/mongodb-cluster/mongodb-2/data/

#数据库日志存放目录

logpath=/data1/mongodb-cluster/mongodb-2/logs/mongod.log

#以追加的方式记录日志

logappend = true

#端口号 7

port=27018

#以后台方式运行进程

fork=true

 

#关闭http接口,默认关闭http端口访问

#nohttpinterface=true

#mongodb所绑定的ip地址

bind_ip=10.253.126.41

replSet=rs1

 

#启用日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

#quiet=true

 

 

[root@jx-redis-02 mongodb-cluster]# cat mongodb-3/conf/monogdb.conf 

dbpath=/data1/mongodb-cluster/mongodb-3/data/

#数据库日志存放目录

logpath=/data1/mongodb-cluster/mongodb-3/logs/mongod.log

#以追加的方式记录日志

logappend = true

#端口号 7

port=27019

#以后台方式运行进程

fork=true

 

#关闭http接口,默认关闭http端口访问

#nohttpinterface=true

#mongodb所绑定的ip地址

bind_ip=10.253.126.41

replSet=rs1

 

#启用日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

#quiet=true

 

 

 

3、启动

/data1/mongodb-cluster/mongodb-1/bin/mongod -f mongodb-1/conf/monogdb.conf

/data1/mongodb-cluster/mongodb-2/bin/mongod -f mongodb-2/conf/monogdb.conf

/data1/mongodb-cluster/mongodb-3/bin/mongod -f mongodb-3/conf/monogdb.conf

 

4、连接:

/data1/mongodb-cluster/mongodb-1/bin/mongo  10.253.126.41:27017

 

 

 

 

设置:

cfg={ _id:"rs1", members:[ {_id:0,host:'10.253.126.41:27017',priority:9}, {_id:1,host:'10.253.126.41:27018',priority:1}, {_id:2,host:'10.253.126.41:27019',arbiterOnly:true}] };

 

rs.initiate(cfg)

 

 

priority表示优先级别,数值越大,表示是主节点

arbiterOnly:true表示仲裁节点

可以执行rs.status()来检查执行配置结果信息。

结果里"stateStr" : "PRIMARY"表示主节点,  "stateStr" : "SECONDARY"表示从节点,    "stateStr" : "ARBITER",表示仲裁节点

 

 

添加一个节点  rs.add(“127.0.0.1:20180”)

删除一个节点  rs.remove(“127.0.0.1:20180”)

查看配置 rs.config()

 

 

至此副本集就创建好了,但此时副本集是任何服务器都可以连接的,并不安全。

以下开启auth认证

1、 切换到admin库创建账号

rs1:PRIMARY> use admin

rs1:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:["root"]})

Successfully added user: { "user" : "root", "roles" : [ "root" ] }

 

2、 生成密钥

  • openssl rand -base64 666 > /data1/mongodb-cluster/mongodb-1/keyfile

3、 将密钥拷贝到其他mongodb

cp -f /data1/mongodb-cluster/mongodb-1/keyfile   /data1/mongodb-cluster/mongodb-2/keyfile

cp -f /data1/mongodb-cluster/mongodb-1/keyfile   /data1/mongodb-cluster/mongodb-3/keyfile

4、 设置keyfile权限为600,否则会报错,无法启动mongodb

chmod 600 /data1/mongodb-cluster/mongodb-1/keyfile

chmod 600 /data1/mongodb-cluster/mongodb-2/keyfile

chmod 600 /data1/mongodb-cluster/mongodb-3/keyfile

5、 在三台mongodb上更改monogdb.conf配置,添加如下俩句:

auth=true  #开启认证

keyFile=/data1/mongodb-cluster/mongodb-1/keyfile  #keyfile位置

6、 kill掉之前mongodb进程,重新启动

 

-----------------------<完>-----------------------------

添加仲裁者:rs.addArb(“192.168.0.1”:”123”)

或者rs.add(“_id”:3,host:”192.168.0.1:123”,arbiterOnly:true)

删除仲裁者:rs.remove (“192.168.0.1”:”123”)

副本集状态监控:https://www.cnblogs.com/kevingrace/p/8178549.html

优先级 
优先级用于表示一个成员渴望成为主节点的程度。优先级的取值范围可以是0-100。默认是1,将优先级设为0,表示成员永远不能够成为主节点。这样的成员被成为被动节点。 

rs.add({“_id“:4,host:”127.0.0.1:20180”,priority:99)

 

修改节点状态

Primary节点降级为Secondary节点

myapp:PRIMARY> rs.stepDown()

这个命令会让primary降级为Secondary节点,并维持60s,如果这段时间内没有新的primary被选举出来,这个节点可以要求重新进行选举。

也可手动指定时间

myapp:PRIMARY> rs.stepDown(30)

 

冻结Secondary节点

如果需要对Primary做一下维护,但是不希望在维护的这段时间内将其它Secondary节点选举为Primary节点,可以在每次Secondary节点上执行freeze命令,强制使它们始终处于Secondary节点状态。

myapp:SECONDARY> rs.freeze(100)

注:只能在Secondary节点上执行

 

myapp:PRIMARY> rs.freeze(100)

{

    "ok" : 0,

    "errmsg" : "cannot freeze node when primary or running for election. state: Primary",

    "code" : 95,

    "codeName" : "NotSecondary"

}

 

如果要解冻Secondary节点,只需执行

myapp:SECONDARY> rs.freeze()

 

 

 

 

 

posted on 2019-02-22 14:56  勤劳の洗碗机  阅读(48)  评论(0)    收藏  举报