MongoDB高可用集群搭建
MongoDB高可用集群搭建
一、环境准备
启动时需要使用非root用户,所有创建一个mongo用户:
1useradd mongo
2
3# 为mongo用户添加密码:
4echo 123456 | passwd --stdin mongo
5
6# 将mongo添加到sudoers
7echo "mongo ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/mongo
8chmod 0440 /etc/sudoers.d/mongo
9#解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行
10sudo sed -i 's/Defaults requiretty/Defaults:chiansun !requiretty/' /etc/sudoers
创建一个mongo目录
1mkdir /mongo
2
3# 给相应的目录添加权限
4chown -R mongo:mongo /mongo
配置mongo的yum源
1cat >> /etc/yum.repos.d/mongodb-org-4.0.repo << EOF
2[mongodb-org-4.0]
3name=MongoDB Repository
4baseurl=http://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/
5gpgcheck=1
6enabled=1
7gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
8EOF
关闭selinux
1sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2setenforce 0
关闭防火墙
1systemctl disable firewalld
2systemctl stop firewalld
二、主机规划
1192.168.33.14 node-1
2192.168.33.15 node-2
3192.168.33.16 node-3
4
5node-1 node-2 node-3
6mongos mongos mongos 路由服务器,寻址
7config config config 配置服务器,保存配置
8shard1主 shard2主 shard3主 分片:保存数据
9shard2从 shard3从 shard1从 副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)
10shard3从 shard1从 shard2从
三、安装部署
分别在多台机器上使用mongo用户登录
1sudo yum install -y mongodb-org
分别在多台机器上创建mongo config server对应的目录
1mkdir -p /mongo/config/{log,data,run}
分别在多台机器上修改config server的配置文件
1cat > /mongo/config/mongod.conf << EOF
2systemLog:
3 destination: file
4 logAppend: true
5 path: /mongo/config/log/mongod.log
6storage:
7 dbPath: /mongo/config/data
8 journal:
9 enabled: true
10processManagement:
11 fork: true
12 pidFilePath: /mongo/config/run/mongod.pid
13net:
14 port: 27100
15 bindIp: 0.0.0.0
16replication:
17 replSetName: config
18sharding:
19 clusterRole: configsvr
20EOF
启动所有的mongo config server服务
1mongod --config /mongo/config/mongod.conf
登录任意一台配置服务器,初始化配置副本集
1mongo --port 27100
创建配置 id名要和replSetName名保持一致
1config = {
2 _id : "config",
3 members : [
4 {_id : 0, host : "192.168.33.14:27100" },
5 {_id : 1, host : "192.168.33.15:27100" },
6 {_id : 2, host : "192.168.33.16:27100" }
7 ]
8}
初始化副本集配置
1rs.initiate(config)
查看分区状态
1rs.status()
注意:其中,"_id" : “config"应与配置文件中配置的 replicaction.replSetName 一致,“members” 中的 “host” 为三个节点的ip和port
1.配置第一个分片和副本集
修改mongo shard1 server的配置文件
1mkdir -p /mongo/shard1/{log,data,run}
分别在多台机器上修改shard1 server的配置文件
1cat > /mongo/shard1/mongod.conf << EOF
2systemLog:
3 destination: file
4 logAppend: true
5 path: /mongo/shard1/log/mongod.log
6storage:
7 dbPath: /mongo/shard1/data
8 journal:
9 enabled: true
10processManagement:
11 fork: true
12 pidFilePath: /mongo/shard1/run/mongod.pid
13net:
14 port: 27001
15 bindIp: 0.0.0.0
16replication:
17 replSetName: shard1
18sharding:
19 clusterRole: shardsvr
20EOF
启动所有的shard1 server
1mongod --config /mongo/shard1/mongod.conf
登陆任意一台shard1服务器,初始化副本集
1mongo --port 27001
使用admin数据库
1use admin
定义副本集配置
1config = {
2 _id : "shard1",
3 members : [
4 {_id : 0, host : "192.168.33.14:27001" },
5 {_id : 1, host : "192.168.33.15:27001" },
6 {_id : 2, host : "192.168.33.16:27001" }
7 ]
8}
初始化副本集配置
1rs.initiate(config);
查看分区状态
1rs.status()
2.配置第二个分片和副本集
修改mongo shard2 server的配置文件
1mkdir -p /mongo/shard2/{log,data,run}
分别在多台机器上修改shard2 server的配置文件
1cat > /mongo/shard2/mongod.conf << EOF
2systemLog:
3 destination: file
4 logAppend: true
5 path: /mongo/shard2/log/mongod.log
6storage:
7 dbPath: /mongo/shard2/data
8 journal:
9 enabled: true
10processManagement:
11 fork: true
12 pidFilePath: /mongo/shard2/run/mongod.pid
13net:
14 port: 27002
15 bindIp: 0.0.0.0
16replication:
17 replSetName: shard2
18sharding:
19 clusterRole: shardsvr
20EOF
启动所有的shard2 server
1mongod --config /mongo/shard2/mongod.conf
登陆任意一台shard2服务器,初始化副本集
1mongo --port 27002
使用admin数据库
1use admin
定义副本集配置
1config = {
2 _id : "shard2",
3 members : [
4 {_id : 0, host : "192.168.33.14:27002" },
5 {_id : 1, host : "192.168.33.15:27002" },
6 {_id : 2, host : "192.168.33.16:27002" }
7 ]
8}
初始化副本集配置
1rs.initiate(config)
查看分区状态
1rs.status()
3.配置第三个分片和副本集
修改mongo shard3 server的配置文件
1mkdir -p /mongo/shard3/{log,data,run}
分别在多台机器上修改shard3 server的配置文件
1cat > /mongo/shard3/mongod.conf << EOF
2systemLog:
3 destination: file
4 logAppend: true
5 path: /mongo/shard3/log/mongod.log
6storage:
7 dbPath: /mongo/shard3/data
8 journal:
9 enabled: true
10processManagement:
11 fork: true
12 pidFilePath: /mongo/shard3/run/mongod.pid
13net:
14 port: 27003
15 bindIp: 0.0.0.0
16replication:
17 replSetName: shard3
18sharding:
19 clusterRole: shardsvr
20EOF
启动所有的shard3 server
1mongod --config /mongo/shard3/mongod.conf
登陆任意一台的shard3服务器,初始化副本集
1mongo --port 27003
使用admin数据库
1use admin
定义副本集配置
1config = {
2 _id : "shard3",
3 members : [
4 {_id : 0, host : "192.168.33.14:27003" },
5 {_id : 1, host : "192.168.33.15:27003" },
6 {_id : 2, host : "192.168.33.16:27003" }
7 ]
8}
初始化副本集配置
1rs.initiate(config)
查看分区状态
1rs.status()
4.配置mongos路由器
1##### 注意:启动mongos是守候进程是因为/mongo/mongos/mongod.conf缺少了fork: true这个配置#######
2------------------------------------------------------------------------------------------
3
4mkdir -p /mongo/mongos/{log,data,run}
5
6# 添加mongs的配置文件
7cat > /mongo/mongos/mongod.conf << EOF
8systemLog:
9 destination: file
10 logAppend: true
11 path: /mongo/mongos/log/mongod.log
12processManagement:
13 fork: true
14 pidFilePath: /mongo/mongos/run/mongod.pid
15net:
16 port: 27200
17 bindIp: 0.0.0.0
18sharding:
19 configDB: config/192.168.33.14:27100,192.168.33.15:27100,192.168.33.16:27100
20EOF
21
22# 注意,这里configDB后面的config要与配置服务器的_id保持一致
23
24# 启动路由服务器
25mongos --config /mongo/mongos/mongod.conf
26
27# 登录其中的一台路由节点,手动启用分片
28mongo --port 27200
29
30# 添加分片到mongos
31sh.addShard("shard1/192.168.33.14:27001,192.168.33.15:27001,192.168.33.16:27001")
32sh.addShard("shard2/192.168.33.15:27002,192.168.33.16:27002,192.168.33.14:27002")
33sh.addShard("shard3/192.168.33.16:27003,192.168.33.14:27003,192.168.33.15:27003")
34
35# 设置slave可读
36rs.slaveOk()
5.常用操作
1#没有分片是因为没有开启分片规则
2
3# 对bike这个数据库开启分片功能
4use admin
5db.runCommand({"enablesharding":"bike"})
6
7# 对bike数据库下的users集合按id的hash进行分片
8db.runCommand({"shardcollection":"bike.users","key":{_id:'hashed'}})
9
10# 启动所有的config server
11mongod --config /mongo/config/mongod.conf
12
13# 启动所有的shard1
14mongod --config /mongo/shard1/mongod.conf
15
16# 启动所有的shard2
17mongod --config /mongo/shard2/mongod.conf
18
19# 启动所有的shard3
20mongod --config /mongo/shard3/mongod.conf
21
22# 启动所有的mongos
23mongos --config /mongo/mongos/mongod.conf
24
25# 关闭服务
26mongod --shutdown --dbpath /mongo/shard3/data
27mongod --shutdown --dbpath /mongo/shard2/data
28mongod --shutdown --dbpath /mongo/shard1/data
29mongod --shutdown --dbpath /mongo/config/data
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/2018-10-13-mongo-ha-cluster/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。