MongoDb(一)搭建

2 篇文章 0 订阅

目录

 

安装

启动

搭建 副本集

搭建

 增删节点


安装

下载地址

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.12.tgz

解压缩到目录

tar -zxvf mongodb-linux-x86_64-4.0.12.tgz

设置环境变量

vi /etc/profile

export PATH=:$PATH:/usr/local/mongo/mongodb-linux-x86_64-4.0.12/bin:$PATH

 

保存配置生效

source /etc/profile

查看版本

mongo --version

新建数据文件

mkdir -p /usr/local/mongo/data /usr/local/mongo/logs

创建log文件

touch /usr/local/mongo/logs/mongodb.log

设置启动配置文件

vi /usr/local/mongo/mongodb.conf

#日志文件的路径
logpath=/usr/local/mongo/m1/logs/mongodb.log
# 是否追加方式写入日志,默认True
logappend=true
port = 27001

# 数据库文件位置
dbpath=data

# 是否以守护进程方式运行,默认false
fork = true
# 设置绑定ip
bind_ip=0.0.0.0
# 集群名称
replSet=mongo

启动

必须进入配置文件所在目录

mongod -f mongodb.conf

连接MongoDB

mongo --port 27001

停止服务

mongod --shutdown -f mongodb.conf

搭建 副本集

一、简介

Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点。

Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,实现数据的高可用。

使用场景

  • 数据冗余,用做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。
  • 读写分离,读的请求分流到副本上,减轻主节点的读压力。

二、副本集角色

  1. 主节点(Primary)

接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。

默认读请求也是发到Primary节点处理的,可以通过修改客户端连接配置以支持读取Secondary节点。

  1. 副本节点(Secondary)

与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。

  1. 仲裁者(Arbiter)

不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。

三、两种架构模式

  1. PSS

Primary + Secondary + Secondary模式,通过Primary和Secondary搭建的Replica Set

该模式下 Replica Set节点数必须为奇数,目的是选主投票的时候要出现大多数才能进行选主决策。

  1. PSA

Primary + Secondary + Arbiter模式,使用Arbiter搭建Replica Set

偶数个数据节点,加一个Arbiter构成的Replica Set

 

搭建

 

Primary + Secondary + Arbiter模式搭建Replica Set

配置文件

systemLog:
  destination: file
  logAppend: true #是否追加方式写入日志
  path: logs/mongod.log
net:
  bindIp: 0.0.0.0
  port: 27017
  maxIncomingConnections: 65536 #最大连接数
  wireObjectCheck: true #当客户端写入数据时 检测数据的有效性(BSON) 默认值为true
  ipv6: false
storage:
  dbPath: data
  journal:
    enabled: true #是否开启 journal 日志持久存储
replication:
  oplogSizeMB: 10240 #replication 操作日志的最大尺寸,单位:MB
  replSetName: rs0
  secondaryIndexPrefetch: all
processManagement:
  fork: true #后台启动
  #pidFilePath: mongod.pid #进程号

启动三台实例

进入第一台

mongo --port 27001

#添加节点

rsconf = {
  _id: "mongo",
  members: [
    {
     _id: 0,
     host: "192.168.25.150:27001"
    },
    {
     _id: 1,
     host: "192.168.25.150:27002"
    },
    {
     _id: 2,
     host: "192.168.25.150:27003"
    }
   ]
}
rs.initiate(rsconf)  


输入 rs.conf() 来查看你的集群信息:

修改节点权重

members[0]节点序号

priority 权重 越大容易成为 primary

ps: 需在主节点修改

cfg = rs.conf();
cfg.members[0].priority = 2;
rs.reconfig(cfg);

rs.conf()

 设置从节点

进入从节点 执行
mongo --port 27002
#重要且必须, secondary节点允许读取操作在当前节点进行,否则从节点无法复制主节点的数据
#进入secondary实例

rs.slaveOk()

Arbiter节点与从节点配置一致,启动后在设置arbiterOnly:true

rsconf = {
  _id: "mongo",
  members: [
    {
     _id: 0,
     host: "192.168.25.150:27001"
    },
    {
     _id: 1,
     host: "192.168.25.150:27002"
    },
    {
     _id: 2,
     host: "192.168.25.150:27003"
     ,arbiterOnly:true
    }
   ]
}
rs.initiate(rsconf) 

 增删节点

删除节点:进入主节点27019,然后移除27018节点

myrepl:PRIMARY> use admin
switched to db admin
myrepl:PRIMARY> db.auth("admin","admin")
1
myrepl:PRIMARY> rs.remove("127.0.0.1:27018")
{
        "ok" : 1,
        "operationTime" : Timestamp(1520340394, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1520340394, 1),
                "signature" : {
                        "hash" : BinData(0,"0VUzGmXGZ4EXAUC/HYJbRaPY6qc="),
                        "keyId" : NumberLong("6529469760260800513")
                }
        }
}
myrepl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "127.0.0.1:27017",
                "127.0.0.1:27019"
        ],
        "setName" : "myrepl",
        "setVersion" : 2,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "127.0.0.1:27019",
        "me" : "127.0.0.1:27019",
        //后面省略

增加节点:进入主节点27019,然后将刚刚删除的节点27018又重新加入到集群中

myrepl:PRIMARY> rs.add("127.0.0.1:27018")
{
        "ok" : 1,
        "operationTime" : Timestamp(1520340538, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1520340538, 1),
                "signature" : {
                        "hash" : BinData(0,"a3TQIbz8yCaDh4Uxh4yUUkF7auk="),
                        "keyId" : NumberLong("6529469760260800513")
                }
        }
}
myrepl:PRIMARY> rs.isMaster()
{
        "hosts" : [
                "127.0.0.1:27017",
                "127.0.0.1:27019",
                "127.0.0.1:27018"
        ],
        "setName" : "myrepl",
        "setVersion" : 3,
        "ismaster" : true,
        "secondary" : false,
        "primary" : "127.0.0.1:27019",
        "me" : "127.0.0.1:27019",
        "electionId" : ObjectId("7fffffff0000000000000002"),
        后面省略.......

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值