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台也可作为最小单元运作。