mongodb复制集(replication)安装

火山日常啰嗦
上一篇说了mongodb单机版的安装,现在就来记录mongodb复制集replication的安装过程了。

replication的安装方式有两种:
1、复制集安装在同一个节点--垂直安装。
2、复制集安装在不同的节点--水平安装(推荐水平安装,因为这样当集群中某个节点宕机了,不至于整个复制集都没了)。

复制集安装在同一个节点:
我安装的复制集有三个mongod服务。
前提:mongodb安装包已解压
下面正式进入安装步骤:
1)创建这三个服务存储数据库集合的路径:

 mkdir -p  /opt/modules/mongodb/data/rs0  
 mkdir -p  /opt/modules/mongodb/data/rs1 
 mkdir -p  /opt/modules/mongodb/data/rs2 

2)创建每个mongod服务的日志文件存放的路径

 mkdir -p  /opt/modules/mongodb/log(都存储在这个目录下了)

3)写三个启动配置文件,分别为mongodb1.conf、mongodb2.conf、mongodb3.conf
ps1:每个服务所绑定的端口不能相同(因为这是在同一个节点中)
ps2:虚拟机启动最好添加参数smallfiles,否则可能会非常卡顿(亲测)
ps3:必须声明每个mongod服务属于某个特定的复制集,replSet=rsa
mongodb1.conf

dbpath=/opt/modules/mongodb/data/rs0
logpath=/opt/modules/mongodb/log/mongodb1_rs0.log     //在配置文件中指定日志文件存放的文件
                                                                                            //,启动时会自动创建该日志文件
smallfiles=true
replSet=rsa
logappend=true
bind_ip=0.0.0.0
fork=true
port=27017

mongodb2.conf

dbpath=/opt/modules/mongodb/data/rs1
logpath=/opt/modules/mongodb/log/mongodb2_rs1.log
smallfiles=true
replSet=rsa
logappend=true
bind_ip=0.0.0.0
fork=true
port=27018

mongodb3.conf

dbpath=/opt/modules/mongodb/data/rs2
logpath=/opt/modules/mongodb/log/mongodb3_rs2.log
smallfiles=true
replSet=rsa
logappend=true
bind_ip=0.0.0.0
fork=true
port=27019

4)主从配置信息

var rsconf = {
    _id:'rsa', //这里的_id要与配置文件中指定的服务所属的复制集相同
    members:  //复制集成员
    [
        {
        _id:1, //成员的id
        host:'172.18.149.131:27017' //成员所属节点的ip以及该成员服务启动时所占的端口
        },
        {
        _id:2,
        host:'172.18.149.131:27018'
         },
         {
         _id:3,
         host:'172.18.149.131:27019'
          }
        ]
}

5)分别启动复制集的三个mongod服务
(一个个手动启动挺麻烦的,所以也可以自己写个脚本来启动,我这里是一个个手动启动的)

bin/mongod ../mongodb1.conf
bin/mongod ../mongodb2.conf
bin/mongod ../mongodb3.conf

6)mongod服务启动成功后,启动mongo客户端,通过4)的配置信息初始化复制集
执行rs.initiate(rsconf);
7)初始化复制集后,查看复制集状态,在mongo客户端操作
rs.status();
8)分别通过客户端连接上复制集的三个mongod后可以发现,有一个是primary,即master(主),有两个slave(从),在primary往数据库的集合中添加数据,可以在slave中也查看得到,说明复制集成功了,因为在主添加数据,在从中也可以查看到,说明备份成功了。
但是这里有一个小坑需要注意:
第一次 在slave中执行数据库操作时,比如执行show tables;
会报一个错误:

rsa:SECONDARY> show tables;  //第一次在slave执行数据库操作
报错:
JavaScript execution failed: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

错误信息说的是:该节点现在不是主节点,而是从节点,但是从节点一开始默认是不能读写的,所以会报错。
那怎么办呢?
只需要在slave中执行:
rsa:SECONDARY>rs.slaveOk();
接下来就可以在slave中进行读写操作了。

复制集还可以很方便的扩展节点:
写好一个新的mongod服务的启动配置文件(要注意声明该服务所属的复制集),启动mongod服务,然后通过如下方法就可以方便地将该新启动的服务添加到复制集中:
如:现在已经启动了一个声明为rsa复制集的mongod服务,它所占的端口是27020,那么,我们可以将它添加到复制集中:
rs.add('172.18.149.131:27020');

既然可以扩展节点,当然也可以删除节点:
rs.remove('172.18.149.131:27020');

这就是在同一个节点中配置的复制集。

2、但是在同一个节点中配置复制集有个很大的缺陷:
当该节点宕掉后,该复制集就挂掉了,在该复制集上的所有数据都用不了了。
正是基于这样的考虑,所以我们才要在在不同节点中配置复制集。
在不同节点上配置复制集与在同一个节点配置复制集的方法是一样的,区别只是这些复制集服务在不同的节点罢了。
下面还是来详细写一下吧,我这人就是这样,写东西喜欢写详细点,把自己脑子里想的东西都写下来。
复制集还是有三个mongod服务。
步骤:
1)在三台机器上安装好mongodb
做好mongod服务划分,即哪个服务在那个节点。
我的划分如下:
node172.18.149.131运行mongod1.conf
node172.18.149.132运行mongod2.conf
node172.18.149.133运行mongod3.conf

mongod1.conf、mongod2.conf、mongod3.conf的内容与mongodb1.conf、mongodb2.conf、mongodb3.conf的一样。

2)分别在这三个节点上启动对应的mongod服务
172.18.149.131
bin/mongod ../mongod1.conf
172.18.149.132
bin/mongod ../mongod2.conf
172.18.149.133
bin/mongod ../mongod3.conf

3)集群配置信息

var rsconf={
_id:rsa,
members:
[
{
_id:1,
host:'172.18.149.131:27017'
},
{
_id:2,
host:'172.18.149.132:27018'
},
{
_id:3,
host:'172.18.149.133:27019'
}
]
}

4)初始化配置信息
rs.initiate(rsconf);
5)查看复制集状态
rs.status();
6 )分别启动客户端连接mongod服务验证
在主节点添加数据,看在从节点是否查看到数据,如果有,说明备份成功,复制集配置成功。
ps:记住那个小坑,从节点第一次执行读写操作之前需要先执行rs.slaveOK(),之后就可以随意进行读写操作了。
7)后续也可以添加节点服务:rs.add('ip:port');
所添加的节点mongod服务需要已启动且所指定的复制集是本复制集。这样才能添加成功。
8)当然也可以删除复制集中指定的节点:rs.remove('ip:port');

接下来还有一篇关于分片集群的安装的文章。

你可能感兴趣的:(mongodb复制集(replication)安装)