shell脚本模板 -- MongoDB设置单机多实例

指定新实例的后缀名和端口号,自动化配置并创建新的实例。

#!/bin/bash

# Setup Another Mongodb Instance
#  -- all you need to do is defining two vars below
#
# suffix : distinguish from standart mongodb instance
#          e.g standard mongodb instance conf-file : /etc/mongod.conf
#              this new created instance conf-file : /etc/mongod-new.conf : which will add suffix 'new'
# mongodb-port : distinguish from the standard port 27017
#
suffix=new
mongodb_port=27000

####### START
log=/tmp/setup_multiple_mongodb_instance_$(date +%F).log
echo "------- HEAD: start setup multiple mongodb instance at $(date +'%F %T')" > $log

##### Confirm Environment (think twice if u want to change this)
echo "" >> $log
echo "----- Confirm Environment" >> $log
run_dir=/var/run/mongodb-$suffix
log_dir=/var/log/mongodb-$suffix
data_dir=/var/lib/mongo-$suffix
conf_file=/etc/mongod-$suffix.conf
mongodb_service=/etc/systemd/system/mongod-$suffix.service
mongodb_user=mongod
mongodb_group=mongod
echo "- runtime dir   of new instance is : $run_dir"   >> $log
echo "- log     dir   of new instance is : $log_dir"   >> $log
echo "- data    dir   of new instance is : $data_dir"  >> $log
echo "- conf    file  of new instance is : $conf_file" >> $log
echo "- service name  of new instance is : $mongodb_service" >> $log
echo "- default user  of new instance is : $mongodb_user"    >> $log
echo "- default group of new instance is : $mongodb_group"   >> $log

##### Create Directory and Setup SELinux
echo "" >> $log
echo "----- Create Directory and Setup SELinux" >> $log
declare -A selinux_t
selinux_t[$run_dir]=mongod_var_run_t
selinux_t[$log_dir]=mongod_log_t
selinux_t[$data_dir]=mongod_var_lib_t
for dir in $run_dir $log_dir $data_dir
do
  if [ ! -d $dir ]
  then
    mkdir -p $dir
  fi
  chown -R $mongodb_user.$mongodb_group $dir >> $log
  semanage fcontext -a -t  ${selinux_t[$dir]} "$dir.*" &>> $log
  chcon -Rv -u system_u -t ${selinux_t[$dir]} "$dir"   >> $log
  restorecon -R -v "$dir" >> $log
done

##### SELinux the Custom Port
echo "" >> $log
echo "----- SELinux the Custom Port" >> $log
semanage port -l | grep mongod_port_t | grep $mongodb_port >> $log
if [ $? == 1  ]
then
  semanage port -a -t mongod_port_t -p tcp $mongodb_port >> $log
  semanage port -l | grep mongod_port_t >> $log
fi

##### Custom Config File
echo "" >> $log
echo "----- Custom Config file" >> $log
echo "- custom mongodb config file locate: $conf_file" >> $log
cat > $conf_file << EOF
systemLog:
  destination: file
  logAppend: true
  path: $log_dir/mongod.log

storage:
  dbPath: $data_dir
  journal:
    enabled: true

processManagement:
  fork: true  # fork and run in background
  pidFilePath: $run_dir/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: $mongodb_port
  bindIp: 127.0.0.1
EOF

##### Custom Systemd Service
echo "" >> $log
echo "----- Custom Systemd Service" >> $log
cat > $mongodb_service << EOF
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target

[Service]
User=$mongodb_user
Group=$mongodb_group
Environment="OPTIONS=-f $conf_file"
ExecStart=/usr/bin/mongod \$OPTIONS
ExecStartPre=/usr/bin/mkdir -p $run_dir
ExecStartPre=/usr/bin/chown $mongodb_user:$mongodb_group $run_dir
ExecStartPre=/usr/bin/chmod 0755 $run_dir
PermissionsStartOnly=true
PIDFile=$run_dir/mongod.pid
Type=forking
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000
LimitMEMLOCK=infinity
TasksMax=infinity
TasksAccounting=false

[Install]
WantedBy=multi-user.target
EOF
echo "- custom mongodb service file locate: $mongodb_service" >> $log
systemctl daemon-reload >> $log

####### FINISH
echo "" >> $log
echo "------- TAIL: finish setup multiple mongodb instance at $(date +'%F %T')" >> $log

# User Prompt
echo "Setup work seems done!"
echo "Now you can either check the setup log file \"$log\" to see if had something wrong."
echo "Or just start the service directly with command : \"systemctl start mongod-$suffix.service\" "
echo "Then log into mongodb with command : \"mongo --port $mongodb_port\" "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值