Mongo副本集部署
Mongo副本集部署
1.1 安装mongo
略
1.2. 创建配置文件
vim mongodb.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/log/mongodb.log
fork=true
logappend=true
bind_ip=192.168.8.207 # 各节点IP
port=27017
replSet=rs0 # 副本集名称,各个配置文件中,必须相同
1.3. 启动mongo
mongd -f mongodb.conf
1.4. 配置副本集
# 连接任意一台mongo实例,执行rs.initiate()进行初始化
>conf=
... {
... "_id" : "rs0",
... "members" : [
... {"_id" : 0, "host" : "192.168.8.204:27017"},
... {"_id" : 1, "host" : "192.168.8.205:27017"},
... {"_id" : 2, "host" : "192.168.8.207:27017"}
... ]}
> rs.initiate(conf)
{
"ok" : 1,
"operationTime" : Timestamp(1639207786, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1639207786, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
# rs.initiate()不传入任何参数, 默认对副本集进行初始化,
1.5. 开启安全认证
1.5.1. 创建用户
> use admin
> db.createUser({user:"name",pwd:"passwd",roles:["root"]})
use admin
> db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
1.5.2. 验证用户
> db.auth("user","passwd")
1.5.3. 创建副本集认证key
该key的权限必须是600
所有副本集节点必须要相同的keyfile
openssl rand -base64 745 -out mongo.keyfile
chmod 400 mongo.keyfile
1.5.4. 添加配置文件
vim mongodb.conf
keyFile=/usr/local/mongodb/mongo.keyfile
auth=true
1.5.5. 启动mongo
mongd -f mongodb.conf
如果添加keyfile后启动失败,那就是keyfile的问题,查看输出日志,修改keyfile内容
2. 副本集操作
2.1. 副本集操作
向副本集中添加成员
rs.add("192.168.8.208:27017")
向副本集中添加备份节点
rs.add({"_id" :3,"host":"192.168.8.208:27017","priority":0,"hidden":true})
从副本集中删除成员
rs.remove("192.168.8.208:27017")
向副本集中添加仲裁
rs.addArb("192.168.8.208:27017")
修改副本集成员
rs0:PRIMARY> var conf=rs.conf()
rs0:PRIMARY> conf.members[1].priority = 5
# 刷新
rs0:PRIMARY> rs.reconfig(conf)
2.2. 副本集切换
冰冻,该时间内不参于选举primary
rs.freeze(120)
降级并且该时间内不参于选举primary
rs.stepDown(120)
强制让一个节点成为Primary,可以将该节点的优先级设置成最高
cfg = rs.conf()
cfg.members[0].priority = 5
cfg.members[0].priority = 1
cfg.members[0].priority = 1
rs.reconfig(cfg)
2.3. 副本集监控
查看副本集配置信息
rs0:PRIMARY> rs.conf()
查看副本集运行状态
rs0:PRIMARY> rs.status()
查看备份节点的复制信息
rs0:PRIMARY> db.printSlaveReplicationInfo()
db.printSecondaryReplicationInfo()
2.4. 副本集测试
在primary上插入一万条数据
rs0:PRIMARY> for(var i=0;i<100;i++){db.customer.insert({"name":"user"+i})}
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.customer.count()
10000
在secondary上查看客户数据是否已经同步
rs0:SECONDARY> rs.slaveOk() 或者 rs.secondaryOk()
rs0:SECONDARY> db.customer.count()
2.5. 故障转移测试
使用 rs.status() 查看当前 PRIMARY 节点,关闭 PRIMARY 节点
mongod --shutdown --dbpath /usr/local/mongodb/data
PRIMARY 由其他节点继承
当再次启动,由于选举优先级最高,自动被选举为Primary