zoukankan      html  css  js  c++  java
  • MongoDB 4.X搭建

    一、MongoDB4.X搭建

    1、下载mongdb安装包,在官网上找到对应的版本,我的是centos7

    找到上面的连接,通过命令行:

    2、将下载的mongodb-linux-x86_64-4.0.0.tgz 上传到要安装的机器

    [root@localhost mongodb]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz

    3、解压mongodb-linux-x86_64-4.0.0.tgz 文件

    [root@localhost mongodb]# tar -xvf mongodb-linux-x86_64-4.0.6.tgz 

    4、在usr/local 目录中创建mongodb文件夹
        mkdir mongodb(注:最好是在usr/local中创建)
    5、将解压后的mongodb-linux-x86_64-4.0.0中的文件全部移动到/usr/local/mongodb中

    [root@localhost mongodb]# mv mongodb-linux-x86_64-4.0.6/* /usr/local/mongodb/

    6、在mongodb下创建data 和logs 目录
         mkdir data
         mkdir logs

    7、创建MongoDB运行时使用的配置文件:
    进入bin目录下:cd  /usr/local/mongodb/bin
    创建mongodb.conf配置文件:vi mongodb.conf
    会提示是new file,直接输入下面内容:

    dbpath = /data/db #数据文件存放目录
    logpath = /logs/mongodb.log #日志文件存放目录
    port = 27017 #端口
    fork = true #以守护程序的方式启用,即在后台运行
    #auth=true #需要认证。如果放开注释,就必须创建MongoDB的账号,使用账号与密码才可远程访问,第一次安装建议注释
    bind_ip=0.0.0.0 #允许远程访问,或者直接注释,127.0.0.1是只允许本地访问

    8、进入/usr/local/mongodb/bin目录下,启动mongodb服务

    [root@localhost bin]# ./mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/a.log --logappend --port=27017 -f /usr/local/mongodb/bin/mongodb.conf

    9、测试是否安装成功

    9.1、访问http://10.200.110.99:27017/ 如果在浏览器中出现下面一段英文说明成功了。

    9.2、另外在打开一个ssh,启动mongodb的客户端,进入/usr/local/mongodb/bin目录下
         ./mongo

    9.3、或者用客户端工具

    1. 到官网下载Robo 3T,网址如: https://robomongo.org/download

    我下载的版本:robo3t-1.2.1-windows-x86_64-3e50a65.zip

    解压后的exe打开如下:

    保存,然后再双击它,连接成功,展示所有数据库列表。如下图:

    主从模式。使用mysql数据库时大家广泛用到,采用双机备份后主节点挂掉了后从节点可以接替主机继续服务。所以这种模式比单节点的高可用性要好很多。

    mongodb3

    下面看一下怎么一步步搭建一个mongodb的主从复制节点:

    • 1、准备两台机器 10.202.11.117,10.202.37.75。 10.202.11.117 当作主节点, 10.202.37.75作为从节点
    • 2、分别下载mongodb安装程序包。在10.202.11.117上建立文件夹 /data/mongodbtest/master,10.202.37.75建立文件夹/data/mongodbtest/slave
    • 3、10.202.11.117启动mongodb主节点程序。注意后面的这个 “ –master ”参数,标示主节点。

    启动master:

    ./mongod --dbpath=/home/sfapp/dev/mongodb/mongodb-3.4.2/mongo_data --port=27017 --fork --logpath=/home/sfapp/dev/mongodb/mongodb-3.4.2/logs/mongodb.log -master

    输出日志如下,成功!

    4、在10.202.11.117启动mongodb从节点程序。关键配置,指定主节点ip地址和端口 –source 10.202.11.117:27017 和 标示从节点 –source 参数。

    ./mongod --dbpath=/home/appdeploy/dev/mongodb/mongodb-3.4.2/mongo_data --port=27017 --fork --logpath=/home/appdeploy/dev/mongodb/mongodb-3.4.2/logs/mongodb.log –slave –source 10.202.11.117:27017

    输出日志如下,成功!

    5、测试主从复制。

    在主节点上连接到终端:

    mongo 127.0.0.1

    往tong库里的testdb表插入数据。
    > use tong
    switched to db tong
    > db.testdb.insert({"addr":"jiujiang1","sex":"n"})
    WriteResult({ "nInserted" : 1 })
    > 
    查询testdb数据看看是否成功。
    > db.testdb.insert({"addr":"jiujiang1","sex":"n"})
    WriteResult({ "nInserted" : 1 })
    > db.testdb.find()
    { "_id" : ObjectId("58d9da1a55e73ea691ab2edb"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da3155e73ea691ab2edc"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da4c55e73ea691ab2edd"), "test1" : "testval1" }
    { "_id" : ObjectId("58db19b84cb923f327ec5ae9"), "addr" : "jiujiang1", "sex" : "n" }
    > 

    可以看到主机的同步日志

    2017-03-29T10:12:10.475+0800 I NETWORK  [thread1] connection accepted from 10.202.37.75:42087 #3 (2 connections now open)
    2017-03-29T10:12:10.476+0800 I NETWORK  [conn3] received client metadata from 10.202.37.75:42087 conn3: { driver: { name: "MongoDB Internal Client", version: "3.4.2" }, os: { type: "Linux", name: "CentOS release 6.6 (Final)", architecture: "x86_64", version: "Kernel 2.6.32-504.el6.x86_64" } }

    检查从主机的数据。

    mongo 127.0.0.1

    查看当前数据库。

    > use tong
    switched to db tong
    > show collections;
    2017-03-29T10:18:58.648+0800 E QUERY    [thread1] Error: listCollections failed: {
        "ok" : 0,
        "errmsg" : "not master and slaveOk=false",
        "code" : 13435,
        "codeName" : "NotMasterNoSlaveOk"
    } :

    错误:not master and slaveOk=false

    这是正常的,因为slave是不允许读写的,如果非要解决,方法如下:

    rs.slaveOk();
    > show collections;
    Person
    fs.chunks
    fs.files
    system.profile
    system.users
    testdb
    tong
    user
    > db.testdb.find()
    { "_id" : ObjectId("58d9da1a55e73ea691ab2edb"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da3155e73ea691ab2edc"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da4c55e73ea691ab2edd"), "test1" : "testval1" }
    > db.testdb.find()
    { "_id" : ObjectId("58d9da1a55e73ea691ab2edb"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da3155e73ea691ab2edc"), "test1" : "testval1" }
    { "_id" : ObjectId("58d9da4c55e73ea691ab2edd"), "test1" : "testval1" }
    { "_id" : ObjectId("58db19b84cb923f327ec5ae9"), "addr" : "jiujiang1", "sex" : "n" }
    > 

    看结果上面新增的一条记录被同步到slave机器上。查询后数据已经同步过来了。再看看日志,发现从主机确实从主机同步了数据。

    Thu Nov 14 23:05:13 [replslave] repl:   checkpoint applied 15 operations
    Thu Nov 14 23:05:13 [replslave] repl:   syncedTo: Nov 14 23:08:10 5284e75a:1

    查看服务状态

    > db.printReplicationInfo();
    this is a slave, printing slave replication info.
    source: 10.202.11.117:27017
        syncedTo: Wed Mar 29 2017 10:32:57 GMT+0800 (CST)
        5 secs (0 hrs) behind the freshest member (no primary available at the moment)
    > 

    到此主从结构的mongodb搭建好了。

    故障转移测试,现在两台服务器如果主服务器挂掉了,从服务器可以正常运转吗?

      • a、先测试下从服务器可以当成主服务器吗,也就是往从服务器里写能够同步主服务器吗?

        在192.168.0.2上连接mongodb。

        mongo 127.0.0.1:27017
        > db.testdb.insert({"test3":"testval3"});
        not master

        可以看到 mongodb的从节点是不能提供写操作的,只能提供读操作。

    b、如果从服务器挂掉,主服务器还可以提供服务。如果主服务器挂掉了从服务器能否自动变为可写。
    测试一下!

    先杀掉原来的mongodb主服务器。

    kill -3 `ps -ef|grep mongod|grep -v grep|awk '{print $2}'`

    测试从服务器能否可写。在192.168.0.2上连接mongodb测试。

    > db.testdb.insert({"test3":"testval3"});
    not master

    看起来从服务器没有自动接替主服务器的功能,只有手工处理了!

    停止从服务器,在原数据文件启动并添加主服务器标示。

    mongod  --dbpath /data/mongodbtest/slave --master

    等到启动成功(时间有点长)。在192.168.0.2 上 连接

    mongo 192.168.0.2:27017

    > db.testdb.find();
    "_id" : ObjectId("5288629e9b0318be4b20bd4c"), "test1" : "testval1" }
    "_id" : ObjectId("528862d69b0318be4b20bd4d"), "test2" : "testval2" }

    成功!

    多个从节点。现在只是一个数据库服务器又提供写又提供读,机器承载会出现瓶颈。大家还记得mysql里的读写分离吗?把20%的写放到主节点,80%的读放到从节点分摊了减少了服务器的负载。但是大部分应用都是读操作带来的压力,一个从节点压力负载不了,可以把一个从节点变成多个节点。那mongodb的一主多从可以支持吗?答案是肯定的。

    mongodb4

    为了方便测试,在192.168.0.2上再建立一个文件夹 /data/mongodbtest/slave1 作为另一个slave服务器。
    启动slave2服务,

    mongod  --dbpath /data/mongodbtest/slave1 --slave  --port 27017 --source 192.168.0.1:27017。

    成功启动后通过mongodb连接测试:

    > db.testdb.find();
    "_id" : ObjectId("5288629e9b0318be4b20bd4c"), "test1" : "testval1" }
    "_id" : ObjectId("528862d69b0318be4b20bd4d"), "test2" : "testval2" }

    搭建了这套主从复制系统是不是就很稳健了,其实不然。。。看看这几个问题?

    • 主节点挂了能否自动切换连接?目前需要手工切换。
    • 主节点的写压力过大如何解决?
    • 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大?
    • 就算对从节点路由实施路由访问策略能否做到自动扩展?

    还有这么多问题,有其他解决方案吗?下一篇接着弄。

  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/duanxz/p/3504286.html
Copyright © 2011-2022 走看看