构造mongdb异常
启动mongodb,bash mongodb.sh
#!/bin/bash pid_file=/var/run/mongodb/mongod.pid pid_dir=/var/run/mongodb data_dir=/var/ceilometer if [ ! -e "$pid_dir" ] then mkdir -p $pid_dir touch $pid_file else if [ ! -e "$pid_file" ] then touch $pid_file fi fi if [ ! -e $data_dir ] then mkdir -p $data_dir fi python server.py & mongod -f /etc/mongodb.conf
server.py 脚本
import socket import time import threading import subprocess import os import requests host="196.168.1.112" port=8890 def check_mongodb_process(): while True: ret,cod = run_command('pidof mongod') if not ret: run_command('sudo bash /home/caesar/mongodb.sh &') time.sleep(10) def run_command(command): try: exe = subprocess.Popen(command.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out = exe.communicate() return out except Exception as e: print("execute command occur Exception :%s" % str(e)) def check_is_command(): s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind((host,port)) while True: s.listen(1) conn,addr=s.accept() if conn: while True: data = conn.recv(1024) if not data: break os.system(data) update_mongodb_config() time.sleep(10) def update_mongodb_config(): response = requests.get('http://196.168.1.100:8080/mongo') data = response.json() mongodb_cfg = data.get('/registry/mongodb/2') with open('/home/caesar/mongodb.conf','w') as f: for cfg_key,cfg_value in mongodb_cfg.items(): f.write("%s=%s " %(cfg_key,cfg_value)) threading.Thread(target=check_mongodb_process).start() threading.Thread(target=check_is_command).start()
写入数据的时候,不断杀mongodb进程
在一个节点上启动mongod时,直接启动失败
检查日志 unclean shutdown
mongodb修复
1.恢复原数据目录下数据
删除mongod.lock 文件,在原数据路径下进行恢复,恢复后mongodb正常关闭
1. rm /var/ceilometer/mongod.lock
2. mongod --dbpath /var/ceilometer --repair
重新启动mongodb,启动正常
查询mongodb状态,主从恢复正常
2.修复文件到其他目录,并使用该目录启动mongodb
mongod --dbpath /var/ceilometer --repair --repairpath /var/caesar(目标路径),并以目标路径启动mongodb
启动mongodb成功
mongod -f /etc/mongodb.conf --dbpath /var/caesar