Mongodb安装配置及热备集群

 

Mongodb安装配置及热备集群

1.   单一集群

1.1 安装

   1.下载mongodb ,官方下载地址https://www.mongodb.com/download-center。选择安装的环境平台,下载对应的安装文件。这里已下载zip文件为例。

   2.将下载的安装文件,拷贝到服务器。并解压。解压命令为unzip  文件名

   3.因为mongodb不需要像别的数据库那样繁琐的配置解压后放到惯例的/usr/local目录下面,当然你可以放到任何地方,放到/usr/local下面方便管理。

     命令:mv  文件名 /usr/local/

   4.然后为mongodb创建数据库存放的位置和日志文件,默认是在/data/db下面,同样为了方便就在mongodb下面建立了相应的目录.

  

  

1.2 配置

     配置mongodb.conf,将相关的启动参数的进行配置。

     配置内容如下:

port=27017  #端口

dbpath=/home/mongodb/data/   #数据库

logpath=/home/mongodb/logs/mongodb.log # 日志

fork=true  #后台运行

logappend=true  #写日志的模式:设置为true为追加。

auth=true  #开启权限验证

maxConns=100 #连接最大数,防止宕机。

      注:其他配置属性,可以参考相关网站再配置文件中进行配置

1.3 启动/停止

启动:进入mongodb的bin文件夹。

     命令:./mongod-f mongodb.conf

停止:查看mongodb的进程号

   命令:ps-ef|grep mongodb

  通过进程号,杀死进程。

   命令:kill -9 进程号

1.4 安全认证

创建admin 数据库

use admin

-- 系统管理员(密码验证算法是:SCRAM-SHA-1,所以应用程序连接请注意连接算法)

db.createUser(

{

    user : "root",

    db : "admin",

    pwd: ‘123456’

    credentials : {

        "SCRAM-SHA-1" : {

            "iterationCount" : 10000,

            "salt" :"ASx2XTL3GpQ0sEjxvaaW6Q==",

            "storedKey" :"9CsfOG+T6Ju9YJVvdS4rGgIOHPc=",

            "serverKey" :"epCXddFBLuWq6km7K9Q854VTWpY="

        }

    },

    roles: [

        {

            role: "__system",

            db: "admin"

        },

        {

            role:"userAdminAnyDatabase",

            db: "admin"

        }

    ]

}

)

--指定数据库的访问权限配置

db.createUser(

{

    user : "test",

    db : "test",

    pwd: ‘123456’

    credentials : {

        "SCRAM-SHA-1" : {

            "iterationCount" : 10000,

            "salt" :"ASx2XTL3GpQ0sEjxvaaW6Q==",

            "storedKey" :"9CsfOG+T6Ju9YJVvdS4rGgIOHPc=",

            "serverKey" :"epCXddFBLuWq6km7K9Q854VTWpY="

        }

    },

    roles: [

        {

            role: "readWrite",

            db: "test"

        }

    ]

}

)

2.   单机热备集群(双机配置一样)

2.1 安装(多个)

       主要是安装一个主服务器、一个从服务器、一个仲裁服务器,双机热备集群就可以实现。分别安装三个mongodb。注意初始化的时候,数据库需一致

   1.下载mongodb ,官方下载地址https://www.mongodb.com/download-center。选择安装的环境平台,下载对应的安装文件。这里已下载zip文件为例。

   2.将下载的安装文件,拷贝到服务器。并解压。解压命令为unzip  文件名

   3.因为mongodb不需要像别的数据库那样繁琐的配置解压后放到惯例的/usr/local目录下面,当然你可以放到任何地方,放到/usr/local下面方便管理。

     命令:mv  文件名 /usr/local/

   4.然后为mongodb创建数据库存放的位置和日志文件,默认是在/data/db下面,同样为了方便就在mongodb下面建立了相应的目录.

注意:三个mongodb的分别命名为1231:主服务器  2:从服务器 3:仲裁服务器。

2.2 配置(多个Mongodb)

主服务器的mongodb_1.conf的配置:

       #master.conf

dbpath=/usr/local/mongodb/1/data/  #数据库目录

logpath=/usr/local/mongodb/1/logs/mongodb.log #日志目录

directoryperdb=true #设置为true,修改数据目录存储模式,每个数据库的文件存储在DBPATH指定目录的不同的文件夹中。使用此选项,可以配置的MongoDB将数据存储在不同的磁盘设备上,以提高写入吞吐量或磁盘容量。默认为false。

logappend=true  #写日志的模式:设置为true为追加

replSet=testrs  #使用此设置来配置复制副本集。指定一个副本集名称作为参数,所有主机都必须有相同的名称作为同一个副本集。

bind_ip=192.168.174.129 #指定IP

port=27017   #端口

fork=true   #后台运行

noprealloc=true #预分配方式。

从服务器的mongodb_2.conf的配置:

#slaver.conf

