其他分享
首页 > 其他分享> > 2.手动部署一个分片集群

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

作者:互联网

  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