zoukankan      html  css  js  c++  java
  • CentOS MongoDB 高可用实战

    原文:https://www.sunjianhua.cn/archives/centos-mongodb.html

    一、MongoDB 单节点

    1.1、Windows 版安装

    1.1.1 获取社区版本
    A. 查看Windows版本

    cmd输入:
    mongodb-install-win-cmd.png

    B. 下载对应Windows版本
    地址: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/

    1.1.2 安装Windows社区版本

    mongodb-win32-x86_64-2008plus-ssl-3.4.9-signed.msi

    1.1.3 运行Windows社区版本(可直接使用2.1.4)

    A.设置环境变量
    "D:Program FilesMongoDBServer3.4binmongod.exe" --dbpath d:MongoDBdata

    B.启动MongoDB
    "D:Program FilesMongoDBServer3.4binmongod.exe"

    C.连接MongoDB
    "D:Program FilesMongoDBServer3.4binmongo.exe

    D.开始使用MongoDB

    https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started

    1.1.4 配置为服务

    A.管理员方式打开命令行
    按windows 键,输入cmd,然后按ctrl+shift+alt以管理员方式运行

    B.创建目录
    mkdir D:MongoDBdatadb
    mkdir D:MongoDBdatalog

    C.创建配置文件
    在安装目录下创建配置文件:
    D:Program FilesMongoDBServer3.4mongod.cfg

    mongodb-install-win.png

    D.安装为服务

    "D:Program FilesMongoDBServer3.4binmongod.exe" --config "D:Program FilesMongoDBServer3.4mongod.cfg" --install

    E.启动服务
    net start MongoDB

    F.停止或移除服务
    停止: net stop MongoDB
    移除: "D:Program FilesMongoDBServer3.4binmongod.exe" --remove

    1.2、Linux 社区版 (centos6 )
    1.2.1 安装社区版

    #A.配置yum
    > vi /etc/yum.repos.d/mongodb-org.3.4.repo

    mongodb-install-linux-yum.png

    #B.Yum安装
    > sudo yum install -y mongodb-org
    
    #C.配置
    > vi  /etc/mongod.conf

    mongodb-install-linux-conf.png

    1.2.2 运行社区版

    #A.启动MongoDB

    mongodb-install-linux-start.png

    #B.验证是否安装成功
    > cat  /var/log/mongodb/mongod.log

    mongodb-install-linux-start-log.png

    出现以上则成功!

    #加入开机启动: 

    mongodb-install-linux-chkconfig.png

    #C.停止MongoDB

    mongodb-install-linux-stop.png

    #D.重启MongoDB

    mongodb-install-linux-restart.png

    #E.开始使用MongoDB

    https://docs.mongodb.com/manual/tutorial/getting-started/#getting-started

    1.2.3 卸载社区版

    #A.停止MongoDB

    mongodb-install-linux-stop.png

    #B.移除安装包

    mongodb-install-linux-erase.png

    #C.移除数据目录

    mongodb-install-linux-rm.png

    1.3、单节点配置
    1.3.1 配置安全策略

    #A.创建管理员
    > use admin

    mongodb-user-dba.png

    #创建超级管理员最大权限
    > use admin;
    > db.createUser(
        {
            user:"root",
            pwd:"root",
            roles:[{role:"root",db:"admin"}]
        }
    )
    
    #然后,我们在修改下配置文件,先在mongo脚本里输入exit退出mongo。之后再输入以下命令修改配置文件:
    > vim /etc/mongod.conf

    mongodb-user-auth-conf.png

    重启 
    centos7以下的启动、停止服务命令如下:
    sudo service mongod start //启动服务
    sudo service mongod stop //停止服务

    centos7以上的启动停止服务命令如下:
    systemctl start mongod.service //启动服务
    systemctl stop mongod.service //停止服务
    systemctl status mongod.service //查看服务状态

    B.创建新DB
    mongodb-db-new.png

    C.创建数据库所有者:
    mongodb-db-new-owner.png

    1.3.2、配置防火墙
    vi /etc/sysconfig/iptables 加入

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT

    或者:
    iptables -I INPUT -s 192.168.20.0/24 -j ACCEPT
    iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT

    重启: service iptables restart

    二、MongoDB 副本集

    2.1、副本集架构简介
    One、三成员副本集(1主2从/1主1从1决策者)
    mongodb-one-master-two-slave.png
    mongodb-one-master-one-slave.png

    ##### 以上为 (1主1从) #####
    

    mongodb-one-master-one-slave-one-arbiter.png
    mongodb-one-master-one-slave-one-arbiter1.png

    ##### 以上为 (1主1从1决策者) #####
    

    mongodb-two-datacenter1.png
    mongodb-two-datacenter2.png

    ##### 以上为 (Two、两个或两个以上数据中心副本集) #####
    

    2.2、副本集安装

    ##### 注 :  此处为1主2从1决策者
    ##### CentOS release 6.5 (Final)
    

    mongodb-Replication-install1.png

    2.2.1 主从安装

    方法同单节点linux安装

    2.2.2 决策者安装

    方法同上!

    2.3、副本集配置

    2.3.1 配置主从

    #副本集名称: mongoReplicas
    #副本集keyfiles: 
    > mkdir -p /usr/local/mongodb/
    > openssl rand -base64 756 > /usr/local/mongodb/clientAuth.key
    > chown -R mongod.mongod /usr/local/mongodb/clientAuth.key
    > chmod 400 /usr/local/mongodb/clientAuth.key
    
    #copy上面key到其他两个机器并赋值权限!
    
    > vi /etc/mongod.conf
    
    最终效果如下图:

    mongodb-Replication-install2.png

    #用shell连接mongo,然后初始化副本集:
    > rs.initiate(
      {
        _id : "mongoReplicas",
        members: [
          { _id : 0, host : "192.168.10.152:27017" },
          { _id : 1, host : "192.168.10.159:27017" },
          { _id : 2, host : "192.168.10.160:27017" }
        ]
      }
    )
    
    #然后rs.status() 查看主节点

    mongodb-Replication-install3.png

    查看配置: rs.conf()

    mongodb-Replication-install4.png

    2.3.2 配置角色

    #初始化完成后,创建用户:
    
    #创建管理员
    > db.getSiblingDB("admin").createUser(
        {
            user:"root",
            pwd:"root",
            roles:[{role:"root",db:"admin"}]
        }
    );
    > use admin;
    > db.auth(“root”,”root”);
    > db.getSiblingDB("admin").createUser(
      {
        "user" : "clusterAdmin",
        "pwd" : "clusterAdmin",
        roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
      }
    )
    
    > db.getSiblingDB("admin").createUser(
        {
            user:"dba",
            pwd:"dba",
            roles:[{role:"userAdminAnyDatabase",db:"admin"}]
        }
    );
    #创建普通库:
    > db.getSiblingDB("sunjianhua").createUser(
        {
            user:"sunjianhua",
            pwd:"sunjianhua",
            roles:[{role:"dbOwner",db:"sunjianhua"}]
        }
    )
    
    #搭建完成后,用工具连接,最终效果如下图: 

    mongodb-Replication-install5.png

    2.3.3 配置决策者

    #安装mongo方式同上,修改配置文件
    > vi /etc/mongod.conf

    mongodb-Replication-install6.png

    #然后启动: service mongod restart
    
    #在primary节点加入决策者:
    > rs.addArb("192.168.10.231:30000")
    
    #最后查看rs.conf() 和rs.status()

    mongodb-Replication-install7.png
    mongodb-Replication-install8.png

    2.4、副本集测试

    2.4.1 副本集数据同步测试

    在主节点插入:
    mongodb-Replication-install9.png

    在存节点插入:
    mongodb-Replication-install10.png

    查看是否在从节点存在db1了:
    mongodb-Replication-install11.png

    2.4.2 副本集选举测试

    service mongod stop
    然后刷新节点,发现159机器已经变成主节点
    mongodb-Replication-install12.png

    再次启动160Down的机器
    service mongod start
    然后刷新节点,发现160机器已经变成从节点
    mongodb-Replication-install13.png

    三、MongoDB 附录

    3.1、客户端连接工具
    Robo 3T :
    https://robomongo.org/download
    NoSQL Manager for MongoDB:
    https://www.mongodbmanager.com
    mongodb-Replication-install14.png
    mongodb-Replication-install15.png
    mongodb-Replication-install16.png
    mongodb-Replication-install17.png

    3.2、MongoDB角色

    内置角色
    1.数据库用户角色:read、readWrite;
    2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4.备份恢复角色:backup、restore;
    5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6.超级用户角色:root, 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7.内部角色:__system
    具体角色
    1.read:允许用户读取指定数据库
    2.readWrite:允许用户读写指定数据库
    3.dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
    4.userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
    5.clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
    6.readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
    7.readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
    8.userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    9.dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
    10.root:只在admin数据库中可用。超级账号,超级权限.

    3.3、MongoDB基础
    英文: https://docs.mongodb.com/manual/
    中文: http://www.cnblogs.com/liruihuan/tag/MongoDB/
    参考: https://docs.mongodb.com/v3.4/core/replica-set-architectures/
    https://help.aliyun.com/document_detail/26558.html?spm=a2c4g.11186623.6.539.r7B3bf
    主从: https://docs.mongodb.com/manual/replication/

    3.3.1 mongo和sql

    https://docs.mongodb.com/manual/reference/sql-comparison/
    mongodb-Replication-install18.png
    mongodb-Replication-install19.png

    3.3.2 连接mongo
    A.登陆
    mongo 192.168.20.250:27017/sunjianhua -usjh_dbOwner -psjh_dbOwner ;

    B.切换数据库
    use sunjianhua;

    C. ......

    3.4、主备切换异常
    3.4.1 连接失败
    A.应正确连接副本集
    mongodb://[username:password@]host1:port1,...[,hostN[:portN]]]/[database]

    例如: 
    mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=2&wtimeoutMS=2000

    B.hosts别名导致
    cfg = rs.conf()
    cfg.members[0].name= "ip:27017”
    rs.reconfig(cfg)
    3.4.2 切换正常数据异常

    可能未禁止primary 故障后,再次启动后又变成主节点!
    禁止方法: 设置副本集 Priority 都一致

    3.5、Spring data mongo 集成

    3.5.1 单节点集成
    Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>

    引入jar包

    <!-- provide by spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.1</version>
        </dependency>
    <!-- provide by spring end -->
    
        <!-- mongo-java-dirver -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.5.0</version>
        </dependency>
        
        <!-- spring-data-mongodb -->
        <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.10.7.RELEASE</version>
    </dependency>
    

    Spring 集成
    mongodb-Replication-install20.png

    配置文件:
    mongodb-Replication-install21.png

    3.5.2 副本集集成
    Spring 版本 : <spring.version>4.3.11.RELEASE</spring.version>

    引入jar包:(同单节点)
    注意以下版本:

    <!-- mongo-java-dirver -->
         <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
       <version>3.6.3</version>
    </dependency>
        
    <!-- spring-data-mongodb -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.10.11.RELEASE</version>
    </dependency>
    

    Spring 集成
    mongodb-Replication-install22.png

    配置文件:
    mongodb-Replication-install23.png

    3.6、副本集常用命令

    注: 需要在primary节点认证之后执行!
    
    添加节点:
    rs.add( { host: "192.168.10.153:27017", priority: 1, votes: 1 } )
    
    删除节点:
    rs.remove("192.168.10.152:27017")
    
    替换节点:
    cfg = rs.conf()
    cfg.members[0].host = "192.168.10.154"
    rs.reconfig(cfg)
    
    设置priority :
    cfg = rs.conf()
    cfg.members[2].priority = 0.5
    rs.reconfig(cfg)
    
    转换一个单节点为副本集:
    
    rs.initiate(); //需要使用超级管理员执行:
    
    需修改/etc/mongod.conf配置: 
    # network interfaces
    net:
      port: 27017
      bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.
    security:
      authorization: enabled
      keyFile: /usr/local/mongodb/clientAuth.key
    
    replication:
      replSetName: "mongoReplicas"
    
    调整priority(优先级):
    cfg = rs.conf()
    cfg.members[0].priority = 0.5
    cfg.members[1].priority = 2
    cfg.members[2].priority = 2
    rs.reconfig(cfg)
    
    阻止从节点变为主节点:
    cfg = rs.conf()
    cfg.members[2].priority = 0
    rs.reconfig(cfg)
    
    配置隐藏节点:
    cfg = rs.conf()
    cfg.members[0].priority = 0
    cfg.members[0].hidden = true
    rs.reconfig(cfg)
    
    配置从节点延迟:
    cfg = rs.conf()
    cfg.members[0].priority = 0
    cfg.members[0].hidden = true
    cfg.members[0].slaveDelay = 3600
    rs.reconfig(cfg)
    
    配置非选举节点:
    cfg = rs.conf();
    cfg.members[3].votes = 0;
    cfg.members[3].priority = 0;
    cfg.members[4].votes = 0
    cfg.members[4].priority = 0;
    cfg.members[5].votes = 0
    cfg.members[5].priority = 0;
    rs.reconfig(cfg);
    
  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/shihaiming/p/9990462.html
Copyright © 2011-2022 走看看