当前位置 : 主页 > 网络编程 > 其它编程 >

mongoDB系列之(二):mongoDB副本集

来源:互联网 收集:自由互联 发布时间:2023-07-02
mongoDB系列之(二):mongoDB副本集Mongodb2.6副本集验证部署和认证副本集有以下特点:1.最小构成是:primary,secondary,arbiter,一般部 mongoDB系列之(二):mongoDB 副本集 Mongodb2.6副本集验证
mongoDB系列之(二):mongoDB副本集Mongodb2.6副本集验证部署和认证副本集有以下特点:1.最小构成是:primary,secondary,arbiter,一般部 mongoDB系列之(二):mongoDB 副本集

Mongodb2.6副本集验证部署和认证

副本集有以下特点:

1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。

2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票。

3. 最大50 members,但是只能有 7 voting members,其他是non-voting members。

注意:配置mongo副本集的时候,不能先添加登陆授权用户,但是可以先修改端口号。

提示:现在每一台从机器上面删除所有数据库

show dbsdb.dropDatabase() --数据全部清空show dbs

今天在做mongoDB主从的时候,遇到了ipdress has data already, cannot initiate set的问题,正好看到之前有人也遇到这个问题,说是要把从的数据全部清空。

修改每一台机器的配置文件/etc/mongod.conf,增加副本集名称

-------------------XShell 5--------------------sed -i 's/^#replSet=setname/replSet=wangyunpeng/g' /etc/mongod.conf-------------------Shell--------------------#replSet=setnamereplSet=wangyunpeng

然后重起每一台mongo的服务

service mongod stopservice mongod start

此时再通过MongoVUE工具访问每一个mongo服务器里面的集合,会提示:cannot currently read from this replSet *****错误。

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

在主数据的节点上登陆mongodb数据库,这里必须选择主库进行replSet设置操作:

mongo 127.0.0.1:27017/admin

指定副本集的名字为wangyunpeng和数据节点、仲裁者

config_repl={ "_id" : "wangyunpeng", "members" : [ { "_id" : 0, "host" : "10.53.0.40:18181", "priority" : 10 }, { "_id" : 1, "host" : "10.53.0.41:18181", "priority" : 9 }, { "_id" : 2, "host" : "10.53.0.45:18181", "priority" : 9 数据节点 (或 "arbiterOnly" : true 仲裁者) } ]}rs.initiate(config_repl);

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

查看成功之后的主机信息:

1、瞬时的状态:注意从库的state是5。并且rs.status();前面是“>”,也表示还没有创建完成,需要等待一会,如下图:

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

2、最终的状态:注意rs.status();左面的>是primary,还有syncingTo的机器地址和端口,如下图:

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

仲裁者的信息

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

也可以在每一台从机上登陆mongo,使用rs.status()查看从机状态,还有syncingTo的机器地址和端口,注意下图:

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

配置玩副本集之后开始用户认证,需要配置两个用户(只创建系统用户也可以),一个是系统用户,一个是数据库管理员用户。配置完之后,配置信息将同步到其他节点。

role:[“root”]表示系统用户,role:[“useAdminAnyDatabase”]表示数据库管理员用户,

db.createUser({user:"sa",pwd:"1234",roles:["root"]}); --创建用户db.auth("sa","1234"); --设置用户登陆权限,密码一定要和创建用户时输入的密码相同show users; --查看创建的用户

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

从库查看登陆用户是否同步:

db.getMongo().setReadPref('secondaryPreferred');show users;

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

配置完用户验证之后,停掉副本集(顺序:先从从库停止,最后停主库),用openssl生成密码文件,

cd /dataopenssl rand -base64 745 > mongodb-keyfile

赋予权限600,文件才能被调用

chmod 400 mongodb-keyfile

保存好文件,修改所有者和所有组,

chown -R mongod:mongod mongodb-keyfile

然后在每一个从机器上的配置文件加入启动调用认证文件参数 vim /etc/mongod.conf,如:

------------------------------XShell 5--------------------------------sed -i 's/^#keyFile=\/path\/to\/keyfile/keyFile=\/data\/mongodb-keyfile/g' /etc/mongod.conf--------------------------Shell------------------------------------keyFile = /data/mongodb-keyfile

然后将mongodb-keyfile逐一拷贝到每一个从的机器上,然后启动副本,只用经过密码文件认证的节点才能加入。数据库操作也需要密码认证,大大提高了安全性。

cd /data/openssl rand -base64 745 > mongodb-keyfilechmod 400 mongodb-keyfilechown -R mongod:mongod mongodb-keyfilevim /etc/mongo.confkeyFile=/data/mongodb-keyfilescp /data/mongodb-keyfile root@192.168.1.111:/data/mongo/ (先在主机上写config文件,把本地的私钥文件复制到每一台服务器(主、从、仲裁)的~/.ssh/目录中)

这样就不用修改/etc/mongod.conf文件的nuauth=false和auth=true也能行了,修改也没有错。

都配置完成之后,重起Mongo服务(顺序:先主库,在从库),登录的时候记得使用密码

mongo 127.0.0.1:27017/admin -u用户名 -p密码****:PRIMARY> rs.status(); --查看状态

注意:arbiter机器登陆不需要指定用户名和密码,例如;mongo 127.0.0.1:27017/admin

Failover动作

关闭主库

db.shutdownServer() --关闭主库mongod -f /etc/mongod.conf --重起主库

库上查看副本集状态,可以看到一个从库升级为主库

rs.status()

同期动作确认

在主库上插入一条记录操作

在从库上查看数据已经同期,直接查会抱错,需要使用db.getMongo().setReadPref(secondaryPreferred)命令

wangyunpeng:SECONDARY> use shoespie_websitewangyunpeng:SECONDARY> show collections

2016-01-25T21:02:07.585-0500 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131wangyunpeng:SECONDARY> db.getMongo().setReadPref("secondaryPreferred")wangyunpeng:SECONDARY> use shoespie_websitewangyunpeng:SECONDARY> show collections

《MongoDB 2.6配置副本集,支持端口号修改和用户登录认证,mongoDB系列之(二):mongoDB 副本集》

3. 读写分离

主库,从库都支持读操作。但是,默认情况读也是从主库来读。

从库可以通过设置ReadPreference打开支持读操作,ReadPreference有几种模式:

Primary #从主的读,默认

primaryPreferred #基本上从主的读,主不可用时,从从的读

secondary #从从的读

secondaryPreferred #基本上从从的读,从不可用时,从主的读

nearest #从网络延迟最小的读

基本上常用的是,Primary,secondary,nearest

副本集的设定中可以通过Tag把成员归类,通过下面方法指定读的类型:

1,程序连接的时候,指定读的类型ReadPreference

2,用mongo命令连接,只对当前连接有效

wangyunpeng:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')

【文章原创作者:大丰网站设计公司 http://www.1234xp.com/dafeng.html 处的文章,转载请说明出处】
上一篇:中望cad2017专业版|中望cad2017sp专业版下载
下一篇:没有了
网友评论