mongodb高可用部署 副本集模式

39 阅读1分钟

部署mongod

参考 juejin.cn/post/756162…

一次启动3台。

配置副本集

参考 juejin.cn/post/756162…

注意其中初始化有些区别

# 进入shell
mongosh


# 查副本集状态
rs.status()


# 创建副本集
rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "192.168.0.1:27017" },
      { _id: 1, host: "192.168.0.2:27017" },
      { _id: 2, host: "192.168.0.3:27017" }
   ]
})


# 连接整体集群,确保是使用primary节点创建用户的
mongosh "mongodb://192.168.0.1:27017,192.168.0.2:27017,192.168.0.3:27017/?replicaSet=rs0"

# 建用户
db.getSiblingDB('admin').createUser({
   user: '数据库用户名',
   pwd: '数据库密码',
   roles: [{ role: 'root', db: 'admin' }]
});


use admin;

show users;

部署mongot

参考 juejin.cn/post/756162…

一次启动3台。

验证

登录每台,查看collection数据。

# 查副本集状态
rs.status()

关于mongot高可用

在 MongoDB 副本集中,mongot(搜索引擎进程)通常与 mongod 部署在同一节点。由于 mongod 只能配置连接一个 mongot 地址,当本地 mongot 故障而 mongod 正常时,该节点会成为搜索服务的“黑洞”,导致用户请求间歇性失败。

为了解决这一单点故障问题,我们整理了以下三种成熟的架构方案。

方案1
通过nginx进行转发,nginx的故障率比mongot的低的多


方案2
基于方案1,增加keepalived,使用vip,实现完全的高可用


方案3
通过脚本,如果发现本机的mongot挂掉,那么就把本机的mongod停掉



以下是方案1 的实现方式

一、配置nginx增加tcp代理,3台机器的27028端口
stream{
   log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
   access_log /var/log/nginx/tcp-access.log proxy;
   open_log_file_cache off;
   include /etc/nginx/conf.d/*.stream;
}


# cat conf.d/90.stream 
upstream tcp_backend {
    # 后端服务地址+端口(可配置多个,默认轮询)
    server 192.168.0.1:27028;
    server 192.168.0.2:27028;
    server 192.168.0.3:27028;
}

# 2. 监听前端端口,转发到后端
server {
    listen 90;  # Nginx 监听的 TCP 端口(外部访问的端口)
    proxy_pass tcp_backend;  # 转发到上面定义的后端池
    # 可选优化配置
    proxy_connect_timeout 10s;  # 连接后端超时时间
    proxy_timeout 300s;         # 连接空闲超时时间
    proxy_buffer_size 4k;       # 代理缓冲区大小
}



二、修改 mongod.conf
例如当前在 192.168.0.1节点
#searchIndexManagementHostAndPort: mongot-service:27028
searchIndexManagementHostAndPort: 192.168.0.1:90
#mongotHost: mongot-service:27028
mongotHost: 192.168.0.1:90

参考

www.mongodb.com/zh-cn/docs/…