mongodb3.4.6配置主从

1.rpm包安装mongodb3.4.6
下载地址:https://repo.mongodb.org/yum/redhat/7/mongodb-org/3.4/x86_64/RPMS/
rpm -ivh mongodb-org-shell-3.4.6-1.el7.x86_64.rpm 
rpm -ivh mongodb-org-tools-3.4.6-1.el7.x86_64.rpm
rpm -ivh mongodb-org-server-3.4.6-1.el7.x86_64.rpm
rpm  -ivh mongodb-org-3.4.6-1.el7.x86_64.rpm       

2.启动mongodb,设置开机自启动
[root@node1 mongodb]# systemctl start mongod
[root@node1 mongodb]# systemctl enable mongod
通过启动MongoDB的服务mongod运行起来之后可以通过netstat查看服务端口(mongodb运行在TCP的27017端口上)

[root@node1 mongodb]# netstat -tanlp |grep mongod
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      63532/mongod

3.MongoDB的文件和目录说明
# 配置文件;
/etc/mongod.conf
# 日志文件;
/var/log/mongodb/mongod.log
# PID文件;
/var/run/mongodb/mongod.pid
# 数据目录;
/var/lib/mongo
# 配置文件;
/etc/mongod.conf

MongoDB工具集

MongoDB在bin目录下提供了一系列有用的工具,这些工具提供了MongoDB在运维管理上的方便,mongodb 3.0官方使用GO语言全部重写了这些工具。
Bsondump – 将bson格式的文件转储为json格式的数据。
Mongo – 客户端命令行工具,其实也是一个javascript解释器,支持js语法。
Mongod – 数据库服务器端,每个实例启动一个进程,可以fork为后台运行。
Mongodump/mongorestore – 数据库备份和恢复工具。
Mongoexport/mongoimport – 数据导出和导入工具。
Mongofiles – GridFS管理工具,可实现二进制文件的存储。
Mongos – 分片路由,如果是用来sharding功能,则应用程序连接的是mongos而不是mongod。
Mongostat – 实例统计信息。
Mongotop – 数据库磁盘I/O实时分析工具。
Mongooplog – 日志分析工具。
Mongoopperf – 性能测试工具。

MongoDB后台管理 Shell
当MongoDB安装好并启动之后,如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):

[root@node1 mongodb]# mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
  http://docs.mongodb.org/
Questions? Try the support group
  http://groups.google.com/group/mongodb-user
Server has startup warnings: 
2018-06-08T22:05:22.147+0800 I CONTROL  [initandlisten] 
2018-06-08T22:05:22.147+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-06-08T22:05:22.147+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-06-08T22:05:22.147+0800 I CONTROL  [initandlisten] 
2018-06-08T22:05:22.169+0800 I CONTROL  [initandlisten] 
2018-06-08T22:05:22.169+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-06-08T22:05:22.169+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-06-08T22:05:22.169+0800 I CONTROL  [initandlisten] 
> 
> 

上面通过mongo客户端进入到了mongodb shell交互式接口,但是会有两个警告信息,警告信息是关于Linux中hugepage的。
MongoDB警告信息就是要求关闭hugepage,Oracle也要求关闭,HDFS会因为这个性能严重受影响。就是允许hugepage可以动态分配,而不是系统启动时预先分配,看上去对内存消耗很大的服务都不喜欢它

以下操作是临时关闭hugepage开机自动分配:

[root@node1 mongodb]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled 
[root@node1 mongodb]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag


4.开始配置集群环境
master  node1: 10.11.0.210
slave01 node2: 10.11.0.212
slave02 node5: 10.11.0.215

# 配置文件(三台主机保持一致)
[root@node1 data]# cat /etc/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# 监听ip和端口
net:
  port: 27017
  bindIp: 0.0.0.0
  # http的访问接口,可以通过http://ip:28017访问
  http:
    RESTInterfaceEnabled: true

replication:
  oplogSizeMB: 1024
  # 集群名称
  replSetName: wanxin

配置文件修改的时候一定要注意空格,两个空格,类似jinja的语法
一定要注意空格,NND害S人,wx是我随便取的名字。
然后关机克隆三份虚拟文件,也就是在做三台机器出来。

