ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2.手动部署一个分片集群

2022-05-04 15:02:18  阅读:202  来源: 互联网

标签:data 27017 手动 集群 mongos conf 172.16 root 分片


  172.16.40.21 172.16.40.22 172.16.40.23
Mongos      
config      
shard1      
shard2      

 

 

 

 

 

 

 

 

Mongos和config服务器都配置在172.16.40.21上,shard1和shard2分别配置到172.16.40.22和172.16.40.23上面

0.关闭所有服务的的防火墙(这里很重要)

systemctl status firewalld
systemctl stop    firewalld

1.分片shard1配置(172.16.40.22)

  首先shard1本身也是采用的一主两从的复制集结构,这里分别用27017、27018、27019进行区分,以下是其中一个的配置文件 

[root@mongodb02 conf]# cat 27017.conf 
systemLog:
   destination: file
   path: "/data/27017/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/27017/data"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 172.16.40.22
replication:
   replSetName: rs0         //表示该节点所属的复制集名称
sharding:
   clusterRole: shardsvr     //这里表示的是该节点属于那个那个分片

2.分片shard2配置(172.16.40.23)

  分片shard2的配置和shard1的配置大概相同,配置也很类似: 

[root@mongodb03 conf]# cat 27017.conf 
systemLog:
   destination: file
   path: "/data/27017/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/27017/data"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 172.16.40.23
replication:
   replSetName: rs1            //注意这里和上一个分片配置就不一样了
sharding:
   clusterRole: shardsvr
security:
  keyFile /data/keyFile

3.config服务器配置(172.16.40.21)

  这里想要在强调一下:config配置服务器在整个分片集群中相当重要,mongos路由进程会从config配置服务器上同步元数据信息,因此config配置服务器能实现这些元数据信息的持久化。因此这里的config服务器也是主备采用一主两从的复制集结构。 

[root@mongodb01 conf]# cat 27017.conf 
systemLog:
   destination: file
   path: "/data/27017/log/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
   dbPath: "/data/27017/data"
processManagement:
   fork: true
net:
   port: 27017
   bindIp: 172.16.40.21
replication:
   replSetName: rsconfig      //注意这里的复制集名称
sharding:
   clusterRole: configsvr   //注意这里的分片名称
security:
  keyFile /data/keyFile

4.配置mongos路由配置(172.16.40.21)

  mongos是一个轻量级且非持久化的路由进程,轻量级表示它不会保存任何数据库的数据。它将整个分片集群看成一个整体,使分片集群对整个客户端来说都是透明,当客户端发起读/写操作时,由mongos路由进程将该操作路由到具体的分片上。但是为了读/写请求的正确路由,mongos路由进程必须知道整个分片集群上所有数据库的分片情况,即元数据信息。元数据信息是从config配置服务器上同步过来的,每次mongos路由进程启动时都会从config配置服务器上同步元数据信息,但mongos路由进程并非持久化保存这些信息。

  mongos的配置文件: 

[root@mongodb01 conf]# pwd
/mongos/27010/conf
[root@mongodb01 conf]# cat 27010.conf
sharding:
    configDB:    rsconfig/172.16.40.21:27017,172.16.40.21:27018,172.16.40.21:27019           //这里填写的是config服务器中的复制集名称和ip地址
systemLog:
    path:    /mongos/27010/log/mongos.log
    destination:    file
net:
    port:    27010
    bindIp:    172.16.40.21
processManagement: //这里是用后台进程启动
  fork: true
security:
  keyFile: /data/keyFile [root@mongodb01 conf]#

  mongos路由实例本质上也是也是一个路由进程,由于mongos不需要承载具体的业务树,因此不需要给mogos配置数据目录dbPath

  由于mongos路由进程需要先从配置服务器上同步集群中的元数据信息,然后才能利用这些元数据信息进行读/写路由,所有需要配置configDB选项,指向由3台config配置服务器组成的集群集。

5.启动分片集群

  1.在slave1主机上启动分片shard1对应的复制集

  首先启动primary节点对应的mongod实例,语句如下:

