使用ansible一键部署MongoDB分片集群
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ansible一键部署MongoDB分片集群相关的知识,希望对你有一定的参考价值。
参考技术AMongodb 部署信息 :
os: centos7.7 x64 配置好NTP,防火墙默认不做任何限制.
mongos部署两个点,config3个点,和3个分片集群(每个分片一主一副一仲裁)
注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点
ansible的hosts文件配置:
环境变量全部都在这里设置,需要都写入到ansible的hosts文件里
变量中
server_1_ip 都设置为主点
server_2_ip 都设置为副点
server_3_ip 都设置为仲裁节点(config server没有仲裁节点,但是也要写,不然mongos的配置文件模板会报错)
这些IP的配置后面在初始化时会用到.
ansible文件夹结构 :
首先是模板文件:
mongod.conf.mongos.j2 mongos的配置文件模板
mongod.conf.normal.j2 shard server和config server的配置文件模板
mongod.service.j2 service文件模板
mongo.key 直接手动生成 ,用户MongoDB集群之间的加密连接,记得权限改为600
passwd.j2 用于配置MongoDB的root用户名密码
执行:
按提示输入服务器密码
包含了系统优化相关设置,注意中间会重启一次让一些系统优化项生效
注意:因为判断逻辑的问题,不要在任何节点同时运行两种服务的主点
执行 :
如果执行有问题建议多检查变量配置
全部完成后可以验证一下集群环境:
登陆分片集群 :
分片的状态显示正常
登陆mongos
可以看到mongos的状态也正常,分片也全部都添加进去. 全部安装至此完成.
一键删除MongoDB安装及相关数据,方便重装...
一键启动整个MongoDB集群
一键停止所有MongoDB集群
以上就是ansible在MongoDB的一键部署脚本,而且附带了对服务器的优化相关配置
mongoDB mongoDB分片集群
mongoDB分片集群介绍
解决数据分片,防止数据丢失
生产环境需要擦用分片+副本集的部署方式
组成部分
- route: 提供入口,不存储数据
- configserver: 存储元数据信息,建议使用副本集
- shardserver: 数据存储服务,存储真正数据, 也许要使用副本集
依赖关系
- 当数据插入时,需要从configsrv知道数据要插入哪个shardsrv分片
- 当用户获取数据时,需要从configsrv知道数据存储在哪个shardsrv分片
集群搭建
- 使用同一份mongodb二进制文件
- 修改对应的配置实现分片集群的搭建
集群资源规划
configserver: 28017,28018,28019 三个端口搭建
route: 27017,27018,27019 三个端口搭建
shardserver: 29017,29018,29019,29020四个端口搭建
configsvr的配置
配置文件
- 28017,28018,28019,28020只需修改配置中的端口和路径即可
systemLog:
destination: file
logAppend: true
path: /data/mongodb/28017/mongodb.log
storage:
dbPath: /data/mongodb/28017/
journal:
enabled: true
processManagement:
fork: true
net:
port: 28017
bindIp: 0.0.0.0
replication:
replSetName: copySet
sharding:
clusterRole: configsvr
启动服务
[root@centos7-node1 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/28017/mongodb.conf
[root@centos7-node2 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/28018/mongodb.conf
[root@centos7-node3 ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/28019/mongodb.conf
配置副本集
[root@centos7-node1 ~]# /usr/local/mongodb/bin/mongo localhost:28017
>config={ _id:"copySet",
configsvr: true,
members: [
{_id:0,host:"192.168.56.11:28017"},
{_id:1,host:"192.168.56.12:28018"},
{_id:2,host:"192.168.56.13:28019"}
]
}
> rs.initiate(config)
> rs.ststus()
router的配置
router是mongodb的入口,不存储任何数据
配置文件
- 修改27017,27018,27019 三个端口搭建即可
systemLog:
destination: file
logAppend: true
path: /data/mongodb/27017/mongodb.log
processManagement:
fork: true
net:
port: 27017
bindIp: 0.0.0.0
sharding:
configDB: copySet/192.168.56.11:28017,192.168.56.12:28018,192.168.56.13:28019
启动服务
mongos 启动
[root@centos7-node1 ~]# /usr/local/mongodb/bin/mongos -f /data/mongodb/27017/mongodb.conf
[root@centos7-node2 ~]# /usr/local/mongodb/bin/mongos -f /data/mongodb/27018/mongodb.conf
[root@centos7-node3 ~]# /usr/local/mongodb/bin/mongos -f /data/mongodb/27019/mongodb.conf
[root@centos7-node2 ~]# /usr/local/mongodb/bin/mongo 127.0.0.1:27018 #测试登录
shardsvr的配置
数据角色
配置文件
29017,29018,29019,29020四个端口搭建即可
数据角色
29017、29018数据角色data1
29019、29020数据角色data2
systemLog:
destination: file
logAppend: true
path: /data/mongodb/29017/mongodb.log
storage:
dbPath: /data/mongodb/29017/
journal:
enabled: true
processManagement:
fork: true
net:
port: 29017
bindIp: 0.0.0.0
replication:
replSetName: data1
sharding:
clusterRole: shardsvr
systemLog:
destination: file
logAppend: true
path: /data/mongodb/29019/mongodb.log
storage:
dbPath: /data/mongodb/29019/
journal:
enabled: true
processManagement:
fork: true
net:
port: 29019
bindIp: 0.0.0.0
replication:
replSetName: data2
sharding:
clusterRole: shardsvr
服务启动
/usr/local/mongodb/bin/mongod -f /data/mongodb/29017/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb/29018/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb/29019/mongodb.conf
/usr/local/mongodb/bin/mongod -f /data/mongodb/29020/mongodb.conf
29017#### 配置
> config = {
"_id" : "data1",
"members" : [
{
"_id" : 0,
"host" : "192.168.56.11:29017"
},
{
"_id" : 1,
"host" : "192.168.56.12:29018"
}
]
}
> rs.initiate(config)
29019#### 配置
{
"_id" : "data2",
"members" : [
{
"_id" : 0,
"host" : "192.168.56.13:29019"
},
{
"_id" : 1,
"host" : "192.168.56.14:29020"
}
]
}
> rs.initiate(config)
mongodb分片的使用
添加数据分片到集群中
- 注意要在router集群节点上操作
[root@centos7-node1 ~]# /usr/local/mongodb/bin/mongo 127.0.0.1:27017
mongos> sh.status() #状态查询
mongos> sh.addShard("data1/192.168.56.11:29017,192.168.56.12:29018") #添加数据分片1
mongos> sh.addShard("data2/192.168.56.13:29019,192.168.56.14:29020") #添加数据分片2
- 数据操作都是在router上的
mongos> use test
mongos> for(i=1;i<1000;i++){
... db.myuser.insert({name:"myuser"+i,age:i})
... }
mongos> sh.status() #可以查看数据存储到哪个数据分片上了
mongos> db.dropDatabase() #删除数据
- 针对某个数据库的collection使用hash分片存储,分片存储就会把同一个collection分配两个数据角色
- 这样会将数据分配到两个数据分片上
mongos> use admin
mongos> db.runCommand({enablesharding:"test"})
mongos> db.runCommand({shardcollection:"test.myuser",key:{_id:"hashed"}})
mongos> use test #写入数据
mongos> for(i=1;i<=1000;i++){
... db.myuser.insert({name:"myuser"+i,age:i})
... }
WriteResult({ "nInserted" : 1 })
mongos> db.myuser.count()
1000
注意
- 数据分片要是挂掉的话会丢数据
- 要开启数据库的分片
- router和configsvr挂掉一台对集群无影响
以上是关于使用ansible一键部署MongoDB分片集群的主要内容,如果未能解决你的问题,请参考以下文章