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

    科技2022-07-12  144

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

    #!/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\" "
    Processed: 0.011, SQL: 8