标签:mongodb集群
一、环境
系统 CentOS 7.0 最小化安装
mongos1 172.16.1.41 mongos1 30000
mongos2 172.16.1.42 mongos2 30000
mongod1 172.16.1.43 shard11 27017,shard21 27018,shard31 27019,config 20000
mongod2 172.16.1.44 shard12 27017,shard22 27018,shard32 27019,config 20000
mongod3 172.16.1.45 shard13 27017,shard23 27018,shard33 27019,config 20000
二、基础环境配置
#以mongos1为例 [root@mongos1 ~]# yum install vim wget tree ntp net-tools lsof gcc -y [root@mongos1 ~]# ntpdate time.windows.com [root@mongos2 ~]# hwclock -w
三、安装mongodb
3台机器的mongodb的安装过程是一样的,以mongod01为例
#下载mongodb [root@mongod01 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.6.tgz [root@mongod01 ~]# tar xf mongodb-linux-x86_64-rhel70-3.2.6.tgz -C /usr/local/ [root@mongod01 ~]# ln -sv /usr/local/mongodb-linux-x86_64-rhel70-3.2.6 /usr/local/mongodb ‘/usr/local/mongodb’ -> ‘/usr/local/mongodb-linux-x86_64-rhel70-3.2.6’ #配置环境变量 [root@mongod01 ~]# cat /etc/profile.d/mongodb.sh #set for mongodb export MONGODB_HOME=/usr/local/mongodb export PATH=$MONGODB_HOME/bin:$PATH [root@mongod01 ~]# source /etc/profile.d/mongodb.sh [root@mongod01 ~]# mongod --version db version v3.2.6 git version: 05552b562c7a0b3143a729aaa0838e558dc49b25 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 allocator: tcmalloc modules: none build environment: distmod: rhel70 distarch: x86_64 target_arch: x86_64 #创建shard11.conf文件 [root@mongod01 ~]# cat /usr/local/mongodb/shard11.conf dbpath=/mongodb/data/shard11 logpath=/mongodb/log/shard11.log pidfilepath=/mongodb/pid/shard11.pid directoryperdb=true logappend=true replSet=shard1 port=27017 fork=true shardsvr=true journal=true #创建shard21.conf文件 [root@mongod01 ~]# cat /usr/local/mongodb/shard21.conf dbpath=/mongodb/data/shard21 logpath=/mongodb/log/shard21.log pidfilepath=/mongodb/pid/shard21.pid directoryperdb=true logappend=true replSet=shard2 port=27018 fork=true shardsvr=true journal=true #创建shard31.conf文件 [root@mongod01 ~]# cat /usr/local/mongodb/shard31.conf dbpath=/mongodb/data/shard31 logpath=/mongodb/log/shard31.log pidfilepath=/mongodb/pid/shard31.pid directoryperdb=true logappend=true replSet=shard3 port=27019 fork=true shardsvr=true journal=true #创建相关目录 [root@mongod01 ~]# mkdir -p /mongodb/{data,log,pid} [root@mongod01 ~]# mkdir -p /mongodb/data/{shard11,shard21,shard31} [root@mongod01 ~]# ll /mongodb/ total 0 drwxr-xr-x 2 root root 6 May 8 16:20 data drwxr-xr-x 2 root root 6 May 8 16:20 log drwxr-xr-x 2 root root 6 May 8 16:20 pid [root@mongod01 ~]# ll /mongodb/data/ total 0 drwxr-xr-x 2 root root 6 May 8 16:28 shard11 drwxr-xr-x 2 root root 6 May 8 16:29 shard21 drwxr-xr-x 2 root root 6 May 8 16:29 shard31 #编写shard11启动脚本 [root@mongod01 ~]# cat /etc/init.d/mongo27017 #!/bin/bash # #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard11.conf } stop() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard11.conf --shutdown echo "mongodb is stoped" } case "$1" in start) start;; stop) stop;; restart) stop start;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac [root@mongod01 ~]# chmod +x /etc/init.d/mongo27017 #启动shard11实例,即27017端口 [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep [root@mongod01 ~]# /etc/init.d/mongo27017 start about to fork child process, waiting until server is ready for connections. forked process: 11860 child process started successfully, parent exiting [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11860/mongod #编写shard21启动脚本 [root@mongod01~]# cat /etc/init.d/mongo27018 #!/bin/bash # #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard21.conf } stop() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard21.conf --shutdown echo "mongodb is stoped" } case "$1" in start) start;; stop) stop;; restart) stop start;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac #启动shard21实例,即27018端口 [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11860/mongod [root@mongod01 ~]# /etc/init.d/mongo27018 start about to fork child process, waiting until server is ready for connections. forked process: 11932 child process started successfully, parent exiting [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11860/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11932/mongod #编写shard31启动脚本 [root@mongod01 ~]# cat /etc/init.d/mongo27019 #!/bin/bash # #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard31.conf } stop() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/shard31.conf --shutdown echo "mongodb is stoped" } case "$1" in start) start;; stop) stop;; restart) stop start;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac #启动shard31实例,即27019端口 [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11860/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11932/mongod [root@mongod01 ~]# /etc/init.d/mongo27019 start about to fork child process, waiting until server is ready for connections. forked process: 11967 child process started successfully, parent exiting [root@mongod01 ~]# netstat -tunlp |grep mongo |grep -v grep tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11860/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11932/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11967/mongod #检查mongod02的状态 [root@mongod2 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11427/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11451/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11475/mongod #检查mongod03的状态 [root@mongod3 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11425/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11449/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11473/mongod
开始在mongod01,mongod02,mongod03这三台上安装config节点,即20000端口服务,以mongod01为例
#创建config.conf配置文件 [root@mongod1 ~]# cat /usr/local/mongodb/config.conf dbpath=/mongodb/config/ logpath=/mongodb/log/config1.log pidfilepath=/mongodb/pid/config1.pid directoryperdb=true logappend=true port=20000 fork=true configsvr=true journal=true #创建相应的目录 [root@mongod1 ~]# mkdir /mongodb/config #创建启动脚本 [root@mongod1 ~]# cat /etc/init.d/mongo-config20000 #!/bin/bash # #chkconfig: 2345 80 90 #description: mongodb start() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/config.conf } stop() { /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/config.conf --shutdown echo "mongodb is stoped" } case "$1" in start) start;; stop) stop;; restart) stop start;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac #启动config [root@mongod1 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11463/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11488/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11512/mongod [root@mongod1 ~]# /etc/init.d/mongo-config20000 start about to fork child process, waiting until server is ready for connections. forked process: 11592 child process started successfully, parent exiting [root@mongod1 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11463/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11488/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11512/mongod tcp 0 0 0.0.0.0:20000 0.0.0.0:* LISTEN 11592/mongod #查看mongod02的结果 [root@mongod2 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11427/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11451/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11475/mongod tcp 0 0 0.0.0.0:20000 0.0.0.0:* LISTEN 11534/mongod #查看mongod03的状态 [root@mongod3 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 11425/mongod tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 11449/mongod tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 11473/mongod tcp 0 0 0.0.0.0:20000 0.0.0.0:* LISTEN 11509/mongod
四、配置集群
#配置shard1集群 #在mongod01,mongod02,mongod03上任意一台机器上连接到27017端口上 [root@mongod1 ~]# /usr/local/mongodb/bin/mongo --port 27017 > rs.initiate(config) #定义分片的配置 { "ok" : 0, "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 172.16.1.44:27027 failed with Connection refused", "code" : 74 } > config = {_id:‘shard1‘,members:[{_id:0,host:‘172.16.1.43:27017‘},{_id:1,host:‘172.16.1.44:27017‘},{_id:2,host:‘172.16.1.45:27017‘,arbiterOnly:true}]} { "_id" : "shard1", "members" : [ { "_id" : 0, "host" : "172.16.1.43:27017" }, { "_id" : 1, "host" : "172.16.1.44:27017" }, { "_id" : 2, "host" : "172.16.1.45:27017", "arbiterOnly" : true } ] } > rs.initiate(config) #初始化集群 #查看集群状态 shard1:PRIMARY> rs.status() { "set" : "shard1", "date" : ISODate("2016-05-08T09:22:19.928Z"), "myState" : 1, "term" : NumberLong(1), "heartbeatIntervalMillis" : NumberLong(2000), "members" : [ { "_id" : 0, "name" : "172.16.1.43:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", #主节点 "uptime" : 2101, "optime" : { "ts" : Timestamp(1462699275, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:21:15Z"), "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1462699274, 1), "electionDate" : ISODate("2016-05-08T09:21:14Z"), "configVersion" : 1, "self" : true }, { "_id" : 1, "name" : "172.16.1.44:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", #从节点 "uptime" : 75, "optime" : { "ts" : Timestamp(1462699275, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:21:15Z"), "lastHeartbeat" : ISODate("2016-05-08T09:22:18.375Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:22:19.017Z"), "pingMs" : NumberLong(1), "syncingTo" : "172.16.1.43:27017", "configVersion" : 1 }, { "_id" : 2, "name" : "172.16.1.45:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", #仲裁节点 "uptime" : 75, "lastHeartbeat" : ISODate("2016-05-08T09:22:18.373Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:22:19.871Z"), "pingMs" : NumberLong(1), "configVersion" : 1 } ], "ok" : 1 } #配置shard2集群 [root@mongod1 ~]# /usr/local/mongodb/bin/mongo --port 27018 > config = {_id:‘shard2‘,members:[{_id:0,host:‘172.16.1.43:27018‘,arbiterOnly:true},{_id:1,host:‘172.16.1.44:27018‘},{_id:2,host:‘172.16.1.45:27018‘}]} { "_id" : "shard2", "members" : [ { "_id" : 0, "host" : "172.16.1.43:27018", "arbiterOnly" : true }, { "_id" : 1, "host" : "172.16.1.44:27018" }, { "_id" : 2, "host" : "172.16.1.45:27018" } ] } > rs.initiate(config) { "ok" : 1 } #查看集群状态 shard2:PRIMARY> rs.status() { "set" : "shard2", "date" : ISODate("2016-05-08T09:52:42.938Z"), "myState" : 1, "term" : NumberLong(1), "heartbeatIntervalMillis" : NumberLong(2000), "members" : [ { "_id" : 0, "name" : "172.16.1.43:27018", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 82, "lastHeartbeat" : ISODate("2016-05-08T09:52:41.376Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:52:42.356Z"), "pingMs" : NumberLong(1), "configVersion" : 1 }, { "_id" : 1, "name" : "172.16.1.44:27018", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 3353, "optime" : { "ts" : Timestamp(1462701091, 2), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:51:31Z"), "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1462701091, 1), "electionDate" : ISODate("2016-05-08T09:51:31Z"), "configVersion" : 1, "self" : true }, { "_id" : 2, "name" : "172.16.1.45:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 82, "optime" : { "ts" : Timestamp(1462701091, 2), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:51:31Z"), "lastHeartbeat" : ISODate("2016-05-08T09:52:41.379Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:52:42.428Z"), "pingMs" : NumberLong(1), "syncingTo" : "172.16.1.44:27018", "configVersion" : 1 } ], "ok" : 1 } #配置shard3集群 [root@mongod1 ~]# /usr/local/mongodb/bin/mongo --port 27019 > config = {_id:‘shard3‘,members:[{_id:0,host:‘172.16.1.43:27019‘},{_id:1,host:‘172.16.1.44:27019‘,arbiterOnly:true},{_id:2,host:‘172.16.1.45:27019‘}]} { "_id" : "shard3", "members" : [ { "_id" : 0, "host" : "172.16.1.43:27019" }, { "_id" : 1, "host" : "172.16.1.44:27019", "arbiterOnly" : true }, { "_id" : 2, "host" : "172.16.1.45:27019" } ] } > rs.initiate(config) { "ok" : 1 } #查看集群状态 shard3:SECONDARY> rs.status() { "set" : "shard3", "date" : ISODate("2016-05-08T09:38:46.467Z"), "myState" : 1, "term" : NumberLong(1), "heartbeatIntervalMillis" : NumberLong(2000), "members" : [ { "_id" : 0, "name" : "172.16.1.43:27019", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 3081, "optime" : { "ts" : Timestamp(1462700322, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:38:42Z"), "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1462700321, 1), "electionDate" : ISODate("2016-05-08T09:38:41Z"), "configVersion" : 1, "self" : true }, { "_id" : 1, "name" : "172.16.1.44:27019", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 14, "lastHeartbeat" : ISODate("2016-05-08T09:38:45.952Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:38:43.718Z"), "pingMs" : NumberLong(2), "configVersion" : 1 }, { "_id" : 2, "name" : "172.16.1.45:27019", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 14, "optime" : { "ts" : Timestamp(1462700322, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2016-05-08T09:38:42Z"), "lastHeartbeat" : ISODate("2016-05-08T09:38:45.945Z"), "lastHeartbeatRecv" : ISODate("2016-05-08T09:38:44.720Z"), "pingMs" : NumberLong(2), "syncingTo" : "172.16.1.43:27019", "configVersion" : 1 } ], "ok" : 1 }
五、安装mongos1,mongos2的mongodb服务
#以mongos1为例 [root@mongod01 ~]# tar xf mongodb-linux-x86_64-rhel70-3.2.6.tgz -C /usr/local/ [root@mongod01 ~]# ln -sv /usr/local/mongodb-linux-x86_64-rhel70-3.2.6 /usr/local/mongodb ‘/usr/local/mongodb’ -> ‘/usr/local/mongodb-linux-x86_64-rhel70-3.2.6’ #创建目录 [root@mongos1 ~]# mkdir -p /mongodb/log #启动实例 [root@mongos1 ~]# /usr/local/mongodb/bin/mongos -configdb 172.16.1.43:20000,172.16.1.44:20000,172.16.1.45:20000 --port 30000 -chunkSize 5 -logpath /mongodb/log/mongos.log -logappend -fork about to fork child process, waiting until server is ready for connections. forked process: 12083 child process started successfully, parent exiting [root@mongos1 ~]# netstat -tunlp |grep 30000 tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 12083/mongos #查看mongos2的状态 [root@mongos2 ~]# netstat -tunlp |grep mongo tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 11492/mongos #为mongos节点添加shard,以mongos1为例 [root@mongos1 ~]# /usr/local/mongodb/bin/mongo 127.0.0.1:30000/admin mongos> db.runCommand({addshard:"shard1/172.16.1.43:27017,172.16.1.44:27017,172.16.1.45:27017",name:"s1",maxsize:204800}); { "shardAdded" : "s1", "ok" : 1 } mongos> db.runCommand({addshard:"shard2/172.16.1.43:27018,172.16.1.44:27018,172.16.1.45:27018",name:"s2",maxsize:204800}); { "shardAdded" : "s2", "ok" : 1 } mongos> db.runCommand({addshard:"shard3/172.16.1.43:27019,172.16.1.44:27019,172.16.1.45:27019",name:"s3",maxsize:204800}); { "shardAdded" : "s3", "ok" : 1 } #查看结果 mongos> db.runCommand({listshards:1}) { "shards" : [ { "_id" : "s1", "host" : "shard1/172.16.1.43:27017,172.16.1.44:27017" }, { "_id" : "s2", "host" : "shard2/172.16.1.44:27018,172.16.1.45:27018" }, { "_id" : "s3", "host" : "shard3/172.16.1.43:27019,172.16.1.45:27019" } ], "ok" : 1 } mongos> db.runCommand({listshards:2}) { "shards" : [ { "_id" : "s1", "host" : "shard1/172.16.1.43:27017,172.16.1.44:27017" }, { "_id" : "s2", "host" : "shard2/172.16.1.44:27018,172.16.1.45:27018" }, { "_id" : "s3", "host" : "shard3/172.16.1.43:27019,172.16.1.45:27019" } ], "ok" : 1 } mongos> db.runCommand({listshards:3}) { "shards" : [ { "_id" : "s1", "host" : "shard1/172.16.1.43:27017,172.16.1.44:27017" }, { "_id" : "s2", "host" : "shard2/172.16.1.44:27018,172.16.1.45:27018" }, { "_id" : "s3", "host" : "shard3/172.16.1.43:27019,172.16.1.45:27019" } ], "ok" : 1 }
本文出自 “ly36843运维” 博客,请务必保留此出处http://ly36843.blog.51cto.com/3120113/1771195
标签:mongodb集群
原文地址:http://ly36843.blog.51cto.com/3120113/1771195