技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录注册

下次自动登录
现在的位置: 首页MongoDB>正文
Linux下MongoDB副本集部署
2015年11月25日 MongoDB 暂无评论 ⁄ 被围观 11,814次+

说明:

有三台服务器,已经安装好了MongoDB数据库,具体信息如下:

MongoDB版本:mongodb-linux-x86_64-2.6.11

MongoDB安装目录:/usr/local/mongodb

MongoDB数据库目录:/home/data/mongodb/mongodb_data

MongoDB日志目录:/home/data/mongodb/mongodb_log

MongoDB配置文件:/usr/local/mongodb/mongodb.conf

三台服务器IP地址:

192.168.0.8

192.168.0.9

192.168.0.10

实现目的:

对三台服务器进行部署,实现副本集功能。

具体操作:

一、确定副本集名称、主从节点、配置文件、启动脚本信息

1、定义副本集名称为:osyunwei

2、主节点为:192.168.0.8

3、两台从节点为:

192.168.0.9

192.168.0.10

4、确保三台副本集服务器上的配置文件完全相同,如下:

第一种写法:官方推荐、适合2.6以后的版本

vi /usr/local/mongodb/mongodb.conf #编辑

systemLog:
    destination: "file"
    path: "/home/data/mongodb/mongodb_log/mongodb.log"
    logAppend: true
storage:
    journal:
       enabled: true
    dbPath: "/home/data/mongodb/mongodb_data/"
    directoryPerDB: true
processManagement:
    fork: true
    pidFilePath: "/usr/local/mongodb/mongo.pid"
net:
    port: 27017
    http:
          enabled: true
          RESTInterfaceEnabled: true

#security:
#   keyFile: "/usr/local/mongodb/keyfile"
#   clusterAuthMode: "keyFile"
#   authorization: "enabled"
replication:
    replSetName: "osyunwei"

:wq! #保存退出

第二种写法:适用所有版本

vi /usr/local/mongodb/mongodb.conf #编辑

port=27017

dbpath=/home/data/mongodb/mongodb_data/

logpath=/home/data/mongodb/mongodb_log/mongodb.log

pidfilepath=/usr/local/mongodb/mongo.pid

fork=true

logappend=true

shardsvr=true

directoryperdb=true

#auth=true

#keyFile =/usr/local/mongodb/keyfile

replSet =osyunwei

:wq! #保存退出

注意:以上两种配置文件的写法都可以。

5、确保三台副本集服务器上的启动脚本完全相同,如下:

vi /etc/init.d/mongod

ulimit -SHn 655350

#!/bin/sh

# chkconfig: - 64 36

# description:mongod

case $1 in

start)

/usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/mongodb.conf

;;

stop)

/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.shutdownServer()"

#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"

;;

status)

/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.stats()"

#/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"

;;

esac

:wq! #保存退出

二、对主节点进行配置

1、/usr/local/mongodb/bin/mongo #进入主节点192.168.0.8

系统运维  www.osyunwei.com  温馨提醒:qihang01原创内容©版权所有,转载请注明出处及原文链接

rs.initiate()

rs.conf()

#初始化副本集,设置本机为主节点PRIMARY

2、添加副本集从节点

rs.add("192.168.0.9:27017")

rs.add("192.168.0.10:27017")

3、设置节点优先级

cfg = rs.conf() #查看节点顺序

cfg.members[0].priority = 1

cfg.members[1].priority = 1

cfg.members[2].priority = 2 #设置_ID为2的节点为主节点

rs.reconfig(cfg) #使配置生效

exit #退出控制台

说明:

MongoDB副本集通过设置priority决定优先级,默认优先级为1,priority值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点primay。

cfg.members[0].priority =1参数,中括号里的数字是执行rs.conf()查看到的节点顺序,第一个节点是0,第二个节点是1,第三个节点是2,以此类推。

三、分别对两台从节点进行配置

/usr/local/mongodb/bin/mongo #进入从节点192.168.0.9/10

db.getMongo().setSlaveOk() #设置从节点为只读数据库

exit #退出控制台

四、设置数据库账号,开启登录验证

1、设置数据库账号

在主节点服务器192.168.0.8上面操作

/usr/local/mongodb/bin/mongo #进入主节点192.168.0.8

