mongodb-2

MongoDB集群搭建

MongoDB集群简介

集群的好处可以解决单点故障,保证高可用。
MongoDb集群搭建有3种方式:
Master-Slaver
主从复制只有 1 个主节点,至少有 1 个从节点,可以有多个从节点
Replica Set
被称为 复制集 集群,目前用的比较多。
为了解决主从复制集群的容灾性的问题,复制集应运而生。复制集是具有自动故障恢复功能的主从集群。复制集是对主从复制的一种完善。它跟主从集群最明显的区别就是复制集没有固定的主 节点,也就是主节点的身份不需要我们去指明,而是整个集群自己会选举出 1 个主节点,这个 主节点不能正常工作时,又会另外选举出其他的节点作为主节点。复制集中总会有 1 个活跃节 点(Primary)和 1 个或者多个备份节点 ( Secondary)。这样就大大提 MongoDB 服务集群 的容灾性。在足够多的节点情况下,即使一两个节点不工作了, MongoDB 服务集群仍能正常 提供数据服务。
Sharding
被称为分片集群 
在 Mongodb 里面存在另一种集群,就是分片技术,可以满足 MongoDB 数据量大量增长的需
求。这类似于mysql中的分库分表。当 MongoDB 存储海量的数据时,一台机器可能不足以存储
数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,
使得数据库系统能存储和处理更多的数据。

Replica Set 集群搭建 

 

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备
节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节
点。
master: 主节点,负责读写查询数据
salve :从节点,负责备份数据,可以设置为提供查询数据的功能,从而减少主节点的查询压力
arbite :仲裁节点,监控功能,当主节点挂了,会指定某个从节点去代替主节点

 前置准备

三台机器规划:
主节点: 192.168.206.131:27017
从节点: 192.168.206.132:27017
仲裁节点: 192.168.206.133:27018

 实现步骤:

.先在主节点上搭建MongoDB环境
将主节点的服务器克隆出从节点和仲裁节点
修改三台机器上MongoDB的配置文件

 在主节点服务器上安装MongoDB环境

 先配置好ip地址,测试网络是否连通

先在服务器上安装MongoDB依赖的插件net-snmp

 yum install net-snmp

 将MongoDB的安装包上传到服务器上,并解压到特定目录 /usr/local/mongodb4

# 创建 /usr/local/mongodb4 目录
mkdir /usr/local/mongodb4 
# 解压 mongodb 到上面的目录
tar -zxvf mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 .tgz -C /usr/local/
mongodb4

因为解压后,MongoDB的源码目录名字比较长,操作不方便,可以做个重命名

mv /usr/local/mongodb4/mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 /usr/local/mongodb4/mongodb-src

 创建MongoDB运行时需要使用的数据目录和日志文件

# 如果是非管理员账号,可以使用 sudo 执行
sudo mkdir -p / var /lib/mongodb
sudo mkdir -p / var /log/mongodb
sudo chown `whoami` / var /lib/mongodb # 设置权限
sudo chown `whoami` / var /log/mongodb # 设置权限

 在MongoDB的源码目录中,创建conf配置目录和配置文件

mkdir /usr/local/mongodb4/mongodb-src/conf
vi /usr/local/mongodb4/mongodb-src/conf/mongodb.conf

 配置内容

#master 配置
# 数据存放路径
dbpath=/ var /lib/mongodb
# 日志存放路径
logpath=/ var /log/mongodb/mongodb.log
# 以追加的方式记录日志
logappend= true
#mongodb 进程所绑定的 ip 地址
bind_ip= 192.168.48.151
# 端口号
port= 27017
# 以后台方式运行进程
fork= true
# 集群名称
replSet=test

 将mongodb的命令配置在全局环境变量中,方便命令调用

# 编辑 /etc/profile 文件 , 添加路径配置
export PATH=/usr/local/mongodb4/mongodb-src/bin:$PATH
# 执行 profile 文件 , 让配置生效
source /etc/profile

启动服务器端程序,启动客户端程序,测试服务器是否正常 

# 启动服务器端进程
mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf
# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动
mongo 192.168.206.131 : 27017

 使用主节点虚拟机克隆出来从节点服务器

