搭建mongo副本集群

一、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" }
   ]
})
### 配置 MongoDB 6.0 副本 #### 安装 MongoDB 软件包仓库 为了确保能够顺利安装最新版本的MongoDB,在Alma Linux上需先配置官方软件源。编辑`/etc/yum.repos.d/mongodb-org-6.0.repo`文件,加入如下内容: ```ini [mongodb-org-6.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/6.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-6.0.asc ``` 此操作允许系统识别并下载来自MongoDB官方网站的安全更新和新版本[^2]。 #### 修改配置文件 对于每个参与副本的节点,应当调整其对应的mongod.conf配置文件中的data、log路径及监听端口参数,以适应实际部署环境的需求。这一步骤至关重要,因为不同的服务器可能有不同的存储位置和服务端口需求[^1]。 #### 初始化副本成员 一旦所有节点都已正确安装并启动了MongoDB实例,则可以通过任一节点执行初始化命令来定义整个群结构。具体做法是在其中一个容器内部运行交互式的shell会话,并提交包含各成员信息的对象给rs.initiate()函数调用: ```javascript use admin; db.auth("admin","your_password"); var config={ "_id":"mongo-rs", "members":[ {"_id":0,"host":"node_ip_address:port"}, {"_id":1,"host":"another_node_ip_address:different_port"} ] }; rs.initiate(config); ``` 注意替换上述代码片段里的IP地址与端口号为真实的网络接口详情;如果存在仲裁者(arbiter),则应为其指定额外属性如`arbiterOnly:true`[^4]。 #### 创建超级用户账户 出于安全考虑,建议尽早建立具有最高权限的角色——即root角色——用于后续管理和维护工作。可以利用下面这段JavaScript语句完成这项任务: ```javascript db.createUser({ user : "admin", pwd : "password_you_set", roles:[{role:"root", db:"admin"}] }) ``` 这里同样要记得更改默认密码字符串为自己设定的一个强健值[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值