#! /bin/bash
#此脚本为单机伪副本集群,用于测试mongodb 4.0以上,是否支持事务。
#mongodb下载网站 https://www.mongodb.com/download-center/community
######################################################################
# 节点名 节点用途 节点IP 节点端口 集群名
# mongo1 主节点(PRIMARY) . 9927 myrs
# mongo2 从节点(SECONDARY) . 9928 myrs
# mongo3 仲裁节点(ARBITER) . 9929 myrs
#外网ip
ip=$(/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
#mongodb三个节点的主目录
mongodbMainUrl=/usr/local/mongodbCluster
#各节点配置文件所在目录
array_configURL=('/mgrs/node1' '/mgrs/node2' '/mgrs/node3')
#各节点服务开放端口
array_port=('9927' '9928' '9929')
#各节点源码包位置
array_mongodb_source=( $mongodbMainUrl'/mongodbNodeOne' $mongodbMainUrl'/mongodbNodeTwo' $mongodbMainUrl'/mongodbNodeThree')
copyMongodb(){cp -a mongodb-linux-x86_64-4.0.9 $mongodbMainUrlmv $mongodbMainUrl/mongodb-linux-x86_64-4.0.9 $mongodbMainUrl/mongodbNodeOnecp -a mongodb-linux-x86_64-4.0.9 $mongodbMainUrlmv $mongodbMainUrl/mongodb-linux-x86_64-4.0.9 $mongodbMainUrl/mongodbNodeTwocp -a mongodb-linux-x86_64-4.0.9 $mongodbMainUrlmv $mongodbMainUrl/mongodb-linux-x86_64-4.0.9 $mongodbMainUrl/mongodbNodeThree
}
mkNodedir(){mkdir -p /mgrs/node1/datamkdir -p /mgrs/node1/logsmkdir -p /mgrs/node1/confmkdir -p /mgrs/node2/datamkdir -p /mgrs/node2/logsmkdir -p /mgrs/node2/confmkdir -p /mgrs/node3/datamkdir -p /mgrs/node3/logsmkdir -p /mgrs/node3/conf
}
writeConfig(){cp ./mongod.conf $1/conf/mongodConfig=$1/conf/mongod.confsed -i "s#nodeName#$1#g" $mongodConfigsed -i "s#9927#$2#g" $mongodConfig
}################# 真正的开始############################
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz
tar -zxvf mongodb-linux-x86_64-4.0.9.tgz
if [ ! -d $mongodbMainUrl ]thenmkdir -p $mongodbMainUrl
fi
#将mongodb源码发放到不同的文件夹:mongodbNodeOne、mongodbNodeTwo、mongodbNodeThree
copyMongodb
if [ ! -d /mgrs ]thenmkdir -p /mgrs
fi#创建每个节点所需要的文件夹
mkNodedir
#将配置文件写入到不同
for (( i=0;i<${#array_configURL[@]};i++ ))
dowriteConfig ${array_configURL[i]} ${array_port[i]}
done#生成加入集群keyfile
openssl rand -base64 756 > ${array_configURL[0]}/conf/access.key
chmod 400 ${array_configURL[0]}/conf/access.key
cp ${array_configURL[0]}/conf/access.key ${array_configURL[1]}/conf/access.key
cp ${array_configURL[0]}/conf/access.key ${array_configURL[2]}/conf/access.key#三节点均执行 启动mongodb服务
for(( i=0;i<${#array_mongodb_source[@]};i++ ))
doecho ${array_mongodb_source[i]}echo ${array_configURL[i]}${array_mongodb_source[i]}/bin/mongod -f ${array_configURL[i]}/conf/mongod.conf
done
#进入主节点控制台
#${array_mongodb_source[0]}/bin/mongo 127.0.0.1:${array_port[0]}
#生成集群配置变量
#cfg = {_id: 'myrs', members: []}
#cfg.members.push({_id: 1, host: $ip':'${array_port[0]}}) #变量中加入节点1
#cfg.members.push({_id: 2, host: $ip':'${array_port[1]}}) #变量中加入节点1
#cfg.members.push({_id: 3, host: $ip':'${array_port[2]}, arbiterOnly: true}) #变量中加入节点3(仲裁节点)
#rs.initiate(cfg) #根据变量配置集群
#rs.isMaster() #查看集群是否配置成功
#rs.status()
#使用内置的admin库
#use admin
#db.createUser({user:"root",pwd:"root",roles:[{role:"readWriteAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]})
#db.createUser({user:"suroot",pwd:"suroot",roles:[{role:"clusterAdmin",db:"admin"},{role:"clusterManager",db:"admin"},{role:"clusterMonitor",db:"admin"}]})