show dbs #列出所有数据库

use admin #切换到admin数据库,添加的账号才是管理员账号。

show collections

db.system.users.find()

#添加两个管理员账号,一个系统管理员:system 一个数据库管理员:administrator

db.createUser({user:"system",pwd:"123456",roles:[{role:"root",db:"admin"}]}) #添加系统管理员账号,用来管理用户

db.auth('system','123456') #添加管理员用户认证,认证之后才能管理所有数据库

db.createUser({user:"administrator",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) #添加数据库管理员,用来管理所有数据库

db.auth('administrator','123456') #添加管理员用户认证,认证之后才能管理所有数据库

exit #退出

#用刚才创建的账号进行登录

/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin

exit #退出

/usr/local/mongodb/bin/mongo -u administrator -p 123456 --authenticationDatabase admin

exit #退出

2、开启登录验证

在主节点服务器192.168.0.8上面操作

cd /usr/local/mongodb #进入mongodb安装目录

openssl rand -base64 21 > keyfile #创建一个keyfile(使用openssl生成21位base64加密的字符串)

chmod 600 /usr/local/mongodb/keyfile #修改文件权限为600

cat /usr/local/mongodb/keyfile #查看刚才生成的字符串,做记录,后面要用到。

注意:上面的数字21,最好是3的倍数,否则生成的字符串可能含有非法字符,认证失败。

3、设置配置文件

分别在所有节点上面操作

192.168.0.8/9/10

配置文件/usr/local/mongodb/mongodb.conf取消注释

第一种写法:

security:
   keyFile: "/usr/local/mongodb/keyfile"
   clusterAuthMode: "keyFile"
   authorization: "enabled"

第二种写法:

auth=true

keyFile =/usr/local/mongodb/keyfile

启动脚本使用下面的代码(注释原来的,启用之前注释掉的)

/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"

/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('system', '123456');db.stats()"

4、设置权限验证文件

先进入主节点服务器192.168.0.8,查看cat /usr/local/mongodb/keyfile #查看刚才生成的字符串,做记录

再分别进入两台从节点服务器192.168.0.9/10

vi /usr/local/mongodb/keyfile #输入上一步查看到的字符串

:wq! #保存退出

chmod 600 /usr/local/mongodb/keyfile #修改文件权限为600

五、验证副本集

分别重启三台副本集服务器

/usr/local/mongodb/bin/mongo -u system -p 123456 --authenticationDatabase admin #登录到控制台

rs.status() #副本集状态查看

exit #退出

当主节点出现故障的时候,在两个从节点上会选举出一个新的主节点,故障恢复之后,之前的主节点会变为从节点。

至此,Linux下MongoDB副本集部署完成。

扩展阅读:

官方文档:

http://docs.mongodb.org/manual/reference/configuration-options/

rs.remove("ip:port"); #删除副本

/usr/local/mongodb/bin/mongo --host 192.168.0.9 #远程连接服务器

默认情况下,mongodb不启用验证的。

单服务器,启动时添加--auth参数开启验证。

副本集服务器,开启--auth参数的同时,必须指定keyfile参数,节点之间的通讯基于该keyfile,key长度必须在6到1024个字符之间,最好为3的倍数,不能含有非法字符。

重新设置副本集

rs.stepDown()

cfg = rs.conf()

cfg.members[n].host= 'new_host_name:prot'

rs.reconfig(cfg)

副本集所有节点服务器总数必须为奇数,服务器数量为偶数的时候,需要添加一个仲裁节点,仲裁节点不参与数副本集,只有选举权。

rs.addArb("192.168.0.11:27017") #添加仲裁节点

副本集选举最重要的一个特性是:

集合中的成员一定要有大部分成员(即超过一半数量)是保持正常在线状态,3个成员的副本集,需要至少2个从属节点是正常状态(如果一个从属节点挂掉,那么当主节点down掉产生故障切换时,由于副本集中只有一个节点是正常的,少于一半,则选举失败),4个成员的副本集,则需要3个成员是正常状态,(先关闭一个从属节点,然后再关闭主节点,产生故障切换,此时副本集中只有2个节点正常,则无法成功选举出新主节点)。

     
» 转载请注明来源:系统运维 » Linux下MongoDB副本集部署

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2017 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接