[root@mongodb02 bin]# mongod -f /data/27017/conf/27017.conf 
[root@mongodb02 bin]# mongod -f /data/27018/conf/27018.conf 
[root@mongodb02 bin]# mongod -f /data/27019/conf/27019.conf 
[root@mongodb02 bin]# ps -ef|grep mongod
root       1948      1  5 10:12 ?        00:00:03 mongod -f /data/27017/conf/27017.conf
root       2025      1  6 10:12 ?        00:00:01 mongod -f /data/27018/conf/27018.conf
root       2077      1  7 10:12 ?        00:00:01 mongod -f /data/27019/conf/27019.conf
root       2138   1833  0 10:13 pts/1    00:00:00 grep --color=auto mongod

  2.初始化分片shard1对应的复制集:

  打开任意一个mongo客户端,连接primary节点,进行如下操作:

[root@mongodb02 bin]# mongo --port 27107
> rs.initiate()                //这里进行初始化
{
    "info2" : "no configuration specified. Using a default configuration for the set",
    "me" : "mongodb02:27017",
    "ok" : 1
}
rs0:PRIMARY> rs.add("172.16.40.22:27018")           //添加复制集节点1
rs.add("172.16.40.22:27019")               //添加复制集节点2

   最后使用rs.status()查看状态,观察一下输出结果是否有3个节点,其中一个节点是primary节点,另外两个是secondary节点。

  3.初始化分片shard2对应的复制集:

    这里参考一下上面的步骤即可

  4.然后再初始化config服务器的复制集

   这里参考一下上面的步骤即可

  5. 启动并初始化mongos对应的路由实例

[root@mongodb01 conf]# mongos -f /mongos/27010/conf/27010.conf        //启动mongos进程
about to fork child process, waiting until server is ready for connections.
forked process: 3676
child process started successfully, parent exiting

[root@mongodb01 conf]# ps -ef|grep mongo*
root       1956      1  3 10:40 ?        00:01:00 mongod -f /data/27017/conf/27017.conf
root       2360      1  3 10:47 ?        00:00:41 mongod -f /data/27018/conf/27018.conf
root       2450      1  3 10:47 ?        00:00:40 mongod -f /data/27019/conf/27019.conf
root       3676      1  0 11:07 ?        00:00:00 mongos -f /mongos/27010/conf/27010.conf

  6.初始化分片集群

    1.打开任意一个mongo客户端,连接mongos路由实例,命令如下(可以看到提示符已经变了):    

MongoDB shell version v4.4.12
connecting to: mongodb://127.0.0.1:27010/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("42590cb1-4b55-4491-a1a4-96f64335c372") }
MongoDB server version: 4.4.12
---
The server generated these startup warnings when booting: 
        2022-05-03T11:07:21.240+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2022-05-03T11:07:21.240+08:00: You are running this process as the root user, which is not recommended
---
mongos> 

    2.分别将slave1主机和slave2主机中的分片rs0、rs1添加到集群中,语句如下: 

    sh.addShard("rs0/172.16.40.22:27017")
    sh.addShard("rs1/172.16.40.23:27017")

    3.查看最后的状态

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
      "_id" : 1,
      "minCompatibleVersion" : 5,
      "currentVersion" : 6,
      "clusterId" : ObjectId("6271fb5740017b4bb9234448")
  }
  shards:
        {  "_id" : "rs0",  "host" : "rs0/172.16.40.22:27017,172.16.40.22:27018,172.16.40.22:27019",  "state" : 1 }
        {  "_id" : "rs1",  "host" : "rs1/172.16.40.23:27017,172.16.40.23:27018,172.16.40.23:27019",  "state" : 1 }
  active mongoses:
        "4.4.12" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
mongos> 

  这里补充一个keyFile知识,很重要!!!

6.keyfile

  keyfile就是一个记事本,存放了一串字符,它可以当作秘钥,keyfile是用于mongodb集群内部成员认证用的,是一种使用与开发、测试环境的内部认证方式,更高级的的还有x509

  keyfile唯一的要求是6-1024长度内容,集群内部成员中该文件值必须一样才可以。

  生成keyfile

 openssl rand -base64 20 > keyfile             ##这里的20指的是长度。。。
 chmod 400 keyfile                             ##这里是权限

 

  

   

      

  

标签:data,27017,手动,集群,mongos,conf,172.16,root,分片
来源: https://www.cnblogs.com/zmc60/p/16221135.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有