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