zoukankan      html  css  js  c++  java
  • 搭建mongo的replica set

    搭建mongo的replica set

    前言

    准备三台机器,相互可以访问的。处理思路,先构建无需认证的集群,然后进入主节点,初始化集群的账号密码。然后开启所有机器的认证。

    安装

    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 = 27018
    bind_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, 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, 2),
    			"t" : NumberLong(1)
    		},
    		"readConcernMajorityWallTime" : ISODate("2020-07-19T14:49:48.999Z"),
    		"appliedOpTime" : {
    			"ts" : Timestamp(1595170188, 2),
    			"t" : NumberLong(1)
    		},
    		"durableOpTime" : {
    			"ts" : Timestamp(1595170188, 2),
    			"t" : NumberLong(1)
    		},
    		"lastAppliedWallTime" : ISODate("2020-07-19T14:49:48.999Z"),
    		"lastDurableWallTime" : ISODate("2020-07-19T14:49:48.999Z")
    	},
    	"lastStableRecoveryTimestamp" : Timestamp(1595170187, 3),
    	"lastStableCheckpointTimestamp" : Timestamp(1595170187, 3),
    	"electionCandidateMetrics" : {
    		"lastElectionReason" : "electionTimeout",
    		"lastElectionDate" : ISODate("2020-07-19T14:49:47.525Z"),
    		"termAtElection" : NumberLong(1),
    		"lastCommittedOpTimeAtElection" : {
    			"ts" : Timestamp(0, 0),
    			"t" : NumberLong(-1)
    		},
    		"lastSeenOpTimeAtElection" : {
    			"ts" : Timestamp(1595170176, 1),
    			"t" : NumberLong(-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, 2),
    				"t" : NumberLong(1)
    			},
    			"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
    			"syncingTo" : "",
    			"syncSourceHost" : "",
    			"syncSourceId" : -1,
    			"infoMessage" : "could not find member to sync from",
    			"electionTime" : Timestamp(1595170187, 1),
    			"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",
    			"health" : 1,
    			"state" : 2,
    			"stateStr" : "SECONDARY",
    			"uptime" : 15,
    			"optime" : {
    				"ts" : Timestamp(1595170188, 2),
    				"t" : NumberLong(1)
    			},
    			"optimeDurable" : {
    				"ts" : Timestamp(1595170188, 2),
    				"t" : NumberLong(1)
    			},
    			"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
    			"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",
    			"health" : 1,
    			"state" : 2,
    			"stateStr" : "SECONDARY",
    			"uptime" : 15,
    			"optime" : {
    				"ts" : Timestamp(1595170188, 2),
    				"t" : NumberLong(1)
    			},
    			"optimeDurable" : {
    				"ts" : Timestamp(1595170188, 2),
    				"t" : NumberLong(1)
    			},
    			"optimeDate" : ISODate("2020-07-19T14:49:48Z"),
    			"optimeDurableDate" : ISODate("2020-07-19T14:49:48Z"),
    			"lastHeartbeat" : ISODate("2020-07-19T14:49:51.555Z"),
    			"lastHeartbeatRecv" : ISODate("2020-07-19T14:49:50.830Z"),
    			"pingMs" : NumberLong(0),
    			"lastHeartbeatMessage" : "",
    			"syncingTo" : "192.168.56.101:27018",
    			"syncSourceHost" : "192.168.56.101:27018",
    			"syncSourceId" : 0,
    			"infoMessage" : "",
    			"configVersion" : 1
    		}
    	],
    	"ok" : 1,
    	"$clusterTime" : {
    		"clusterTime" : Timestamp(1595170188, 2),
    		"signature" : {
    			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
    			"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

    • MongoDB使用keyfile认证,副本集中的每个mongod实例使用keyfile内容作为认证其他成员的共享密码。mongod实例只有拥有正确的keyfile才可以加入副本集。
    • keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。
    • 有一点要注意是的:在UNIX系统中,keyFile必须没有组权限或完全权限(也就是权限要设置成X00的形式)。Windows系统中,keyFile权限没有被检查。
    • 可以使用任意方法生成keyFile。例如,如下操作使用openssl生成复杂的随机的1024个字符串。然后使用chmod修改文件权限,只给文件拥有者提供读权限。
    # 400权限是要保证安全性,否则mongod启动会报错
    openssl rand -base64 756 > mongodb.key
    chmod 400 mongodb.key
    

    然后放到mongodb中的data目录,三台机器keyfile要一致。我是在一台中生成,然后传到其他的服务器中。

    打开认证,三台机器都要执行

    #开启认证
    auth = true
    #安全文件地址
    keyFile = /usr/local/mongodb/data/mongodb.key
    

    之后重启mongo

    # ./bin/mongo 192.168.56.102:27018
    rs.status()
    {
    	"operationTime" : Timestamp(1595212820, 1),
    	"ok" : 0,
    	"errmsg" : "command replSetGetStatus requires authentication",
    	"code" : 13,
    	"codeName" : "Unauthorized",
    	"$clusterTime" : {
    		"clusterTime" : Timestamp(1595212820, 1),
    		"signature" : {
    			"hash" : BinData(0,"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"),
    	"myState" : 1,
    	"term" : NumberLong(3),
    	"syncingTo" : "",
    	"syncSourceHost" : "",
    	"syncSourceId" : -1,
    	"heartbeatIntervalMillis" : NumberLong(2000),
    	"majorityVoteCount" : 2,
    	"writeMajorityCount" : 2,
    	"optimes" : {
    		"lastCommittedOpTime" : {
    			"ts" : Timestamp(1595213060, 1),
    			"t" : NumberLong(3)
    		},
    		"lastCommittedWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
    		"readConcernMajorityOpTime" : {
    			"ts" : Timestamp(1595213060, 1),
    			"t" : NumberLong(3)
    		},
    		"readConcernMajorityWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
    		"appliedOpTime" : {
    			"ts" : Timestamp(1595213060, 1),
    			"t" : NumberLong(3)
    		},
    		"durableOpTime" : {
    			"ts" : Timestamp(1595213060, 1),
    			"t" : NumberLong(3)
    		},
    		"lastAppliedWallTime" : ISODate("2020-07-20T02:44:20.154Z"),
    		"lastDurableWallTime" : ISODate("2020-07-20T02:44:20.154Z")
    	},
    	"lastStableRecoveryTimestamp" : Timestamp(1595213010, 1),
    	"lastStableCheckpointTimestamp" : Timestamp(1595213010, 1),
    	"electionCandidateMetrics" : {
    		"lastElectionReason" : "electionTimeout",
    		"lastElectionDate" : ISODate("2020-07-20T01:56:39.170Z"),
    		"termAtElection" : NumberLong(3),
    		"lastCommittedOpTimeAtElection" : {
    			"ts" : Timestamp(0, 0),
    			"t" : NumberLong(-1)
    		},
    		"lastSeenOpTimeAtElection" : {
    			"ts" : Timestamp(1595210160, 1),
    			"t" : NumberLong(2)
    		},
    		"numVotesNeeded" : 2,
    		"priorityAtElection" : 1,
    		"electionTimeoutMillis" : NumberLong(10000),
    		"numCatchUpOps" : NumberLong(808464432),
    		"newTermStartDate" : ISODate("2020-07-20T01:56:39.976Z"),
    		"wMajorityWriteAvailabilityDate" : ISODate("2020-07-20T01:56:40.667Z")
    	},
    	"members" : [
    		{
    			"_id" : 0,
    			"name" : "192.168.56.101:27018",
    			"ip" : "192.168.56.101",
    			"health" : 1,
    			"state" : 2,
    			"stateStr" : "SECONDARY",
    			"uptime" : 2871,
    			"optime" : {
    				"ts" : Timestamp(1595213050, 1),
    				"t" : NumberLong(3)
    			},
    			"optimeDurable" : {
    				"ts" : Timestamp(1595213050, 1),
    				"t" : NumberLong(3)
    			},
    			"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"),
    			"pingMs" : NumberLong(1),
    			"lastHeartbeatMessage" : "",
    			"syncingTo" : "192.168.56.102:27018",
    			"syncSourceHost" : "192.168.56.102:27018",
    			"syncSourceId" : 1,
    			"infoMessage" : "",
    			"configVersion" : 1
    		},
    		{
    			"_id" : 1,
    			"name" : "192.168.56.102:27018",
    			"ip" : "192.168.56.102",
    			"health" : 1,
    			"state" : 1,
    			"stateStr" : "PRIMARY",
    			"uptime" : 2873,
    			"optime" : {
    				"ts" : Timestamp(1595213060, 1),
    				"t" : NumberLong(3)
    			},
    			"optimeDate" : ISODate("2020-07-20T02:44:20Z"),
    			"syncingTo" : "",
    			"syncSourceHost" : "",
    			"syncSourceId" : -1,
    			"infoMessage" : "",
    			"electionTime" : Timestamp(1595210199, 1),
    			"electionDate" : ISODate("2020-07-20T01:56:39Z"),
    			"configVersion" : 1,
    			"self" : true,
    			"lastHeartbeatMessage" : ""
    		},
    		{
    			"_id" : 2,
    			"name" : "192.168.56.103:27018",
    			"ip" : "192.168.56.103",
    			"health" : 1,
    			"state" : 2,
    			"stateStr" : "SECONDARY",
    			"uptime" : 2831,
    			"optime" : {
    				"ts" : Timestamp(1595213050, 1),
    				"t" : NumberLong(3)
    			},
    			"optimeDurable" : {
    				"ts" : Timestamp(1595213050, 1),
    				"t" : NumberLong(3)
    			},
    			"optimeDate" : ISODate("2020-07-20T02:44:10Z"),
    			"optimeDurableDate" : ISODate("2020-07-20T02:44:10Z"),
    			"lastHeartbeat" : ISODate("2020-07-20T02:44:19.069Z"),
    			"lastHeartbeatRecv" : ISODate("2020-07-20T02:44:19.689Z"),
    			"pingMs" : NumberLong(0),
    			"lastHeartbeatMessage" : "",
    			"syncingTo" : "192.168.56.101:27018",
    			"syncSourceHost" : "192.168.56.101:27018",
    			"syncSourceId" : 0,
    			"infoMessage" : "",
    			"configVersion" : 1
    		}
    	],
    	"ok" : 1,
    	"$clusterTime" : {
    		"clusterTime" : Timestamp(1595213060, 1),
    		"signature" : {
    			"hash" : BinData(0,"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对应的账号密码

  • 相关阅读:
    破解VNC密码
    word无法插入页码
    修改windows远程桌面端口号
    系统每次进入桌面报错“由于启动计算机时出现了页面文件配置问题”
    树梅派安装GMChess中国象棋
    Linux命令Top详解
    树梅派修改root密码及切换账户
    树梅派安装截图工具
    Linux有趣的应用,画只小猫陪伴你
    Windows 10访问XP系统共享文件报”因为文件共享不安全,所以你不能连接到文件共享。。。“
  • 原文地址:https://www.cnblogs.com/ricklz/p/13357944.html
Copyright © 2011-2022 走看看