``` mkdir -p /data/mongodb/conf mkdir -p /data/mongodb/mongos/log mkdir -p /data/mongodb/config/data mkdir -p /data/mongodb/config/log mkdir -p /data/mongodb/shard1/data mkdir -p /data/mongodb/shard1/log mkdir -p /data/mongodb/shard2/data mkdir -p /data/mongodb/shard2/log mkdir -p /data/mongodb/shard3/data mkdir -p /data/mongodb/shard3/log ``` 在node1中生成key文件,然后同步到其它节点: ``` openssl rand -base64 756 > /data/mongodb/conf/keyfile ``` Config Server配置: ``` cat > /data/mongodb/conf/config.conf << EOF # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: dbPath: /data/mongodb/config/data directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /data/mongodb/config/log/configsrv.log verbosity: 0 # network interfaces net: port: 27011 ipv6: false bindIpAll: true #bindIp: # replica set options replication: replSetName: replicaset #enableMajorityReadConcern: true # sharding options sharding: clusterRole: configsvr # process management options processManagement: fork: false pidFilePath: /data/mongodb/config/log/configsrv.pid # set parameter options setParameter: enableLocalhostAuthBypass: true # security options security: #authorization: enabled authorization: disabled #clusterAuthMode: keyFile #keyFile: /data/mongodb/conf/keyfile EOF ``` 在3个节点中分配启动3个config Server: ``` /usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongod -f /data/mongodb/conf/config.conf ``` 这里使用supervisor启动: ``` yum install supervisor -y sed -i 's/minfds=1024/minfds=102400/g;s/minprocs=200/minprocs=65535/g' /etc/supervisord.conf systemctl enable supervisord systemctl start supervisord cat > /etc/supervisord.d/configsvr.ini <<EOF [program:configsvr] command=/usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongod -f /data/mongodb/conf/config.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/configsvr.stdout.log stderr_logfile=/var/log/supervisor/configsvr.stderr.log EOF supervisorctl update ``` 下载安装mongosh: ``` curl -O https://downloads.mongodb.com/compass/mongosh-2.3.5-linux-x64.tgz tar -zxvf mongosh-2.3.5-linux-x64.tgz -C /usr/local/ export PATH=/usr/local/mongosh-2.3.5-linux-x64/bin:$PATH ``` 初始化集群配置: ``` mongosh --port 27011 --eval " rs.initiate({ _id: 'replicaset', configsvr: true, members: [ { _id: 0, host: '10.0.1.136:27011' }, { _id: 1, host: '10.0.1.137:27011' }, { _id: 2, host: '10.0.1.138:27011' } ] })" mongosh --port 27011 --eval " rs.status()" ``` 分别在3个节点都创建3个分片配置分片集群: Shard1: ``` cat > /data/mongodb/conf/shard1.conf << EOF # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: dbPath: /data/mongodb/shard1/data directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /data/mongodb/shard1/log/shard.log verbosity: 0 # network interfaces net: port: 27021 ipv6: false bindIpAll: true #bindIp: # replica set options replication: replSetName: shard1ReplSet #enableMajorityReadConcern: true # sharding options sharding: clusterRole: shardsvr # process management options processManagement: fork: false pidFilePath: /data/mongodb/shard1/log/shard.pid # set parameter options setParameter: enableLocalhostAuthBypass: true # security options security: authorization: disabled #authorization: enabled #clusterAuthMode: keyFile #keyFile: /data/mongodb/conf/keyfile EOF ``` Shard2: ``` cat > /data/mongodb/conf/shard2.conf << EOF # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: dbPath: /data/mongodb/shard2/data directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /data/mongodb/shard2/log/shard.log verbosity: 0 # network interfaces net: port: 27022 ipv6: false bindIpAll: true #bindIp: # replica set options replication: replSetName: shard2ReplSet #enableMajorityReadConcern: true # sharding options sharding: clusterRole: shardsvr # process management options processManagement: fork: false pidFilePath: /data/mongodb/shard2/log/shard.pid # set parameter options setParameter: enableLocalhostAuthBypass: true # security options security: authorization: disabled #authorization: enabled #clusterAuthMode: keyFile #keyFile: /data/mongodb/conf/keyfile EOF ``` Shard3: ``` cat > /data/mongodb/conf/shard3.conf << EOF # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where and how to store data. storage: dbPath: /data/mongodb/shard3/data directoryPerDB: false # where to write logging data. systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /data/mongodb/shard3/log/shard.log verbosity: 0 # network interfaces net: port: 27023 ipv6: false bindIpAll: true #bindIp: # replica set options replication: replSetName: shard3ReplSet #enableMajorityReadConcern: true # sharding options sharding: clusterRole: shardsvr # process management options processManagement: fork: false pidFilePath: /data/mongodb/shard3/log/shard.pid # set parameter options setParameter: enableLocalhostAuthBypass: true # security options security: authorization: disabled #authorization: enabled #clusterAuthMode: keyFile #keyFile: /data/mongodb/conf/keyfile EOF ``` 启动分版: ``` cat > /etc/supervisord.d/shard1.ini <<EOF [program:share1] command=/usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongod -f /data/mongodb/conf/shard1.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/shard1.stdout.log stderr_logfile=/var/log/supervisor/shard1.stderr.log EOF cat > /etc/supervisord.d/shard2.ini <<EOF [program:share2] command=/usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongod -f /data/mongodb/conf/shard2.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/shard2.stdout.log stderr_logfile=/var/log/supervisor/shard2.stderr.log EOF cat > /etc/supervisord.d/shard3.ini <<EOF [program:share3] command=/usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongod -f /data/mongodb/conf/shard3.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/shard3.stdout.log stderr_logfile=/var/log/supervisor/shard3.stderr.log EOF supervisorctl update ``` 登陆任意节点,初始化副本集: 注:初始化副本集的操作不能在仲裁节点上执行! mongosh 10.0.1.136:27021 定义副本集配置,"arbiterOnly":true 代表其为仲裁节点: 初始化副本集: ``` #分片1 mongosh --port 27021 --eval " rs.initiate({ _id: 'shard1ReplSet', members: [ { _id: 0, host: '10.0.1.136:27021' }, { _id: 1, host: '10.0.1.137:27021' }, { _id: 2, host: '10.0.1.138:27021'}, ] })" mongosh --port 27021 --eval "rs.status()" #分片2 mongosh --port 27022 --eval " rs.initiate({ _id: 'shard2ReplSet', members: [ { _id: 0, host: '10.0.1.136:27022' }, { _id: 1, host: '10.0.1.137:27022'}, { _id: 2, host: '10.0.1.138:27022'}, ] })" mongosh --port 27022 --eval "rs.status()" #分片3 mongosh --port 27023 --eval " rs.initiate({ _id: 'shard3ReplSet', members: [ { _id: 0, host: '10.0.1.136:27023'}, { _id: 1, host: '10.0.1.137:27023'}, { _id: 2, host: '10.0.1.138:27023'}, ] })" mongosh --port 27023 --eval "rs.status()" ``` Mongos server: ``` cat > /data/mongodb/conf/mongos.conf << EOF systemLog: destination: file quiet: false logAppend: true logRotate: reopen path: /data/mongodb/mongos/log/mongos.log verbosity: 0 # network interfaces net: port: 27017 ipv6: false bindIpAll: true #bindIp: # # sharding options sharding: configDB: replicaset/10.0.1.136:27011,10.0.1.137:27012,10.0.1.138:27013 # process management options processManagement: fork: false pidFilePath: /data/mongodb/mongos/log/mongos.pid #security: # keyFile: /data/mongodb/conf/keyfile # clusterAuthMode: keyFile EOF cat > /etc/supervisord.d/mongos.ini <<EOF [program:mongos] command=/usr/local/mongodb-linux-x86_64-rhel70-7.0.0/bin/mongos -f /data/mongodb/conf/mongos.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/var/log/supervisor/mongos.stdout.log stderr_logfile=/var/log/supervisor/mongos.stderr.log EOF mongosh --port 27017 --eval " sh.addShard('shard1ReplSet/10.0.1.136:27021,10.0.1.137:27021,10.0.1.138:27021') sh.addShard('shard2ReplSet/10.0.1.136:27022,10.0.1.137:27022,10.0.1.138:27022') sh.addShard('shard3ReplSet/10.0.1.136:27023,10.0.1.137:27023,10.0.1.138:27023') " mongosh --port 27017 --eval "sh.status();" ``` 用户创建: ``` # 在其中一个配置服务器中创建集群管理账号 mongosh --port 27011 --eval " use admin db.createUser({ user: 'clusterAdmin', pwd: 'xxxx', roles: [ { role: "clusterAdmin", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] })" mongosh --port 27011 --eval " use admin db.createUser({ user: "root", pwd: "xxxx", // 请修改为强密码 roles: ["root"] }) " # 在每个分片的主分片中创建集群管理账号 mongosh --port 27021 --eval " use admin db.createUser({ user: 'clusterAdmin', pwd: 'xxxx', roles: [ { role: "clusterAdmin", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] }) db.createUser({ user: "root", pwd: "xxxx", // 请修改为强密码 roles: ["root"] }) " # show users ``` 开启认证: 将配置中的认证打开 分片: ``` sed -i 's/authorization: disabled/#authorization: disabled/g;s/#authorization: enabled/authorization: enabled/g;s/#clusterAuthMode: keyFile/clusterAuthMode: keyFile/g;s/#keyFile:/keyFile:/g' shard*.conf ``` Mongos: ``` security: keyFile: /data/mongodb/conf/keyfile clusterAuthMode: keyFile ``` Config: ``` security: authorization: enabled #authorization: disabled clusterAuthMode: keyFile keyFile: /data/mongodb/conf/keyfile ``` 登录验证: ``` mongosh --port 27017 --username root --password --authenticationDatabase admin ```
文章最后更新时间: 2026年01月29日 19:12:40
分类文章统计
未分类(1)
Python常见错误(3)
Python基础(10)
Django(5)
Flask(1)
Linux基础(6)
shell(11)
linux排障(4)
虚拟化(1)
Consul(3)
MySQL(64)
ProxySQL(7)
SequoiaDB(2)
TiDB(4)
Redis(2)
oracle(10)
常用软件(2)
硬件排障(2)
HTML(1)
JavaScript(1)
windows(1)
总结(1)
我们的作品(18)
按年文章统计
2013(43)
2014(19)
2015(25)
2016(6)
2017(30)
2018(7)
2019(17)
2020(4)
2021(4)
2023(1)
2024(3)
2026(1)
老版入口
亲,扫我吧!
友情链接
飞哥的:imbusy.me/
冰川的:www.mindg.cn
海洋的:hiaero.net
宏斌的:techindeep.com
若水的:nosa.me
段郎的:sixther.me
肥客联邦:fk68.net