修改从节点服务器的ip地址:192.168.203.132
修改从节点上mongodb的配置文件,将其中的ip地址,改为规划的ip地址
其他配置不变
# 打开从节点的 mongodb 配置文件
vi /usr/local/mongodb4/mongodb-src/conf/mongodb.conf

 修改其中的ip配置,并保存

#master 配置
# 数据存放路径
dbpath=/ var /lib/mongodb
# 日志存放路径
logpath=/ var /log/mongodb/mongodb.log
# 以追加的方式记录日志
logappend= true
#mongodb 进程所绑定的 ip 地址
bind_ip= 192.168.48.152
# 端口号
port= 27017
# 以后台方式运行进程
fork= true
# 集群名称
replSet=test

 启动MongoDB的服务器和客户端,操作与主节点服务器类似,连接的ip要改变

# 启动服务器端进程
mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf
# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动
mongo 192.168.206132 : 27017

 使用主节点虚拟机克隆出来仲裁节点服务器

 修改仲裁节点服务器的ip地址: 192.168.206.133

修改从节点上mongodb的配置文件,将其中的ip地址,改为规划的ip地址

启动MongoDB的服务器和客户端,操作与主节点服务器类似,连接的ip要改变
# 启动服务器端进程
mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf
# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动
mongo 192.168.48.153 : 27018

 搭建集群

从主机节点登录服务器,进入mongodb环境
mongo 192.168.48.151 : 27017
创建配置变量cfg(你也可以任意起名称,不过我们常用的配置就叫conf,或者config,cfg等)
cfg={_id: "test" , members: [ {_id: 0 ,host: '192.168.48.151:27017' ,priority: 2 }
,{_id: 1 ,host: '192.168.48.152:27017' ,priority: 1 } ,{_id: 2 ,host: '192.168.48.153:27018' ,arbiterOnly: true }]};

 接着执行,初始化集群-让配置生效

rs.initiate(cfg)

当你能看到代表成功ok:1,说明配置成功
查看集群状态
rs.status()
MongoDB一共有10种状态,官方将其分为3大类,核心状态(Core States)为三种成员类型对
应的属性(PRIMARY/SECONDARY/ARBITER),还有7种属性,被分为其他状态(Other States)和错误状态( Error States)两类。

 集群测试

通过主节点创建数据库,并添加记录

MongoDB Enterprise test:PRIMARY> use mydb
switched to db mydb
MongoDB Enterprise test:PRIMARY> db.aaa.insert({name: "xxx" })
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise test:PRIMARY> db.aaa.find()
{ "_id" : ObjectId( "63516f0cd47a22dfe875229f" ), "name" : "aaa" }
{ "_id" : ObjectId( "635226db4c844970a4fae002" ), "name" : "xxx" }

 接着在从服务器上,查看数据库信息

 MongoDB Enterprise test:SECONDARY> show dbs

 此时会报错,提示:not master and slaveOk=false。此时我们要设置从服务器可读

# 设置从机可读
db.getMongo().setSecondaryOk()

 此时再次查看数据库信息,发现可以查看

show dbs

如果主服务器down机,则从服务器会变为主服务器。如果主服务器启动,则主服务器恢复之前
的主机身份,从服务器变回从机

 #推出客户端,然后使用shutdown 停止主服务器

MongoDB Enterprise test:PRIMARY> exit
bye
[root @linux -base ~]# mongod -f /usr/local/mongodb4/mongodb-src/conf/mongod
b.conf --shutdown
killing process with pid: 3444
[root @linux -base ~]#

 此时在从机上查看服务器状态

 MongoDB Enterprise test:SECONDARY> rs.status()

 会看到主机不可访问 ,而原来的从机变为了主机

# 此时该服务器可读写
MongoDB Enterprise test:PRIMARY> use mydb2
switched to db mydb2
MongoDB Enterprise test:PRIMARY> db
mydb2
MongoDB Enterprise test:PRIMARY> db.mytest.insert({name: "aaa" })
WriteResult({ "nInserted" : 1 })
MongoDB Enterprise test:PRIMARY>

 将原有的主机启动

[root @linux -base ~]# mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.
about to fork child process, waiting until server is ready for connections.
forked process: 5279
child process started successfully, parent exiting
[root @linux -base ~]# mongo 192.168.206.131 : 27017

 此时发现主从恢复了原有的身份

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值