主从架构(Master-Slave)、副本集架构(Replica Set)、数据分片架构(Sharding)linux
这里安装集群的方式为副本集架构(Replica Set)git
Primary:主节点,惟一 Secondary:从节点,同步主节点的数据,能够多个实例,可只读 Hidden:备份节点,不处理任何客户端驱动请求 Secondary-Only:只能为从节点,防止一些性能不高的节点成为主节点 Non-Voting:没有选举权的 secondary 节点,备份使用,虽然不清楚和隐藏节点的差异是什么 Arbiter:仲裁节点,不存数据,只参与仲裁,可选github
cd /root/mongodb yum install -y *
定义变量 NETWORK_ETH='eth0' ip=`ip address show dev ${NETWORK_ETH} | grep 'inet ' | awk -F ' ' '{print $2}' | cut -d / -f 1` #ip=`ifconfig eth1 | grep 'inet ' | awk -F ' ' '{print $2}' | cut -d : -f 2` confPath='/etc/mongod.conf' mongoDataPath='/data/mongodb/data' mongopath='/data/mongodb'
mkdir -p ${mongopath} mkdir -p ${mongoDataPath} # [path to mongdb data]
cat > ${confPath} <<EOF dbpath=${mongoDataPath} logpath=${mongopath}/mongo.log pidfilepath=${mongopath}/mongo.pid directoryperdb=true logappend=true replSet=tnebula bind_ip=${ip} port=27017 #auth=true oplogSize=100 fork=true noprealloc=true #maxConns=4000 EOF
mongod -f ${confPath}
其余两台副本节点(secondary)、仲裁节点(arbiter)也执行以上操做mongodb
mongo 172.20.10.5:27017 use admin #[根据现场修改IP] cfg={ _id:"tnebula",members:[{_id:0,host:'172.26.1.14:27017',priority:2},{_id:1,host:'172.26.1.15:27017',priority:1},{_id:2,host:'172.26.1.16:27017',arbiterOnly:true}] }; rs.initiate(cfg) #检测集群状态 rs.status();
mongo mongodb://172.26.1.14:27017,172.26.1.15:27017,172.26.1.16:27017/?replicaSet=tnebula
# mongodb导出、整库导出 去掉 -d mongodump -h 172.26.1.14:27017 -o -d test mongodb_bak20200319 # mongodb导入 mongorestore --host 172.26.1.14:27017 --port 27017 --username mongouser --password "password" --authenticationDatabase=admin --dir=./mongodb_bak20200319 --drop
一、关闭一直处于RECOVERING状态的mongodb server /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22001 use admin db.shutdownServer() 二、将原数据目录更名,新建数据目录,再启动mongodb实例 mv /opt/mongodb/shard1/data /opt/mongodb/shard1/data_bak mkdir /opt/mongodb/shard1/data /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /opt/mongodb/shard1/data --logpath /opt/mongodb/shard1/log/shard1.log --fork 三、查看恢复状态,为STARTUP2 /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:22001 use admin rs.status()
本人也编写了ansible-playbook一键部署mongodb集群,github:https://github.com/xiaowenxiao/deploy/tree/master/ansible-mongodb-cluster-deploy架构