MongoDB集群搭建
MongoDB集群简介
Replica Set 集群搭建
master: 主节点,负责读写查询数据salve :从节点,负责备份数据,可以设置为提供查询数据的功能,从而减少主节点的查询压力arbite :仲裁节点,监控功能,当主节点挂了,会指定某个从节点去代替主节点
前置准备
实现步骤:
在主节点服务器上安装MongoDB环境
先配置好ip地址,测试网络是否连通
先在服务器上安装MongoDB依赖的插件net-snmp
yum install net-snmp
将MongoDB的安装包上传到服务器上,并解压到特定目录 /usr/local/mongodb4
# 创建 /usr/local/mongodb4 目录mkdir /usr/local/mongodb4# 解压 mongodb 到上面的目录tar -zxvf mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 .tgz -C /usr/local/mongodb4
因为解压后,MongoDB的源码目录名字比较长,操作不方便,可以做个重命名
mv /usr/local/mongodb4/mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 /usr/local/mongodb4/mongodb-src
创建MongoDB运行时需要使用的数据目录和日志文件
# 如果是非管理员账号,可以使用 sudo 执行sudo mkdir -p / var /lib/mongodbsudo mkdir -p / var /log/mongodbsudo chown `whoami` / var /lib/mongodb # 设置权限sudo chown `whoami` / var /log/mongodb # 设置权限
在MongoDB的源码目录中,创建conf配置目录和配置文件
mkdir /usr/local/mongodb4/mongodb-src/confvi /usr/local/mongodb4/mongodb-src/conf/mongodb.conf
配置内容
#master 配置# 数据存放路径dbpath=/ var /lib/mongodb# 日志存放路径logpath=/ var /log/mongodb/mongodb.log# 以追加的方式记录日志logappend= true#mongodb 进程所绑定的 ip 地址bind_ip= 192.168.48.151# 端口号port= 27017# 以后台方式运行进程fork= true# 集群名称replSet=test
将mongodb的命令配置在全局环境变量中,方便命令调用
# 编辑 /etc/profile 文件 , 添加路径配置export PATH=/usr/local/mongodb4/mongodb-src/bin:$PATH# 执行 profile 文件 , 让配置生效source /etc/profile
启动服务器端程序,启动客户端程序,测试服务器是否正常
# 启动服务器端进程mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动mongo 192.168.206.131 : 27017
使用主节点虚拟机克隆出来从节点服务器
# 打开从节点的 mongodb 配置文件vi /usr/local/mongodb4/mongodb-src/conf/mongodb.conf
修改其中的ip配置,并保存
#master 配置# 数据存放路径dbpath=/ var /lib/mongodb# 日志存放路径
# 以追加的方式记录日志logappend= true#mongodb 进程所绑定的 ip 地址bind_ip= 192.168.48.152# 端口号port= 27017# 以后台方式运行进程fork= true# 集群名称replSet=test
启动MongoDB的服务器和客户端,操作与主节点服务器类似,连接的ip要改变
# 启动服务器端进程mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动mongo 192.168.206132 : 27017
使用主节点虚拟机克隆出来仲裁节点服务器
修改仲裁节点服务器的ip地址: 192.168.206.133
修改从节点上mongodb的配置文件,将其中的ip地址,改为规划的ip地址
# 启动服务器端进程mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf# 启动客户端进程连接服务器,注意此时要指定 ip 和端口号启动mongo 192.168.48.153 : 27018
搭建集群
mongo 192.168.48.151 : 27017
cfg={_id: "test" , members: [ {_id: 0 ,host: '192.168.48.151:27017' ,priority: 2 },{_id: 1 ,host: '192.168.48.152:27017' ,priority: 1 } ,{_id: 2 ,host: '192.168.48.153:27018' ,arbiterOnly: true }]};
接着执行,初始化集群-让配置生效
rs.initiate(cfg)
rs.status()
集群测试
通过主节点创建数据库,并添加记录
MongoDB Enterprise test:PRIMARY> use mydbswitched to db mydbMongoDB Enterprise test:PRIMARY> db.aaa.insert({name: "xxx" })WriteResult({ "nInserted" : 1 })MongoDB Enterprise test:PRIMARY> db.aaa.find(){ "_id" : ObjectId( "63516f0cd47a22dfe875229f" ), "name" : "aaa" }{ "_id" : ObjectId( "635226db4c844970a4fae002" ), "name" : "xxx" }
接着在从服务器上,查看数据库信息
MongoDB Enterprise test:SECONDARY> show dbs
此时会报错,提示:not master and slaveOk=false。此时我们要设置从服务器可读
# 设置从机可读db.getMongo().setSecondaryOk()
此时再次查看数据库信息,发现可以查看
show dbs
#推出客户端,然后使用shutdown 停止主服务器
MongoDB Enterprise test:PRIMARY> exitbye[root @linux -base ~]# mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.conf --shutdownkilling process with pid: 3444[root @linux -base ~]#
此时在从机上查看服务器状态
MongoDB Enterprise test:SECONDARY> rs.status()
会看到主机不可访问 ,而原来的从机变为了主机
# 此时该服务器可读写MongoDB Enterprise test:PRIMARY> use mydb2switched to db mydb2MongoDB Enterprise test:PRIMARY> dbmydb2MongoDB Enterprise test:PRIMARY> db.mytest.insert({name: "aaa" })WriteResult({ "nInserted" : 1 })MongoDB Enterprise test:PRIMARY>
将原有的主机启动
[root @linux -base ~]# mongod -f /usr/local/mongodb4/mongodb-src/conf/mongodb.about to fork child process, waiting until server is ready for connections.forked process: 5279child process started successfully, parent exiting[root @linux -base ~]# mongo 192.168.206.131 : 27017
此时发现主从恢复了原有的身份