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);
    
  • 相关阅读:
    1.13 Flask
    1.12 Flask 复习
    1.11 flask
    1.10 flask
    1.9 flask
    1.8 flask 路由
    sql server存储过程
    Ajax学习笔记
    随机密码字典生成器
    jRazor
  • 原文地址:https://www.cnblogs.com/shihaiming/p/9990462.html
Copyright © 2011-2022 走看看