当前位置 : 主页 > 网络编程 > PHP >

MongoDB3.0集群配置文件自动生成器

来源:互联网 收集:自由互联 发布时间:2021-07-03
项目Github地址: https://github.com/jockchou/mongodb-conf-generator 文件说明: -- cfg.conf.template -- mongod.conf.template -- mongos.conf.template cfg.conf.template : 集群配制服务器配制文件模板 mongod.conf.template:
项目Github地址:
https://github.com/jockchou/mongodb-conf-generator
文件说明:
    -- cfg.conf.template
    -- mongod.conf.template
    -- mongos.conf.template
cfg.conf.template : 集群配制服务器配制文件模板
mongod.conf.template: mongod进程配制文件模板
mongos.conf.template: mongos路由进程配制文件模板
generator.php : 自动生成配制文件的PHP脚本
脚本使用方法:
在你的Linux服务器上创建一个新目录,我这里创建的目录是/data/mongo
mkdir -p /data/mongo
复制本项目录下上述四个文件到/data/mongo目录中,执行php generator.php。执行前先确保机器上已经安装PHP。
 
<?php
   
define("BASEDIR", str_replace("\\\\", "/", dirname(__FILE__)));
  
//帮定IP
define("BIND_IP", "127.0.0.1,192.168.100.18");
  
//配置服务器IP,IP个数与配置服务器个数保持相同
define("CFG_IP", "192.168.100.10,192.168.100.11,192.168.100.12");
  
//mongodb bin目录
define("BINPATH", "/usr/local/mongodb/bin");
  
//超始端口号
define("START_PORT", 4000);
  
//配置服务器个数
define("CFG_SVR_NUM", 3);
  
//分片个数
define("RS_NUM", 3);
  
//复制集节点数
define("RS_NODE_NUM", 3);
  
$cfgdb_port_group = array();
  
//创建配置服务器目录
function create_cfg_path() {
    echo "\\n";
      
    for($i = 0; $i < CFG_SVR_NUM; $i++) {
        $cnf_dir = "./cfg/node$i/cnf";
        $dat_dir = "./cfg/node$i/data";
        $log_dir = "./cfg/node$i/log";
          
        if (!file_exists($cnf_dir)) mkdir($cnf_dir, 0755, true);
        if (!file_exists($dat_dir)) mkdir($dat_dir, 0755, true);
        if (!file_exists($log_dir)) mkdir($log_dir, 0755, true);
          
        write_cfg_cnf($cnf_dir, $i);
    }
      
    echo "\\n";
}
  
//创建复制集目录
function create_rs_path() {
    for($i = 0; $i < RS_NUM; $i++) {
        for($j = 0; $j < RS_NODE_NUM; $j++) {
          
            $cnf_dir = "./rs$i/node$j/cnf";
            $dat_dir = "./rs$i/node$j/data";
            $log_dir = "./rs$i/node$j/log";
              
            if (!file_exists($cnf_dir)) mkdir($cnf_dir, 0755, true);
            if (!file_exists($dat_dir)) mkdir($dat_dir, 0755, true);
            if (!file_exists($log_dir)) mkdir($log_dir, 0755, true);
              
              
            write_rs_cnf($cnf_dir, $i, $j);
        }
          
        echo "\\n";
    }
}
  
//创建路由服务器目录
function create_mongos_path() {
      
    $cnf_dir = "./mongos/cnf";
    $log_dir = "./mongos/log";
      
    if (!file_exists($cnf_dir)) mkdir($cnf_dir, 0755, true);
    if (!file_exists($log_dir)) mkdir($log_dir, 0755, true);
      
    write_mongos_cnf($cnf_dir);
      
    echo "\\n";
}
  
