zoukankan      html  css  js  c++  java
  • (一)Mongodb全分布式搭建

    一.集群规划

    1.1.配置规划

    【注意】得部署奇数台。

    节点 Master Slave1 Slave2
    IP 192.168.2.98 192.168.2.99 192.168.2.100
    配置实例 a11c1configserver1 a22c2configserver2 a33c3configserver3

    1.2.分片规划

    说明:1个分片内有3个副本集。如果看不懂分片规划请看例子解释。(看懂忽略此例子)

    例子:fang-s-a整行解释。a1-a2-a3副本集对应端口为28111。a1(在Master上)、a2(在Slave1)、a3(在Slave2) 对应着上面的配置实例。现在移至搭建Mongodb第8步操作解释,在主节点Master登录Mongo添加a2(Slave1)、a3(Slave2)这两个次要的副本集。

    切片名称 主要副本集 次要副本集 次要副本集 端口
    fang-s-a a1(Master) a2(Slave1) a3(Slave2) 28111
    fang-s-b b2(Slave1) b1(Master) b3(Slave2) 28112
    fang-s-c c3(Slave2) c1(Master) c2(Slave1) 29113
    fang-cs configserver1(Master) configserver2(Slave1) configserver3(Slave2) 28200

    二.搭建Mongodb

    1.下载安装包(master)
    # wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
    # tar zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz -C /usr/local/ 解压
    # mv /usr/local/mongodb-linux-x86_64-rhel62-3.2.9 /usr/local/mongo  改名
    2.分发安装包至各节点(master)
    # scp -r /usr/local/mongo root@slave1:/usr/local/
    # scp -r /usr/local/mongo root@slave2:/usr/local/
    3.创建db目录、日志目录、mongodb配置文件(三台)此处演示一台每台都要改数值对应
    3.1.创建db目录
    # mkdir -p /mongodb/a1 /mongodb/b1 /mongodb/c1 /mongodb/configserver1 
    3.2.创建日志目录
    # mkdir -p /home/log/mongodb/a1 /home/log/mongodb/b1 /home/log/mongodb/c1 /home/log/mongodb/configserver1 
    3.3.创建mongodb配置文件
    # touch /mongodb/mongod-a1-config.yml /mongodb/mongod-b1-config.yml /mongodb/mongod-c1-config.yml /mongodb/mongod-configserver1.yml
    4. 生产和copy秘钥用户实例内部认证(master)
    # openssl rand -base64 755 > /mongodb/keyfile
    # chmod 400 /mongodb/keyfile  授权
    # scp /mongodb/keyfile root@slave1:/mongodb/  分发1
    # scp /mongodb/keyfile root@slave2:/mongodb/  分发2
    5.配置mongodb文件(三台)  配mongod-a1-config.yml + b1 + c1
    # vim /mongodb/mongod-a1-config.yml  添加如下。这里只是a1举例 b1+c1也是如此但要改内容的数值与之文件对应。注意下面有空格是固定的对准不然后面启动不了!
    # 日志位置
    systemLog:
    destination: file  # 前面空1格
    logAppend: true  # 空1格
    path: /home/log/mongodb/a1/mongodb.log  # 空1格
    # db存储位置
    storage:  
    dbPath: /mongodb/a1  # 空1格
    journal:  # 空1格
    enabled: true  # 空2格
    # fork : 后台运行
    # pidFilePath: pidfile的位置
    processManagement:
    fork: true  # 空1格
    pidFilePath: /var/run/mongod-a1.pid  # 空1格
    # 仅收听本地界面
    net:
    port: 28111  # 注意这里是a1的端口28111、配置b1时要分配端口28112、配置c1时要分配端口28113。空1格
    bindIp: 0.0.0.0  # 空1格
    # operation剖析
    operationProfiling:
    slowOpThresholdMs: 1000  # 空1格
    mode: slowOp  # 空1格
    # 复制
    replication:
    replSetName: fang-s-a  # 注意配置b1时这里a要改为b、配置c1时改为c。空1格
    # 分片
    sharding: 
    clusterRole: shardsvr  # 空1格
    6.配置mongod-configserver1.yml文件(三台) slave1数值是2 slave2是3注意以下格式有空格,严格空格,不然后面启动不了!
    # vim /mongodb/mongod-configserver1.yml
    # mongod config
    systemLog:
    destination: file  # 空1格
    logAppend: true  # 空1格
    path: /home/log/mongodb/configserver1/mongodb.log  # 空1格
    # Where and how to store data.
    storage:
    dbPath: /mongodb/configserver1  # 空1格
    journal:  # 空1格
    enabled: true  # 空2格
    # fork : fork and run in background
    # pidFilePath:location of pidfile
    processManagement:
    fork: true  # 空1格
    pidFilePath: /var/run/mongod-configserver1.pid  # 空1格
    # network interfaces
    # Listen to local interface only, comment to listen on all interfaces.
    net:
    port: 28200  # 空1格
    bindIp: 0.0.0.0  # 空1格
    #operationProfiling:
    operationProfiling:
    slowOpThresholdMs: 1000  # 空1格
    mode: slowOp  # 空1格
    #replication:
    replication:
    replSetName: fang-cs  # 空1格
    #sharding:
    sharding:
    clusterRole: configsvr  # 空1格
    7.启动(三台)这里演示一台启动master所有实例
    # cd /usr/local/mongo/bin/  进入mongo bin目录
    # ./mongod -f /mongodb/mongod-a1-config.yml  启动config服务1-2-3
    # ./mongod -f /mongodb/mongod-b1-config.yml
    # ./mongod -f /mongodb/mongod-c1-config.yml
    # ./mongod -f /mongodb/mongod-configserver1.yml  启动configserver1-2-3
    8.登录Mongo(master) → slave1 → slave2
    # ./mongo 192.168.2.98:28111/admin  28111是a1服务配置的端口
    > use admin  转至主库下
    > rs.initiate()  初始化fang-s-a的副本集
    > rs.add("slave1:28111")  添加副本集
    > rs.add("slave2:28111")
    > rs.conf()  查看副本集情况  (此时可以自行插入记录看看同步效果)
    # 登录到192.168.2.99  初始化fang-s-b 添加副本集
    # ./mongo 192.168.2.99:28112/admin
    >rs.initiate()
    >rs.add("master:28112")
    >rs.add("slave2:28112")
    # 登录到192.168.2.100  初始化fang-s-c 添加副本集
    # ./mongo 127.168.2.99:28113/admin
    rs.initiate()
    rs.add("master:28113")
    rs.add("slave1:28113")
    # 登录到192.168.2.98  初始化fang-cs添加副本集
    # ./mongo 127.168.2.98:28200/admin
    > rs.initiate()
    rs.add("slave1:28200")
    rs.add("slave2:28200")
    9. 添加分片集群
    # 登录到192.168.2.98
    # cd /usr/local/mongo/bin/
    # ./mongos --port 28300 --configdb fang-cs/master:28200,slave1:28200,slave2:28200 --fork --logpath /home/log/mongodb/mongos.log --bind_ip 0.0.0.0  开启服务
    # ./mongo 192.168.2.98:28300/admin  登录
    > use admin
    > sh.addShard("fang-s-a/master:28111,slave1:28111,slave2:28111")
    > sh.addShard("fang-s-b/master:28112,slave1:28112,slave2:28112")
    > sh.addShard("fang-s-c/master:28113,slave1:28113,slave2:28113")
    10.设置备节点永久读(验证副本集同步)
    对于replica set 中的secondary 节点默认是不可读的。在写多读少的应用中,使用Replica Sets来实现读写分离。通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。
    如果通过shell访问mongo,要在secondary进行查询。会出现如下错误:
    imageSet:SECONDARY> db.fs.files.find()
    error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
    有两种方法实现从机的查询:
    第一种方法:db.getMongo().setSlaveOk();
    第二种方法:rs.slaveOk();
    但是这种方式有一个缺点就是,下次再通过mongo进入实例的时候,查询仍然会报错,为此可以通过下列方式
    vi ~/.mongorc.js
    增加一行rs.slaveOk();
    这样的话以后每次通过mongo命令进入都可以查询了

    11.认证分片(登录mongos)
    # ./mongo 192.168.2.131:28300/admin
    > use admin 启用分片键 > sh.enableSharding("mytest") > sh.shardCollection("mytest.student",{_id:"hashed"}) > for(var i=1;i<=50;i++){db.student.insert({age:i,"name":"mary",addr:"China"})} 测试 > db.student.find() 查看

  • 相关阅读:
    Oracle查询今天的数据(昨天、本周...)
    Windows添加删除 route
    大三寒假学习进度(九)
    大三寒假学习进度(八)
    大三寒假学习进度(七)
    大三寒假学习进度(六)
    大三寒假学习进度(五)
    《软件架构师应该知道的97件事》阅读笔记(一)
    大三寒假学习进度(四)
    大三寒假学习进度(三)
  • 原文地址:https://www.cnblogs.com/Agent9527/p/13195205.html
Copyright © 2011-2022 走看看