部署monggodb副本集
MongoDB有多种高可用性架构可以选择,以下是其中几种常见的高可用性架构:
副本集(Replica Set):副本集是MongoDB中最基本的高可用性架构。它由多个节点组成,其中有一个主节点(Primary),其余节点为从节点(Secondary)。主节点负责处理所有的写操作,从节点用于提供读取操作的负载均衡和容错能力。如果主节点发生故障,副本集会进行自动选举产生新的主节点,以保证系统的可用性。
分片集群(Sharded Cluster):分片集群是一种可扩展性和高可用性的架构。该架构将数据划分为多个分片(Shard),每个分片存储部分数据。每个分片有自己的副本集,以提供高可用性。一个分片集群还包括多个路由节点(Router),它们负责将数据请求路由到正确的分片上,实现负载均衡。
复制集群(Replica Set Cluster):复制集群是一种将多个副本集组合在一起形成的高可用性架构。每个副本集都是独立的,负责存储一部分数据并提供读写能力。复制集群通过在不同的数据中心或服务器上分布副本集来提高系统的容错性和可用性。
部署monggodb三节点副本集
首先修改主机名
192.168.197.136 hostnamectl set-hostname monggodb-1
192.168.197.137 hostnamectl set-hostname monggodb-2
192.168.197.138 hostnamectl set-hostname monggodb-3
下载安装包(三台节点都操作)
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.19.tgz --no-check-certificate
安装monggodb(三台节点都操作)
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.19.tgz
mv mongodb-linux-x86_64-rhel70-5.0.19 /data/mongodb
配置环境变量(三台节点都操作)
vim /etc/profile 最底部添加
MONGODB_HOME=/data/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
source /etc/profile
创建数据库目录(三台节点都操作)
mkdir mongodb/data 数据存储目录
mkdir mongodb/log 日志存储目录
chown tom.tom /data/mongodb -R
三台节点做host解析
vim /etc/hosts
192.168.197.136 monggodb-1
192.168.197.137 monggodb-2
192.168.197.138 monggodb-3
scp /etc/hosts monggodb-2:/etc/hosts
scp /etc/hosts monggodb-3:/etc/hosts
运行monggodb使用root或者普通用户看需求
mongodb-1节点
mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-1 --logappend --fork
mongodb-2节点
mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-2 --logappend --fork
mongodb-3 节点
mongod --replSet monggodb --dbpath /data/mongodb/data/ --logpath /data/mongodb/log/mongod.log --port 27017 --bind_ip monggodb-3 --logappend --fork
启动命令参数
--replSet 是设定副本集的名字
--dbpath 是指定存储目录路径
--logpath 是指定日志文件路径
--port 是指定运行端口
--bind_ip 是monggodb服务监听的ip
--logappend 是将新的日志信息追加到现有的日志文件中(不加的话默认覆盖之前的日志)
--fork 是后台运行的方式启动
Monggodb副本集初始化
在monggodb-1登录客户端
mongo --host monggodb-1 --port 27017
执行副本集初始化命令
rs.initiate()
添加monggodb-2、monggodb-3节点到副本集
rs.add("monggodb-2:27017")
rs.add("monggodb-3:27017")
查看当前副本集所有角色
rs.status().members或者rs.status()
初次添加节点到副本集时有的从节点可能因为网络原因选举另一个从节点当做主节点
在主节点指向异常的时候我们可以使用命令来手动指定主节点
来到节点3执行下面命令
rs.syncFrom("monggodb-1:27017")
可以看到主节点手动指定为节点1了
删除副本集角色的命令
rs.remove("mongodb:27017")
在副本集中添加完角色启动另外两个节点(在各自节点启动)
mongo --host monggodb-2 --port 27017
mongo --host monggodb-3 --port 27017
到这mongodb就部署完成了
在monggodb-3或者-2节点输入rs.status() 可以查看副本集状态
rs.status()回显信息的每个参数的含义:
- set: 副本集的名称。
- date: 运行状态报告生成的时间。
- myState: 代表当前节点的状态。2表示该节点为主节点。
- term: 当前副本集选举的期数。NumberLong(1)表示当前为第1个选举期。
- syncSourceHost: 主节点的地址。在此示例中,主节点为"mongodb-1:27017"。
- syncSourceId: 主节点在副本集中的成员ID。在此示例中,主节点的成员ID为0。
- heartbeatIntervalMillis: 副本集成员之间进行心跳检测的间隔时间(以毫秒为单位)。
- majorityVoteCount: 副本集中需要达成多数意见的成员数量。
- writeMajorityCount: 执行写操作所需的成员数量。
- votingMembersCount: 副本集中有投票权的成员数量。
- writableVotingMembersCount: 副本集中有投票权且可写的成员数量。
- optimes: 包含与操作时间相关的信息。
- lastCommittedOpTime: 最后已提交的操作时间。ts表示时间戳,t表示选举期。
- lastCommittedWallTime: 最后已提交的操作的墙钟时间戳。
- readConcernMajorityOpTime: 在多数态度下进行读取操作的操作时间。
- appliedOpTime: 最后已应用的操作时间。
- durableOpTime: 最后持久化的操作时间。
- lastAppliedWallTime: 最后已应用操作的墙钟时间戳。
- lastDurableWallTime: 最后持久化操作的墙钟时间戳。
- lastStableRecoveryTimestamp: 上次稳定恢复的时间戳。
测试一下当前主节点挂掉后是否会自动选举主节点
ps -ef |grep mongod
kill -9 101886 杀掉monggodb-1节点
来到monggodb-2节点查看当前副本集信息
mongo --host mongodb-2 --port 27017
rs.status()
可以看到mongodb-3被自动选举为主节点,到这副本集就部署完成了