MongoDB系列文档4-配置MongoDB复制集

  运维

MongoDB系列文档

MongoDB系列文档1-MongoDB复制集简介
MongoDB系列文档2-复制的基本架构
MongoDB系列文档3-复制集中成员说明
MongoDB系列文档4-配置MongoDB复制集
MongoDB系列文档5-MongoDB分片介绍
MongoDB系列文档6-集群中数据分布
MongoDB系列文档7-数据区分
MongoDB系列文档8-部署分片集群
MongoDB系列文档9-分片集群的操作
MongoDB系列文档10-balance操作


1.4 配置MongoDB复制集

1.4.1 环境说明

系统环境说明:

[root@MongoDB ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)
[root@MongoDB ~]# uname -r2.6.32-696.el6.x86_64
[root@MongoDB ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@MongoDB ~]# getenforce 
Disabled
[root@MongoDB ~]# hostname -I10.0.0.152 172.16.1.152

软件版本说明
  本次使用的mongodb版本为:mongodb-linux-x86_64-3.2.8.tgz

1.4.2 前期准备,在root用户下操作

  本次复制集复制采用Mongodb多实例进行
  所有的操作都基于安装完成的mongodb服务,详情参照:http://www.cnblogs.com/clsn/p/8214194.html#_label3

#创建mongod用户
    useradd -u800 mongod
    echo 123456|passwd --stdin mongod # 安装mongodb
    mkdir -p /mongodb/bin
   cd  /mongodb
   wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.8.tgz
    tar xf  mongodb-linux-x86_64-3.2.8.tgz
    cd mongodb-linux-x86_64-3.2.8/bin/ &&\
    cp * /mongodb/bin
    chown -R mongod.mongod /mongodb# 切换到mongod用户进行后续操作
    su - mongod

1.4.3 创建所需目录

for  i in 28017 28018 28019 28020
    do 
      mkdir -p /mongodb/$i/conf  
      mkdir -p /mongodb/$i/data  
      mkdir -p /mongodb/$i/logdone 

1.4.4 配置多实例环境

编辑第一个实例配置文件

cat >>/mongodb/28017/conf/mongod.conf<<'EOF'
systemLog:
  destination: file
  path: /mongodb/28017/log/mongodb.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /mongodb/28017/data
  directoryPerDB: true
  #engine: wiredTiger
  wiredTiger:
    engineConfig:
      # cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
processManagement:
  fork: true
net:
  port: 28017
replication:
  oplogSizeMB: 2048
  replSetName: my_repl
EOF

复制配置文件

for i in 28018 28019 28020
  do  
   \cp  /mongodb/28017/conf/mongod.conf  /mongodb/$i/conf/done

修改配置文件

for i in 28018 28019 28020
  do 
    sed  -i  "s#28017#$i#g" /mongodb/$i/conf/mongod.confdone

启动服务

for i in 28017 28018 28019 28020
  do  
    mongod -f /mongodb/$i/conf/mongod.conf done

关闭服务的方法

for i in 28017 28018 28019 28020
   do  
     mongod --shutdown  -f /mongodb/$i/conf/mongod.conf done

1.4.5 配置复制集

登陆数据库,配置mongodb复制

shell> mongo --port 28017
config = {_id: 'my_repl', members: [
                          {_id: 0, host: '10.0.0.152:28017'},
                          {_id: 1, host: '10.0.0.152:28018'},
                          {_id: 2, host: '10.0.0.152:28019'}]
          }

初始化这个配置

> rs.initiate(config)

到此复制集配置完成

1.4.6 测试主从复制

在主节点插入数据

my_repl:PRIMARY> db.movies.insert([ { "title" : "Jaws", "year" : 1975, "imdb_rating" : 8.1 },
   { "title" : "Batman", "year" : 1989, "imdb_rating" : 7.6 },
  ] );

在主节点查看数据

my_repl:PRIMARY> db.movies.find().pretty()
{
    "_id" : ObjectId("5a4d9ec184b9b2076686b0ac"),
    "title" : "Jaws",
    "year" : 1975,
    "imdb_rating" : 8.1
}
{
    "_id" : ObjectId("5a4d9ec184b9b2076686b0ad"),
    "title" : "Batman",
    "year" : 1989,
    "imdb_rating" : 7.6
}

注:在mongodb复制集当中,默认从库不允许读写。
在从库打开配置(危险)
注意:严禁在从库做任何修改操作

my_repl:SECONDARY> rs.slaveOk()
my_repl:SECONDARY> show tables;
movies
my_repl:SECONDARY> db.movies.find().pretty()
{
    "_id" : ObjectId("5a4d9ec184b9b2076686b0ac"),
    "title" : "Jaws",
    "year" : 1975,
    "imdb_rating" : 8.1
}
{
    "_id" : ObjectId("5a4d9ec184b9b2076686b0ad"),
    "title" : "Batman",
    "year" : 1989,
    "imdb_rating" : 7.6
}

在从库查看完成在登陆到主库

1.4.7 复制集管理操作

(1)查看复制集状态:

rs.status();     # 查看整体复制集状态
rs.isMaster();   #  查看当前是否是主节点

###(2)添加删除节点

rs.add("ip:port");     #  新增从节点
rs.addArb("ip:port"); #  新增仲裁节点
rs.remove("ip:port"); #  删除一个节点

注:

添加特殊节点时,
  1>可以在搭建过程中设置特殊节点
  2>可以通过修改配置的方式将普通从节点设置为特殊节点
  /*找到需要改为延迟性同步的数组号*/;

(3)配置延时节点(一般延时节点也配置成hidden)

cfg=rs.conf() 
cfg.members[2].priority=0
cfg.members[2].slaveDelay=120
cfg.members[2].hidden=true
注:这里的2是rs.conf()显示的顺序(除主库之外),非ID

重写复制集配置

rs.reconfig(cfg)   

也可将延时节点配置为arbiter节点

cfg.members[2].arbiterOnly=true

配置成功后,通过以下命令查询配置后的属性

rs.conf();

1.4.8 副本集其他操作命令

查看副本集的配置信息

my_repl:PRIMARY> rs.config()

查看副本集各成员的状态

my_repl:PRIMARY> rs.status()

1.4.8.1  副本集角色切换(不要人为随便操作)

rs.stepDown()
rs.freeze(300)  # 锁定从,使其不会转变成主库,freeze()和stepDown单位都是秒。
rs.slaveOk()    # 设置副本节点可读:在副本节点执行

   插入数据

> use app
switched to db app
app> db.createCollection('a')
{ "ok" : 0, "errmsg" : "not master", "code" : 10107 }

查看副本节点

> rs.printSlaveReplicationInfo()
source: 192.168.1.22:27017
    syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

LEAVE A COMMENT

Captcha Code