一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础
下面就是我本地测试的环境,三台虚拟机作为mongodb存储的复制集
01.172.25.128.53 02.172.25.128.55 03.172.25.128.60
首先关闭selinux
01.sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config02.setenforce 0
停止防火墙并取消开机启动
01.systemctl stop firewalld.service02.systemctl disable firewalld.service
在三台机器上分别创建目录,下载mongodb包
配置服务数据存放目录
01.mkdir -p /data/mongodb
下载mongdb包并解压
01.wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz02.tar -zxvf mongodb-linux-x86_64-4.0.9.tgz03.mv mongodb-linux-x86_64-4.0.9 /usr/local/mongodb
启动配置文件存放的文件夹
01.mkdir -p /usr/local/mongodb/conf
配置服务日志存放目录
01.mkdir -p /usr/local/mongodb/log02.vi /etc/profile03.#最后一行添加04.export PATH=$PATH:/usr/local/mongodb/bin
三台服务器上都要执行
分片1服务数据存放目录和日志存放文件
01.mkdir -p /data/mongodb/shard102.touch /usr/local/mongodb/log/shard1.log
分片2服务数据存放目录和日志存放文件
01.mkdir -p /data/mongodb/shard202.touch /usr/local/mongodb/log/shard2.log
分片3服务数据存放目录和日志存放文件
01.mkdir -p /data/mongodb/shard302.touch /usr/local/mongodb/log/shard3.log
分别在三台服务器上配置mongodb配置文件,vi /usr/local/mongodb/conf/config.conf,内容如下
01.dbpath=/data/mongodb02.logpath=/usr/local/mongodb/log/config.log03.port=2701804.logappend=true05.fork=true06.maxConns=500007.#复制集名称08.replSet=shard09.#置参数为true10.configsvr=true11.#允许任意机器连接12.bind_ip=0.0.0.0
分别启动三台服务器的配置服务
01.mongod -f /usr/local/mongodb/conf/config.conf
连接mongo,只需在任意一台机器执行即可
01.mongo --port 27018
初始化复制集
01.rs.initiate({_id:"shard",members:[{_id:0,host:"172.25.128.53:27018"},{_id:1,host:"172.25.128.55:27018"},{_id:2,host:"172.25.128.60:27018"}]})
其中_id:"shard"是上面config.conf配置文件里的复制集名称
查看状态
01.rs.status()
等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY
分片服务部署(3台服务器执行相同操作)
1.在/usr/local/mongodb/conf目录创建shard1.conf、shard2.conf、shard3.conf,内容如下
01.dbpath=/data/mongodb/shard1 #其他2个分片对应修改为shard2、shard3文件夹02.logpath=/usr/local/mongodb/log/shard1.log #其他2个分片对应修改为shard2.log、shard3.log03.port=27001 #其他2个分片对应修改为27002、2700304.logappend=true05.fork=true06.maxConns=500007.storageEngine=mmapv108.shardsvr=true09.replSet=shard1 #其他2个分片对应修改为shard2、shard310.bind_ip=0.0.0.0
端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf
还有数据存放目录、日志文件这几个地方都需要对应修改。
在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务
01.mongod -f /usr/local/mongodb/conf/shard1.conf02.mongod -f /usr/local/mongodb/conf/shard2.conf03.mongod -f /usr/local/mongodb/conf/shard3.conf
2.将分片配置为复制集,连接mongo,只需在任意一台机器执行即可
01.mongo --port 27001
这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可
切换数据库:
01.use admin
初始化复制集:
01.rs.initiate({_id:"shard1",members:[{_id:0,host:"172.25.128.53:27001"},{_id:1,host:"172.25.128.55:27001"},{_id:2,host:"172.25.128.60:27001"}]})
以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集
登陆27002端口操作
01.mongo --port 2700202.use admin03.rs.initiate({_id:"shard2",members:[{_id:0,host:"172.25.128.53:27002"},{_id:1,host:"172.25.128.55:27002"},{_id:2,host:"172.25.128.60:27002"}]})
登陆27003端口操作
01.mongo --port 2700302.use admin03.rs.initiate({_id:"shard3",members:[{_id:0,host:"172.25.128.53:27003"},{_id:1,host:"172.25.128.55:27003"},{_id:2,host:"172.25.128.60:27003"}]})
注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式
路由服务部署(3台服务器执行相同操作)
在/usr/local/mongodb/conf目录创建mongos.conf,vi /usr/local/mongodb/conf/mongos.conf内容如下
01.systemLog:02. destination: file03. logAppend: true04. path: /usr/local/mongodb/log/mongos.log05.processManagement:06. fork: true07.# pidFilePath: /var/log/mongodb/mongos.pid08.# network interfaces09.net:10. port: 2701711. bindIp: 0.0.0.012.sharding:13. configDB: shard/172.25.128.53:27018,172.25.128.53:27018,172.25.128.53:27018
分别在三台服务器启动mongos
01.mongos -f /usr/local/mongodb/conf/mongos.conf
启动分片功能
连接mongo
01.mongo
切换数据库
01.use admin
添加分片,只需在一台机器执行即可
01.sh.addShard("shard1/172.25.128.53:27001,172.25.128.55:27001,172.25.128.60:27001")02.sh.addShard("shard2/172.25.128.53:27002,172.25.128.55:27002,172.25.128.60:27002")03.sh.addShard("shard3/172.25.128.53:27003,172.25.128.55:27003,172.25.128.60:27003")
查看集群状态
01.sh.status()
设置分片chunk大小
01.use config02.db.settings.save({"_id":"chunksize","value":1})
模拟写入数据
01.use sulao02.for(i=1;i<=50000;i++){db.user.insert({"id":i,"name":"sulao_"+i})}
启用数据库分片
01.sh.enableSharding("sulao")
创建索引,对表进行分片
01.db.user.createIndex({"id":1})02.sh.shardCollection("sulao.user",{"id":1})
查看分片状态
01.sh.status() # 查看分片情况
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/671
相关推荐
- centos7安装CUDA Tookit+CUDA Samples+NCCL+OpenMPI
- centos7添加交换分区swap
- centos7升级systemd并切换cgroup v1到cgroup v2
- centos7下程序运行提示报错version `GLIBCXX_3.4.20` not found
- centos7二进制部署prometheus+alertmanager+grafana
- centos7使用chrony配置时间同步
- centos7使用二进制部署TLS加密etcd集群
- centos7二进制部署etcd集群
- centos7备份和恢复单机etcd数据
- centos7二进制部署单机etcd
评论列表