原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://navyaijm.blog.51cto.com/4647068/1685347
一、环境
1、架构图
2、部署详细
1
2
3
|
10.10.17.26:27000 (primary) 10.10.17.27:27000 (secondary) 10.10.2.74:27000 (arbiter) |
3、软件版本
1
2
|
mongdb :2.6.11 系统:centos 6.6 |
二、安装配置
1、安装见mongodb安装
2、撰写配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
vi /etc/mongod_27000 .conf
logpath= /data/mongodb/navy_db/log/mongod .log #mongodb日志文件
logappend= true #追加方式写日志文件
fork= true #后台运行
port=27000 #mongodb端口
dbpath= /data/mongodb/navy_db/db
pidfilepath= /data/mongodb/navy_db/log/mongod .pid
bind_ip=0.0.0.0 rest = true #开启web访问
journal = true #启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
oplogSize=2048 #同步操作记录文件大小(MB)
replSet=dbset #副本集名称,同一个副本集,名称必须一致
auth= true #开启验证
keyFile= /data/mongodb/navy_db/password .key #key认证
|
3、生成keyfile文件
1
|
echo "c57a012cf2f8a8e20dd4b21a7fae48b3" > /data/mongodb/navy_db/password .key
|
4、设置keyfile权限,必须是600
1
|
chmod 600 /data/mongodb/navy_db/password .key
|
5、启动服务
1
|
ulimit -s 4096 && ulimit -m 16777216 & numactl --interleave=all /usr/bin/mongod -f /etc/mongod_27000 .conf
|
PS:
在配置集群之前auth和keyFile先注释掉,待集群初始化完成,建立用户(从库上不需要建用户,当集群初始化完成会从主库上同步过来的,如果从库建了用户,集群初始化会报错,提示从库已有数据),然后打开,并重启服务让其生效
三、集群配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#use到admin use admin 创建配置(dbset是集群名称,必须和配置文件中replSet的值一样) config = { _id: "dbset" , members:[
... ... {_id:1,host: "10.10.11.34:27000" },
... ... {_id:2,host: "10.10.16.6:27000" }
] ... ... } #初始化集群 rs.initiate(config);
#添加仲裁节点 rs.addArb( "10.10.2.74:27000" )
#查看集群状态 rs.status()
|
PS:其他常用命令
1
2
3
4
5
6
7
8
9
10
|
#删除一个节点 rs.remove( "10.10.2.74:27000" )
#查看集群配置信息 rs.conf() #查看当前谁是primary rs.isMaster() #查看主从延时 rs.printSlaveReplicationInfo() #查看rs相关命令 rs.help() |
rs.status()结果说明
1
2
3
4
5
6
7
8
9
10
11
|
1. STARTUP:刚加入到复制集中,配置还未加载 2. STARTUP2:配置已加载完,初始化状态 3. RECOVERING:正在恢复,不适用读 4. ARBITER: 仲裁者 5. DOWN:节点不可到达 6. UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂 7. REMOVED:移除复制集 8. ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态 9. FATAL:出错。查看日志 grep “replSet FATAL”找出错原因,重新做同步
10. PRIMARY:主节点 11. SECONDARY:备份节点 |
四、建立用户(只能在primary节点上操作)
1
2
3
4
5
|
use admin db.addUser( 'admin' , '123456' ) #建立管理员账号
use navy_db #如果navy_db存在就进入库,如果不存在就建立navy_db库,空库show dbs是看不到的
db.addUser( 'navy_db_pro' , '123456' ) #建立navy_db的读写账号
db.addUser( 'navy_db_sel' , '123456' , true ) #建立navy_db的只读账号
|
五、重启集群
把auth和keyFile的注释去掉,arbiter、secondary、primary三个节点依次重启,让其生效
1
|
rs.status() 查看集群状态是否ok
|
PS:
1、从库默认是不可以读的,如果需要从库提供读业务,需要做一下设置
db.getMongo().setSlaveOk()
2、mongdb的客户端驱动支持这种架构,主库挂了,secondary提升为主,对于应用基本透明
1
|
client=MongoClient(“mongdb: //navy_db_pro :123456@10.10.17.26:27000,10.10.17.27:27000 /navy_db ”
|
本文出自 “屌丝运维男” 博客,请务必保留此出处http://navyaijm.blog.51cto.com/4647068/1685347