MongoDB 复制集搭建

### 1.进入安装目录 使用`mkdir`和`touch`命令创建存放数据的目录和文件 ``` mkdir data #创建存放数据的目录 cd data #进入该目录 mkdir db #创建存放数据的目录 mkdir logs #创建日志目录 mkdir etc #创建配置文件目录 mkdif db/{0,1,2,csvr} #创建存放数据库目录 touch logs/mongod{0,1,2}.log #创建日志文件 touch etc/mongod{0,1,2}.conf #创建配置文件 touch logs/csvr.log #创建分片集群日志文件 touch etc/csvr.conf #创建分配集群配置文件 touch etc/mongos.conf #创建mongos路由配置文件 ``` 使用`chmod`命令修改etc目录权限为777,否则不能编辑文件。 ``` chmod 777 etc ``` ### 2.修改配置文件(初次安装MongoDB时修改) 使用`vim`命令编辑配置文件。 可以使用`echo $PATH`命令查看环境变量路径 ``` vim /etc/profile Export MONGODB_HOME=/root/mongodb Export PATH=$PATH:$MONGODB_HOME: [echo$PATH 显示的路径] ``` 使用`source /etc/profile`命令,让其生效。 ### 3.编辑配置文件 >d第一次创建不要加鉴权 ``` vim etc/mongod0.conf #编辑复制集群配置文件 systemLog: destination: file #指定一个文件或syslog,指定文件必须指定path变量 path: /root/mongodb/data/logs/mongod0.log #发送所有的诊断信息日志 logAppend: true #是否追加日志 storage: journal: enabled: true #记录日志防止数据丢失 dbPath: “/root/mongodb/data/db/0” #指定数据文件的路径 processManagement: fork: true #设置守护进程在后台运行 net: bindIp: 0.0.0.0 #指定MongoDB实例绑定的ip,多个ip可使用逗号分隔 port: 27016 #mongodb实例监听的端口 replication: replSetName: ”rs0” # 复制集名称 sharding: clusterRole: shardsvr #指定分片集的MongoDB角色. ``` 更多参数请参考:++https://my.oschina.net/u/1449160/blog/273283++ 编辑完成后,使用`:wq`命令保存退出。 ### 4.启动 使用`mongod-f`命令执行。 ``` /root/mongodb/bin/mongod -f /root/mongodb/data/etc/mongod0.conf ``` >若出现以下错误,是服务器缺少依赖,莫慌。 >i **不同配置的服务器实例,初始化时的依赖都不太一样,根据需要自行安装对应的依赖就可以。** >w **不同配置的服务器实例,初始化时的依赖都不太一样,根据需要自行安装对应的依赖就可以。** >s **不同配置的服务器实例,初始化时的依赖都不太一样,根据需要自行安装对应的依赖就可以。** >d **不同配置的服务器实例,初始化时的依赖都不太一样,根据需要自行安装对应的依赖就可以。** ``` mongod: error while loading shared libraries: libcrypto.so.10: cannot open shared object file: No such file or directory ``` 使用`wget`下载依赖包。 ``` wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm ``` 使用`dnf`安装依赖。 ``` dnf -y install compat-openssl10-1.0.2o-3.el8.x86_64.rpm ``` ### 5.初始化复制集群 然后进入该节点,使用`rs.initiate`命令,初始化复制集。 ``` Rs.initiate({ _id:”rs0”, Members:[ {_id: 0, host: “101.200.85.138:27016”}, {_id: 1, host: “47.98.208.3:27016”}, {_id: 2, host: “8.129.36.127:27016”} ...//有多少个节点此处添加多少个。 ] }); ``` **在其他服务器上面同样执行以上操作。** 同一复制集内`replSetName`必须一致,端口必须一致,文件存放的路径,也尽量一致,避免各服务器之间路径不一致导致后期维护不便。 ### 6.测试 以上述配置文件为例,可以进入27016端口,创建库和集合,进行测试。 ``` /root/mongodb/bin/mongo -port 27016 show dbs #显示所有数据库 show colections #显示所有集合 use aoo #指定库 db.bar.insert({a:1}); #向bar集合中插入一条数据。 db.bar.find(); #查看bar集合中的数据。 ``` 此时可切换到另外服务器中,查看数据是否同步。 ``` rs.secondaryOk(); 使#用此命令运行查询操作。**此命令已过时,我也忘了具体是啥, 使用这个个命令时会提示过时,并显示新命令。** use aoo db.bar.find(); ``` ### 至此,1个简单的复制集已经搭建完毕。 >i复制集,最少需要三台服务器。做1主2从。且,这三台服务器最好不要在同一地区的同一机房。避免整个机房发生故障时,导致服务下线,造成损失。 > >生产环境下。最低集群应该使用5台服务器,做高可用和容灾准备。做221分布。2作为主数据中心,1作为容灾备份数据。当其中1个数据中心发生故障时,剩余3台也可作为最小单元运作。