# 集群配置
[root@node1 mongodb]# mongo
MongoDB shell version v3.4.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.6
> config = {_id:"wanxin", members:[{_id:0, host:"10.11.0.210:27017"},{_id:1, host:"10.11.0.212:27017"},{_id:2, host:"10.11.0.215:27017"}]}
{
  "_id" : "wanxin",
  "members" : [
    {
      "_id" : 0,
      "host" : "10.11.0.210:27017"
    },
    {
      "_id" : 1,
      "host" : "10.11.0.212:27017"
    },
    {
      "_id" : 2,
      "host" : "10.11.0.215:27017"
    }
  ]
}
# 初始化集群配置
> rs.initiate(config)
{ "ok" : 1 }
wanxin:SECONDARY> 
wanxin:PRIMARY> 
wanxin:PRIMARY>

# 查看集群状态
wanxin:PRIMARY> rs.status()
{
  "set" : "wanxin",
  "date" : ISODate("2018-06-11T07:34:53.872Z"),
  "myState" : 1,
  "term" : NumberLong(1),
  "heartbeatIntervalMillis" : NumberLong(2000),
  "optimes" : {
    "lastCommittedOpTime" : {
      "ts" : Timestamp(1528702485, 1),
      "t" : NumberLong(1)
    },
    "appliedOpTime" : {
      "ts" : Timestamp(1528702485, 1),
      "t" : NumberLong(1)
    },
    "durableOpTime" : {
      "ts" : Timestamp(1528702485, 1),
      "t" : NumberLong(1)
    }
  },
  "members" : [
    {
      "_id" : 0,
      "name" : "10.11.0.210:27017",
      "health" : 1,
      "state" : 1,
      "stateStr" : "PRIMARY",
      "uptime" : 813,
      "optime" : {
        "ts" : Timestamp(1528702485, 1),
        "t" : NumberLong(1)
      },
      "optimeDate" : ISODate("2018-06-11T07:34:45Z"),
      "electionTime" : Timestamp(1528702353, 1),
      "electionDate" : ISODate("2018-06-11T07:32:33Z"),
      "configVersion" : 1,
      "self" : true
    },
    {
      "_id" : 1,
      "name" : "10.11.0.212:27017",
      "health" : 1,
      "state" : 2,
      "stateStr" : "SECONDARY",
      "uptime" : 150,
      "optime" : {
        "ts" : Timestamp(1528702485, 1),
        "t" : NumberLong(1)
      },
      "optimeDurable" : {
        "ts" : Timestamp(1528702485, 1),
        "t" : NumberLong(1)
      },
      "optimeDate" : ISODate("2018-06-11T07:34:45Z"),
      "optimeDurableDate" : ISODate("2018-06-11T07:34:45Z"),
      "lastHeartbeat" : ISODate("2018-06-11T07:34:52.013Z"),
      "lastHeartbeatRecv" : ISODate("2018-06-11T07:34:52.376Z"),
      "pingMs" : NumberLong(0),
      "syncingTo" : "10.11.0.215:27017",
      "configVersion" : 1
    },
    {
      "_id" : 2,
      "name" : "10.11.0.215:27017",
      "health" : 1,
      "state" : 2,
      "stateStr" : "SECONDARY",
      "uptime" : 150,
      "optime" : {
        "ts" : Timestamp(1528702485, 1),
        "t" : NumberLong(1)
      },
      "optimeDurable" : {
        "ts" : Timestamp(1528702485, 1),
        "t" : NumberLong(1)
      },
      "optimeDate" : ISODate("2018-06-11T07:34:45Z"),
      "optimeDurableDate" : ISODate("2018-06-11T07:34:45Z"),
      "lastHeartbeat" : ISODate("2018-06-11T07:34:52.013Z"),
      "lastHeartbeatRecv" : ISODate("2018-06-11T07:34:52.356Z"),
      "pingMs" : NumberLong(0),
      "syncingTo" : "10.11.0.210:27017",
      "configVersion" : 1
    }
  ],
  "ok" : 1
}

主节点中有一些数据,不会自动同步到slave节点,在slave节点查询报错:
wanxin:SECONDARY> db.students.find()
Error: error: {
  "ok" : 0,
  "errmsg" : "not master and slaveOk=false",
  "code" : 13435,
  "codeName" : "NotMasterNoSlaveOk"
}
wanxin:SECONDARY> 
# 解决
wanxin:SECONDARY> rs.slaveOk();

猜你喜欢

转载自www.cnblogs.com/reblue520/p/9247373.html