一、mongodb副本集原理及功能
1、特点
高可用,将数据写入时快速复制到另一个独立节点,接受写故障时自动选举一个新的节点替代
数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延时
读写分离:不同类型的压力分别在不同节点上执行
异地容灾:在数据中心故障的时候快速切换到异地
异步复制:通过内部的oplog进行异步复制
raft功能:只负责投票选举功能。
2、结构
一个经典的复制集由3个以上具有投票权的节点组成,包括:
一个主节点(primary): 接受写入操作和选举时投票
两个或多个从节点(secondary):复制主节点上的新数据和选举时投票
arbiter(投票节点)
3、选举策略
1)具备投票权的节点两两互相发送心跳
当5次心跳未收到时判断为节点失联
如果失联的是主节点。从节点会发起选举,选出新的主节点。
如果失联的从节点则不会产生新的选举
选举基于raft一致性算法,选举成功的必要条件是大多数投票节点存活(存活少的话失败)
2)影响选举的因素
整个集群必须有大多数节点存活:被选举为主节点的节点必须:
能够与多数节点建立链接
具有较新的 oplog
具有较高的优先级(如果有配置)
二、搭建mongodb 副本集
1、环境信息
版本: mongodb7.0.0
节点划分:
10.10.180.101 mongo01#主节点
10.10.180.104 mongo02 #副本集1
10.10.180.60 mongo03 #副本集2
2、配置域名解析
cat >>/etc/hosts<<EOF
10.10.180.101 mongo01
10.10.180.104 mongo02
10.10.180.60 mongo03
EOF
3、下载安装 mongodb (三个节点都要装)
#下载依赖包
yum install libcurl openssl xz-libs net-tools gcc-c++ tcl zlib-devel -y
#下载mongodb安装包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.0.tgz
#解压并放到指定目录
tar xf mongodb-linux-x86_64-rhel70-7.0.0.tgz
mv mongodb-linux-x86_64-rhel70-7.0.0 /usr/local/
cd /usr/local/
#软连接
ln -s mongodb-linux-x86_64-rhel70-7.0.0/ mongodb70
#配置环境变量
echo 'export PATH=/usr/local/mongodb70/bin:$PATH' >>/etc/profile
source /etc/profile
#创建用户和目录并授权
mkdir -p /mongo/data/
mkdir -p /mongo/log/
useradd mongod
passwd mongod #密码 mongod
chown -R mongod:mongod /mongo/
#添加配置文件
cat >/etc/mongod.conf<<EOF
storage:
dbPath: /mongo/data
systemLog:
destination: file
path: /mongo/log/mongo.log
logAppend: true
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
replication:
oplogSizeMB: 102400
replSetName: cs01
EOF
#关闭selinux和防火墙
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld.service
systemctl disable firewalld.service
#启动
mongod --config /etc/mongod.conf
#查看是否启动成功
netstat -lntup |grep mongod
4、安装 mongosh (mongo命令在6.0不支持)
#下载安装包并解压到指定目录
wget https://downloads.mongodb.com/compass/mongosh-1.10.6-linux-x64-openssl11.tgz
tar xf mongosh-1.10.6-linux-x64-openssl11.tgz
mv mongosh-1.10.6-linux-x64-openssl11 /usr/local/
cd /usr/local/
#做软连接并添加到环境变量
ln -s mongosh-1.10.6-linux-x64-openssl11/ mongosh
cd mongosh/bin/
chmod +x mongosh
cp mongosh /usr/local/bin/
cp mongosh_crypt_v1.so /usr/local/lib/
ln -s $(pwd)/bin/* /usr/local/bin/
#查看依赖如果不是1.1.1请用下面方案升级到对应版本
openssl version
#安装指定openssl包
wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz --no-check-certificate
mv openssl-1.1.1t.tar.gz /usr/local/src/
cd /usr/local/src/
tar xf openssl-1.1.1t.tar.gz
cd openssl-1.1.1t
#编译
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib-dynamic
make && make install
#备份原来的openssl文件,可通过whereis openssl查询位置,如下:
mv /usr/bin/openssl /usr/bin/openssl.old
#用新的文件替换旧的文件,执行命令如下:
ln -sf /opt/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/src/openssl-1.1.1t/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
ln -s /usr/local/src/openssl-1.1.1t/libssl.so.1.1 /usr/lib64/libssl.so.1.1
#用mongodb链接
mongosh --host mongodb01 --port 28015
5、登录mongo初始化集群
rs.initiate( {
_id : "cs0",
members: [
{ _id: 0, host: "mongo01:27017" },
{ _id: 1, host: "mongo02:27017" },
{ _id: 2, host: "mongo03:27017" }
]
})