//生成复制集配置文件
function write_rs_cnf($cnf_dir, $rs, $node) {
  
    $port = START_PORT + CFG_SVR_NUM + RS_NODE_NUM * $rs + $node;
    $rsName = "rs" . $rs;
    $nodeName = "node" . $node;
      
    $rs_tpl_file = "./mongod.conf.template";
    $handle = fopen($rs_tpl_file, "r");
    $contents = fread($handle, filesize($rs_tpl_file));
    $contents = str_replace("#basedir#", BASEDIR, $contents);
    $contents = str_replace("#rs#", $rsName, $contents);
    $contents = str_replace("#node#", $nodeName, $contents);
    $contents = str_replace("#port#", $port, $contents);
    $contents = str_replace("#bindIp#", BIND_IP, $contents);
      
    $fp = fopen($cnf_dir . "/mongod.conf", 'w,ccs=UTF-8');
    fwrite($fp, $contents);
      
    fclose($fp);
    fclose($handle);
      
    $shell = BINPATH . "/mongod --fork --config " . BASEDIR ."/$rsName/$nodeName/cnf/mongod.conf &";
    $sh_file = BASEDIR . "/$rsName/$nodeName/mongostart.sh";
    $shfp = fopen($sh_file, 'w,ccs=UTF-8');
    fwrite($shfp, "#!/bin/bash\\n\\n");
    fwrite($shfp, $shell);
    fclose($shfp);
      
    echo "$rsName->$nodeName->$port\\n";
      
}
  
//生成配置服务器配置文件
function write_cfg_cnf($cnf_dir, $node) {
    global $cfgdb_port_group;
      
    $port = START_PORT + $node;
    $nodeName = "node" . $node;
      
    $cfg_tpl_file = "./cfg.conf.template";
    $handle = fopen($cfg_tpl_file, "r");
    $contents = fread($handle, filesize($cfg_tpl_file));
    $contents = str_replace("#basedir#", BASEDIR, $contents);
    $contents = str_replace("#node#", $nodeName, $contents);
    $contents = str_replace("#port#", $port, $contents);
    $contents = str_replace("#bindIp#", BIND_IP, $contents);
      
    array_push($cfgdb_port_group, $port);
    $fp = fopen($cnf_dir . "/cfg.conf", 'w,ccs=UTF-8');
    fwrite($fp, $contents);
      
    fclose($fp);
    fclose($handle);
      
    $shell = BINPATH . "/mongod --fork --config " . BASEDIR ."/cfg/{$nodeName}/cnf/cfg.conf &";
    $sh_file = BASEDIR . "/cfg/{$nodeName}/mongostart.sh";
    $shfp = fopen($sh_file, 'w,ccs=UTF-8');
    fwrite($shfp, "#!/bin/bash\\n\\n");
    fwrite($shfp, $shell);
    fclose($shfp);
      
    echo "cfg->$nodeName->$port\\n";
}
  
//生成路由服务器配置文件
function write_mongos_cnf($cnf_dir) {
    global $cfgdb_port_group;
  
    $port = START_PORT + CFG_SVR_NUM + (RS_NUM * RS_NODE_NUM);
      
    $mongos_tpl_file = "./mongos.conf.template";
    $handle = fopen($mongos_tpl_file, "r");
    $contents = fread($handle, filesize($mongos_tpl_file));
    $contents = str_replace("#basedir#", BASEDIR, $contents);
    $contents = str_replace("#port#", $port, $contents);
    $contents = str_replace("#bindIp#", BIND_IP, $contents);
      
    $cfg_ip_group = explode(",", CFG_IP);
    $cfgdb_port_str = array();
    foreach($cfgdb_port_group as $n => $cfg_port) {
        if ($n < count($cfg_ip_group))
        array_push($cfgdb_port_str, $cfg_ip_group[$n] . ":" . $cfg_port);
    }
    $contents = str_replace("#configDB#", implode(",", $cfgdb_port_str), $contents);
       
    $fp = fopen($cnf_dir . "/mongos.conf", 'w,ccs=UTF-8');
    fwrite($fp, $contents);
      
    fclose($fp);
    fclose($handle);
      
    $shell = BINPATH . "/mongos --fork --config " . BASEDIR ."/mongos/cnf/mongos.conf &";
    $sh_file = BASEDIR . "/mongos/mongostart.sh";
    $shfp = fopen($sh_file, 'w,ccs=UTF-8');
    fwrite($shfp, "#!/bin/bash\\n\\n");
    fwrite($shfp, $shell);
    fclose($shfp);
      
    echo "mongos----->$port\\n";
}
  
//入口函数
function main() {
    create_cfg_path();
      
    create_rs_path();
      
    create_mongos_path();
}
  
main();

网友评论