场景
项目正常进行中,给我两台服务器让我做写脚本做keepalived热备,mongo副本集五个节点,想到这里那不是轻轻松松有手就行。但是实际上手后因为各种因素的影响(实则不愿意掏钱给我再来一台服务器做数据库热备)所以就有了以下问题:
问题
如果做keepalived热备那么数据存放问题设备限制,只有两台服务器。而且要求mongo数据库五个节点那么就要解决mongo主备切换问题??
脑回路
刚刚开始上手则一顿操作猛如虎热备脚本写的一套行云流水,但是遇到了一条硬限制领导说必须要五个节点,这不得不从mongo副本集机制说起,不采用仲裁的情况下,副本集节点数为单数那么就有了1Primary 4Secondary 的要求。我就决定把主服务器上配置两个节点备服务器上配置三个节点如期配置完毕后,那么问题来了如果我备服务器不启用主上只有两个节点照样选举不出Primary。这不就GG了,如果主上三个节点那么备上就两个主挂了备也只剩两个节点也没有做到热备,还是照样GG。
解决方法
臣妾做不到啊!!!
正常外置数据库再加两台服务器专门做数据库的热备就没那么多事了,或者有一个节点单独出来不能成为Primary主这样的话集群则变成了如下:
主两个节点从两个节点其他一个节点设置硬性条件不能成为主(权重设置0即可)
如图:
于是跟领导说名了情况(就两台设备不行不行这点服务器我很难给你办事啊)哈哈哈内心想法
好家伙领导一开嘴当时就后悔这么说了
领导为了节省成本就考虑,使用本来的产品中有一台Windows系统的客户端机器让我把一个mongo节点安装在Windows上配置副本集
踩坑
我去mongo官方下载了mongo一套傻瓜式安装下一步下一步完成很好此的内心就是(就这????)
坑来了我发现副本集建立不成功报错内容就是字面意思版本不兼容,这不对症下药吗,我就再去官网找了对应的安装包。
我用的MongoDB server version: 4.0.21 官网只有zip的安装包却没有msi的傻瓜安装方式。
大坑总结:
1:建立副本集需要副本集成员使用的mongo版本相同
2:zip安装方式缺少配置文件
一顿操作猛如虎
Windows MongoDB zip配置安装
第一步:下载mondodb的zip包常见版本可能会有msi安装包msi引导形安装方式
第二步:解压将压缩包解压至所要安装目录,建议创建D盘创建目录Mongo用于存放
第三步:给mongodb手动一个配置文件,配置文件名为mongod.cfg,以及对应的data数据目录,log/mongo.log日志文件,配置端口号以及允许访问的IP地址
内容如下:
storage:
dbPath: D:\Mongo\data
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: D:\Mongo\log\mongo.log
net:
port: 27017
bindIp: 0.0.0.0
#这里有需要设置副本集名称以及对应的key需要添加
#副本集名称需要一致
security:
keyFile: D:\Mongo\keyfile
replication:
replSetName: xxxxxx #副本集名称
第四步:cmd命令行(建议管理员模式打开)首次启动mongo
注意需要d: 切换到D盘再cd到bin目录下因为bin目录下才有mongod.exe可执行文件要么就添加环境变量嫌麻烦选前者
mongod -config d:\Mongo\bin\mongod.cfg
#浏览器localhost:27017显示如下信息表示启动成功,关闭cmd也会关闭服务
#It looks like you are trying to access MongoDB over HTTP on the native driver port.
第五步:再次启动mongo
需要执行命令,不要关闭cmd另起一个即可执行mongo命令
mongod –dbpath d:\Mongo\data
第六步:安装到Windows服务中
每次进入Mongo都太麻烦所以可以把mongodb的服务安装到windows service进程中
mongod –config d:\Mongo\bin\mongod.cfg –install
这个时候打开资源管理器进入服务就可以看到mongo的服务以及在Windows Service里面了下次再启动mongodb的时候就可以在任意位置打开命令行输入net start mongodb
就可以了而且这个窗口可以关闭,关闭后mongodb服务仍在启动,可以右键查看属性是否自动,自动表示开机自启