mongodb(一)mongodb 副本集配置

给你一囗甜甜゛ 提交于 2019-12-01 21:26:05

环境

    系统: centos7
    软件: mongodb-linux-x86_64-rhel70-4.0.2.tgz 

下载解压

    tar -zxvf mongodb-linux-x86_64-rhel70-4.0.2.tgz  -C /usr/local/mongodb
    cd /usr/local/mongodb

基本配置:

  • 假定已经解压安装完成,现在所处的目录是 /usr/local
  • mongodb 目录:/usr/local/

配置步骤如下:

1)新建副本集文件夹:
    mkdir mongodb-replset

2)复制解压好的mongodb文件到mongodb-replset下:
    cp mongodb -r mongodb-replset/mongodb-1
    cp mongodb -r mongodb-replset/mongodb-2
    cp mongodb -r mongodb-replset/mongodb-3

3)创建data logs conf 目录(用于存数据、日志、配置文件)
    cd mongodb-replset/mongodb-1  
    mkdir data logs conf 
    注:2、3自行创建

4)修改配置文件 conf/mongo.conf
    vim mongodb-1/conf/mongodb.conf 
    配置文件如下:
        port=27017
        #数据文件存放目录
        dbpath=/usr/local/mongodb-replset/mongodb-1/data/
        #日志文件存放目录
        logpath=/usr/local/mongodb-replset/mongodb-1/logs/mongodb.log
        pidfilepath=/usr/local/mongodb-replset/mongodb-1/mongo.pid
        #以守护程序的方式启用,即在后台运行
        fork=true
        #使用追加的方式写日志
        logappend=true
        #最大同时连接数
        maxConns=500
        #开放ip 允许外网访问
        bind_ip=0.0.0.0
        # 设置开启权限认证
        noauth=true
        # 副本名称(配置副本集,这个参数是必须的)
        replSet=myreplset
        oplogSize=2048

    注:2、3自行修改(端口依次修改为:27017、27018、27019,数据、日志、pid自行更换)

5)启动
    ./mongodb-1/bin/mongod --config mongodb-1/conf/mongodb.conf
    ./mongodb-2/bin/mongod --config mongodb-2/conf/mongodb.conf
    ./mongodb-3/bin/mongod --config mongodb-3/conf/mongodb.conf

6) 进入mongo 客户端(在这里我们进入 1 的)
    ./mongodb-1/bin/mongo
       config配置:
            config={
                "_id" : "myreplset",
                "members" : [
                    {
                        "_id" : 0,
                        "host" : "192.168.22.11:27017"
                    },
                    {
                        "_id" : 1,
                        "host" : "192.168.22.11:27018"
                    },
                    {
                        "_id" : 2,
                        "host" : "192.168.22.11:27019"
                    }
                ]
            }
       初始化:
            rs.initiate(config);
      初始化成功显示如下:
          {
                "info" : "Config now saved locally.  Should come online in about a minute.",
                "ok" : 1
          }
        查看状态:
            rs.status();这个来查看副本集各节点的状态;


    注:到此,基本的一主二副的 副本集就搭建好了

mongodb 副本集增加密码认证

说明:默认情况下,MongoDB 不会进行身份验证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,出于安全角度考虑,我们应当为其添加认证访问。本文将指导最基本的为 mongodb 副本集增加密码认证。

创建 KeyFile

副本集设置身份验证与单机不同,需要增加一个 keyFile 以便副本集成员相互认证。

这个文件需要满足下面几点要求:

  • 文本长度需要在 6 和 1024 之间
  • 认证时候不考虑文件中空白字符
  • 连接到副本集的成员和 mongos 进程的 keyfile 文件内容必须一样
  • 必须是base64编码,但是不能有等号
  • 文件权限必须是x00,也就是说,不能分配任何权限给group成员和other成员

我们可以在 Linux 上直接使用 openssl 创建一个这样的文件,然后上传至其他副本集成员服务器:

openssl rand -base64 512 > mongodb.key
chmod 400 mongodb.key

变更配置文件(以1为例)

auth=true
keyFile = keyFile=/usr/local/mongodb-replset/mongodb-1/mongodb.key
// keyFile 可以使用绝对路径也可以使用相对路径

创建用户

进入客户端(注意一定要是主服务器,只有主服务器有权限 执行更新操作)

./mongodb-1/bin/mongo

创建一个全局管理员,用于管理用户:

use admin
db.createUser({ user: "root", pwd: "husky", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })

创建一个数据库拥有者用户,方便创建索引

use test
db.createUser({ user: "admin", pwd: "husky", roles: [{ role: "dbOwner", db: "test" }] })

创建一个读写用户,方便通过java等操作数据库

use test
db.createUser({ user: "test", pwd: "husky", roles: [{ role: "readWrite", db: "test" }] }

测试密码认证

./mongodb-1/bin/mongo
use test
db.auth("test","husky");
1

java 连接配置

spring XML 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mongo="http://www.springframework.org/schema/data/mongo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/data/mongo     
        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- credentials="用户名:密码@用户归属数据库" -->
    <mongo:mongo-client replica-set="172.17.0.3:27018,172.17.0.4:27018, 172.17.0.5:27018" credentials="mytest:mytest@mytest"  id="mongo">
        <mongo:client-options 
            connections-per-host="20"
            threads-allowed-to-block-for-connection-multiplier="10" 
            connect-timeout="120000"
            max-wait-time="120000"
            socket-keep-alive="true"
            socket-timeout="150000"
             /> 
    </mongo:mongo-client>

    <mongo:db-factory dbname="数据库名" mongo-ref="mongo" />

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
    </bean>
</beans>

springboot配置

spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

参见

生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)<br/> 为 mongodb 副本集增加密码认证

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!