
准备三台机器,相互可以访问的。处理思路,先构建无需认证的集群,然后进入主节点,初始化集群的账号密码。然后开启所有机器的认证。
安装mongo1
安装mongo
// 下载# wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz# tar zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgz# mv mongodb-linux-x86_64-rhel70-4.2.1 /usr/local/mongodb// 创建db的data目录# cd /usr/local/mongodb/# mkdir data// 存放数据# mkdir data/db// 存放log# mkdir data/logs# touch data/mongodb.log# cd data# mv mongdb.log logs写入配置文件,vi mongodb.cof
// 端口port = 27018bind_ip = 0.0.0.0#集群名字replSet = mongos#数据目录(自己刚才设置的位置)dbpath = /usr/local/mongodb/data/db#日志目录(自己刚才设置的位置))logpath = /usr/local/mongodb/data/logs/mongodb.log#设置后台运行fork = true#日志输出方式logappend = true#开启认证#auth = true#安全文件地址#keyfile = /usr/local/mongodb/data/mongodb.key关于ip
bind_ip = 192.168.0.136 #如果修改成本机IP,那除了本机外的机器都可以连接(就是自己连不了、哈哈、蛋疼)bind_ip = 0.0.0.0 #改成0,那么大家都可以访问(共赢)bind_ip = 127.0.0.1 #改成127,那就只能自己练了(独吞)所以为了方便其他服务器和自己连接,就把bind_ip改成0.0.0.0
启动
# ./bin/mongod -f ./data/mongodb.conf三台机器都安装下
构建副本集进去其中一台机器
./bin/mongo 192.168.56.101:27018查看副本集的状态
rs.status(){ "operationTime" : Timestamp(0,0),"ok" : 0,"errmsg" : "no replset config has been received","code" : 94,"codename" : "NotYetinitialized","$clusterTime" : { "clusterTime" : Timestamp(0,"signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyID" : NumberLong(0) } }}发现没有初始化,然后我们来初始化
rs.initiate({ _ID: "mongos",members: [ { _ID : 0,host : "192.168.56.101:27018" },{ _ID : 1,host : "192.168.56.102:27018" },{ _ID : 2,host : "192.168.56.103:27018" } ] });再次查看状态
rs.status(){ "set" : "mongos","date" : ISODate("2020-07-19T14:49:52.387Z"),"myState" : 1,"term" : NumberLong(1),"syncingTo" : "","syncSourceHost" : "","syncSourceID" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1595170188,2),"t" : NumberLong(1) },"lastCommitteDWallTime" : ISODate("2020-07-19T14:49:48.999Z"),"readConcernMajorityOpTime" : { "ts" : Timestamp(1595170188,"readConcernMajorityWallTime" : ISODate("2020-07-19T14:49:48.999Z"),"applIEdOpTime" : { "ts" : Timestamp(1595170188,"durableOpTime" : { "ts" : Timestamp(1595170188,"lastApplIEDWallTime" : ISODate("2020-07-19T14:49:48.999Z"),"lastDurableWallTime" : ISODate("2020-07-19T14:49:48.999Z") },"lastStableRecoveryTimestamp" : Timestamp(1595170187,3),"lastStableCheckpointTimestamp" : Timestamp(1595170187,"electionCandIDateMetrics" : { "lastElectionReason" : "electionTimeout","lastElectionDate" : ISODate("2020-07-19T14:49:47.525Z"),"termAtElection" : NumberLong(1),"lastCommittedOpTimeatElection" : { "ts" : Timestamp(0,"t" : NumberLong(-1) },"lastSeenopTimeatElection" : { "ts" : Timestamp(1595170176,1),"numVotesNeeded" : 2,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"numCatchUpOps" : NumberLong(269553681),"newTermStartDate" : ISODate("2020-07-19T14:49:47.939Z"),"wMajorityWriteAvailabilityDate" : ISODate("2020-07-19T14:49:48.897Z") },"members" : [ { "_ID" : 0,"name" : "192.168.56.101:27018","ip" : "192.168.56.101","health" : 1,"state" : 1,"stateStr" : "PRIMARY","uptime" : 1492,"optime" : { "ts" : Timestamp(1595170188,"t" : NumberLong(1) },"optimeDate" : ISODate("2020-07-19T14:49:48Z"),"infoMessage" : "Could not find member to sync from","electionTime" : Timestamp(1595170187,"electionDate" : ISODate("2020-07-19T14:49:47Z"),"configVersion" : 1,"self" : true,"lastHeartbeatMessage" : "" },{ "_ID" : 1,"name" : "192.168.56.102:27018","ip" : "192.168.56.102","state" : 2,"stateStr" : "SECONDARY","uptime" : 15,"optimeDurable" : { "ts" : Timestamp(1595170188,"optimeDurableDate" : ISODate("2020-07-19T14:49:48Z"),"lastHeartbeat" : ISODate("2020-07-19T14:49:51.552Z"),"lastHeartbeatRecv" : ISODate("2020-07-19T14:49:50.817Z"),"PingMs" : NumberLong(1),"lastHeartbeatMessage" : "","syncingTo" : "192.168.56.101:27018","syncSourceHost" : "192.168.56.101:27018","syncSourceID" : 0,"infoMessage" : "","configVersion" : 1 },{ "_ID" : 2,"name" : "192.168.56.103:27018","ip" : "192.168.56.103","lastHeartbeat" : ISODate("2020-07-19T14:49:51.555Z"),"lastHeartbeatRecv" : ISODate("2020-07-19T14:49:50.830Z"),"PingMs" : NumberLong(0),"configVersion" : 1 } ],"ok" : 1,"$clusterTime" : { "clusterTime" : Timestamp(1595170188,"keyID" : NumberLong(0) } },"operationTime" : Timestamp(1595170188,2)}发现已经初始化好了
加入认证进去到PRIMARY节点初始化集群的登录账号和密码信息
# ./bin/mongo 192.168.56.101:27018# use admin# db.createuser({user: 'handle',pwd: '123456',roles: ['root']})生成keyfile
# 400权限是要保证安全性,否则mongod启动会报错openssl rand -base64 756 > mongodb.keychmod 400 mongodb.key然后放到mongodb中的data目录,三台机器keyfile要一致。我是在一台中生成,然后传到其他的服务器中。
打开认证,三台机器都要执行
#开启认证auth = true#安全文件地址keyfile = /usr/local/mongodb/data/mongodb.key之后重启mongo
# ./bin/mongo 192.168.56.102:27018rs.status(){ "operationTime" : Timestamp(1595212820,"errmsg" : "command replSetGetStatus requires authentication","code" : 13,"codename" : "Unauthorized","$clusterTime" : { "clusterTime" : Timestamp(1595212820,"7N/yM+2RounFZVTIzjbW+rEcZNs="),"keyID" : NumberLong("6851374857561571330") } }}不带账号密码登录,提示Unauthorized
# ./bin/mongo 192.168.56.102:27018 -u "handle" -p "123456" --authenticationDatabase "admin"rs.status(){ "set" : "mongos","date" : ISODate("2020-07-20T02:44:20.836Z"),"term" : NumberLong(3),"optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1595213060,"t" : NumberLong(3) },"lastCommitteDWallTime" : ISODate("2020-07-20T02:44:20.154Z"),"readConcernMajorityOpTime" : { "ts" : Timestamp(1595213060,"readConcernMajorityWallTime" : ISODate("2020-07-20T02:44:20.154Z"),"applIEdOpTime" : { "ts" : Timestamp(1595213060,"durableOpTime" : { "ts" : Timestamp(1595213060,"lastApplIEDWallTime" : ISODate("2020-07-20T02:44:20.154Z"),"lastDurableWallTime" : ISODate("2020-07-20T02:44:20.154Z") },"lastStableRecoveryTimestamp" : Timestamp(1595213010,"lastStableCheckpointTimestamp" : Timestamp(1595213010,"lastElectionDate" : ISODate("2020-07-20T01:56:39.170Z"),"termAtElection" : NumberLong(3),"lastSeenopTimeatElection" : { "ts" : Timestamp(1595210160,"t" : NumberLong(2) },"numCatchUpOps" : NumberLong(808464432),"newTermStartDate" : ISODate("2020-07-20T01:56:39.976Z"),"wMajorityWriteAvailabilityDate" : ISODate("2020-07-20T01:56:40.667Z") },"uptime" : 2871,"optime" : { "ts" : Timestamp(1595213050,"t" : NumberLong(3) },"optimeDurable" : { "ts" : Timestamp(1595213050,"optimeDate" : ISODate("2020-07-20T02:44:10Z"),"optimeDurableDate" : ISODate("2020-07-20T02:44:10Z"),"lastHeartbeat" : ISODate("2020-07-20T02:44:19.053Z"),"lastHeartbeatRecv" : ISODate("2020-07-20T02:44:20.779Z"),"syncingTo" : "192.168.56.102:27018","syncSourceHost" : "192.168.56.102:27018","syncSourceID" : 1,"uptime" : 2873,"optime" : { "ts" : Timestamp(1595213060,"optimeDate" : ISODate("2020-07-20T02:44:20Z"),"electionTime" : Timestamp(1595210199,"electionDate" : ISODate("2020-07-20T01:56:39Z"),"uptime" : 2831,"lastHeartbeat" : ISODate("2020-07-20T02:44:19.069Z"),"lastHeartbeatRecv" : ISODate("2020-07-20T02:44:19.689Z"),"$clusterTime" : { "clusterTime" : Timestamp(1595213060,"vWZEW8RyQOU7IwSaLMmrEancUio="),"keyID" : NumberLong("6851374857561571330") } },"operationTime" : Timestamp(1595213060,1)}账号密码设置成功了
备份数据备份(mongodump)与恢复(mongorestore)
备份数据到本地mongodump -h 192.168.56.101:27018 -u handle -p 123456 -o /home/liz/Desktop/mongo-bei
新的集群安装完成之后,恢复数据到Primary节点,集群会自动同步到副本集中
mongorestore -h 192.168.56.101:27018 -u handle -p 123456 /home/liz/Desktop/mongo-bei注意:更换自己服务器上面的ip和mongo对应的账号密码
总结以上是内存溢出为你收集整理的搭建mongo的replica set全部内容,希望文章能够帮你解决搭建mongo的replica set所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)