logpath=/usr/local/mongodb/2/logs/mongodb.log

dbpath=/usr/local/mongodb/2/data

directoryperdb=true

logappend=true

replSet=testrs

bind_ip=192.168.174.129

port=27018

fork=true

noprealloc=true

注意:属性含义查看主服务器

仲裁服务器的mongodb_3.conf的配置:

#arbiter.conf

logpath=/usr/local/mongodb/3/logs/mongodb.log

dbpath=/usr/local/mongodb/3/data

directoryperdb=true

logappend=true 

replSet=testrs

bind_ip=192.168.174.129

port=27019 

fork=true

noprealloc=true

注意:属性含义查看主服务器

注意:暂时不考虑权限验证。

2.3 启动

      分别启动服务器。启动顺序:主服务器、从服务器、仲裁服务器。

      命令均是进入各自的bin目录下。

      命令:./mongod -f  配置文件名.conf

2.4 配置集群

登录主服务。进入主服务器的bin 命令:./mongo 192.168.174.129:27017/

执行:初始化函数

config = {

    _id : "testrs",

     members : [

         {_id : 0, host :"192.168.174.129:27017"},

         {_id : 1, host :"192.168.174.129:27018"},

         {_id : 2, host :"192.168.174.129:27019", arbiterOnly: true},

     ]

}

rs.initiate(config)

注:arbiterOnly 表示该服务器为仲裁者

到目前为热备集群已经配置完毕!可以通过rs.status()查看当前“主、从、仲裁”的分布情况。

2.5 测试热备集群(目前在命令行中测试,也可以robomongodb工具)

1.可以在主服务中插入数据,然后在从服务器查看是否能查看到新增的数据。

eg: use test

  db.testdb.insert(‘test1’,’value1’);

2.停止主服务器,看从服务器是否能变成主服务。同时在新的主服务上新增数据。

eg: use test

  db.testdb.insert(‘test2’,’value2’);

3.最后启动关闭的主服务,查看服务器状态。是否主服务是否又变成刚启动的服务器为主服务,同时看在第二步新增的数据,在刚启动的服务器上能否查看到。

eg: use test

  db.testdb.insert(‘test3’,’value3’);

2.6 安全认证

1.配置玩副本集之后开始用户认证,安装单一集群的安全认证的方式配置,配置完之后,配置信息将同步到其他节点

然后逐一启动副本,只用经过密码文件认证的节点才能加入。数据库操作也需要密码认证,大大提高了安全性

2.配置完用户验证之后,停掉副本集,先用openssl生成密码文件,

openssl rand -base64741 > mongodb-keyfile

赋予权限600,文件才能被调用

chmod 600mongodb-keyfile

保存好文件,然后在节点配置文件加入启动调用认证文件参数,如:

keyFile =/usr/local/mongodb/etc/mongodb-keyfile

然后逐一启动副本,只用经过密码文件认证的节点才能加入。数据库操作也需要密码认证,大大提高了安全性

3.最后重启主服务器、从服务器、仲裁服务器

2.7 JAVA连接热备集群实例

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

 

import com.mongodb.BasicDBObject;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.DBCursor;

import com.mongodb.DBObject;

import com.mongodb.MongoClient;

import com.mongodb.MongoClientOptions;

import com.mongodb.MongoCredential;

import com.mongodb.ServerAddress;

 

public classTestMongoDBReplSet {

     public static void main(String[] args) {

           try {

               

                MongoClientOptionsclientOptions =newMongoClientOptions.Builder().connectionsPerHost(50).maxWaitTime(2000).build();

          

                List<MongoCredential>lstCredentials = Arrays.asList(MongoCredential.createScramSha1Credential("interface","interfaceLog","youzitang2016_interface0521".toCharArray()));

               

                List<ServerAddress>addresses = new ArrayList<ServerAddress>();

                ServerAddressaddress1 = new ServerAddress("192.168.174.129", 27017);

                ServerAddressaddress2 = new ServerAddress("192.168.174.129", 27018);

                ServerAddressaddress3 = new ServerAddress("192.168.174.129", 27019);

                addresses.add(address1);

                addresses.add(address2);

                addresses.add(address3);

                MongoClientclient = new MongoClient(addresses,lstCredentials,clientOptions);

                DBdb = client.getDB("interfaceLog");

                DBCollectioncoll =db.getCollection("logs"); // 插入 BasicDBObject

                BasicDBObjectobject = new BasicDBObject();

                object.append("test1","testval1s");

                coll.insert(object);

                DBCursordbCursor = coll.find();

                while (dbCursor.hasNext()) {

                     DBObjectdbObject = dbCursor.next();

       System.out.println(dbObject.toString()+"===========================================================");

                }

           }catch (Exception e) {

                e.printStackTrace();

           }

     }

}

猜你喜欢

转载自blog.csdn.net/u013698311/article/details/78035247