Mongodb
Mongodb入门系列
Mongodb字典
Mongodb安装部署
Mongodb单点部署
Mongodb集群部署
Mongodb集群调研
Mongodb原理说明
Mongodb服务维护
Mongodb安全防护
Mongodb配置管理
Mongodb_SQL语句
Mongodb索引操作
Mongodb增删改查操作
Mongodb新闻
Mongodb使用案例
本文档使用 MrDoc 发布
-
+
home page
Mongodb集群部署
[TOC] ## 一.依赖和环境 centos7.2,4核cpu, 8G内存 100G硬盘 版本:3.4.7社区版本 mongo1:1.1.1.1 mongo2:1.1.1.2 mongo3:1.1.1.3 服务规划列表  端口规划列表  ## 二.安装 1.下载 操作服务器(mongo1 mongo2 mongo3) 下载3.4.7版本 `wget http://downloads.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.7.tgz?_ga=2.27332668.129100306.1533718841-1981701661.1533718841` 改名并移动 `mv mongodb-* mongodb.tgz` `tar -xf mongodb.tgz` `mv mongodb-linux-x86_64-rhel70-3.4.7 /usr/lcoal/mongodb` 2.建立目录,路由程序,配置程序,节点程序 操作服务器(mongo1 mongo2 mongo3) mkdir -p /ops/server/mongodb/conf mkdir -p /ops/server/mongodb/mongos/log mkdir -p /ops/server/mongodb/config/data mkdir -p /ops/server/mongodb/config/log mkdir -p /ops/server/mongodb/shard1/data mkdir -p /ops/server/mongodb/shard1/log mkdir -p /ops/server/mongodb/shard2/data mkdir -p /ops/server/mongodb/shard2/log mkdir -p /ops/server/mongodb/shard3/data mkdir -p /ops/server/mongodb/shard3/log 3.环境变量 操作服务器(mongo1 mongo2 mongo3) `echo 'MONGODB_HOME=/usr/local/mongodb' >> /etc/proflie` `echo 'PATH=$MONGODB_HOME/bin:$PATH' >> /etc/proflie` `source /etc/profile` ## 三.设置配置程序 1.配置 操作服务器(mongo1 mongo2 mongo3) mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。 `vim /usr/local/mongodb/conf/config.conf` ```python #配置文件内容 pidfilepath = /usr/local/mongodb/config/log/configsrv.pid dbpath = /usr/local/mongodb/config/data logpath = /usr/local/mongodb/config/log/congigsrv.log logappend = true bind_ip = 自己的ip port = 21000 fork = true #declare this is a config db of a cluster; configsvr = true #副本集名称 replSet=configs #设置最大连接数 maxConns=20000 ``` 2.启动 操作服务器(mongo1 mongo2 mongo3) 启动配置程序,显示successfully才成功 `mongod -f /usr/local/mongodb/conf/config.conf` 3.初始化副本集 操作服务器(mongo1) 链接自己的21000端口,也就是配置服务的端口 mongo --host 1.1.1.1 --port 21000 先填写副本集的地址,再初始化,最后返回 ok:1 即可。 `config = {_id : "configs",members : [{_id : 0, host : "1.1.1.1:21000" },{_id : 1, host : "1.1.1.2:21000" },{_id : 2, host : "1.1.1.3:21000" }]}` `rs.initiate(config)` ## 四.设置分片节点程序 1.shard1配置 操作服务器(mongo1 mongo2 mongo3) `vim /usr/local/mongodb/conf/shard1.conf` ```python #配置文件内容 #三台服务器改对应的目录和IP pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid dbpath = /usr/local/mongodb/shard1/data logpath = /usr/local/mongodb/shard1/log/shard1.log logappend = true #更改服务器地址 bind_ip = 本机ip port = 27001 fork = true #打开web监控 httpinterface=true rest=true #副本集名称 replSet=shard1 #declare this is a shard db of a cluster; shardsvr = true #设置最大连接数 maxConns=20000 ``` 2.shard1启动 操作服务器(mongo1 mongo2 mongo3) `mongod -f /usr/local/mongodb/conf/shard1.conf` 3.shard1初始化 操作服务器(mongo1) 链接 `mongo --host 1.1.1.1 --port 27001` 切换到admin数据库,填写shard3作为仲裁点,最后返回 ok:1 则正确。 `use admin` `config = {_id : "shard1",members : [{_id : 0, host : "1.1.1.1:27001" },{_id : 1, host : "1.1.1.2:27001" },{_id : 2, host : "1.1.1.3:27001" , arbiterOnly: true }]}` `rs.initiate(config)` 4.shard2配置 操作服务器(mongo1 mongo2 mongo3) `vim /usr/local/mongodb/conf/shard2.conf` ```python #三台服务器改对应的目录和IP pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid dbpath = /usr/local/mongodb/shard2/data logpath = /usr/local/mongodb/shard2/log/shard2.log logappend = true bind_ip = 本机ip port = 27002 fork = true httpinterface=true rest=true replSet=shard2 shardsvr = true maxConns=20000 ``` 5.shard2启动 操作服务器(mongo1 mongo2 mongo3) `mongod -f /usr/local/mongodb/conf/shard2.conf` 6.shard2初始化 操作服务器(mongo2) 因为这次要设置1节点为仲裁点,不能在1节点上初始化,所以到mongo2上。 链接 `mongo --host 1.1.1.2 --port 27002` 切换到admin数据库,填写shard1作为仲裁点,最后返回 ok:1 则正确。 `use admin` `config = {_id : "shard2",members : [{_id : 0, host : "1.1.1.1:27002" , arbiterOnly: true},{_id : 1, host : "1.1.1.2:27002" },{_id : 2, host : "1.1.1.3:27002" }]}` `rs.initiate(config)` 7.shard3配置 操作服务器(mongo1 mongo2 mongo3) `vim /usr/local/mongodb/conf/shard3.conf` ```python #三台服务器改对应的目录和IP pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid dbpath = /usr/local/mongodb/shard3/data logpath = /usr/local/mongodb/shard3/log/shard3.log logappend = true bind_ip = 本机ip port = 27003 fork = true httpinterface=true rest=true replSet=shard3 shardsvr = true maxConns=20000 ``` 8.shard3启动 操作服务器(mongo1 mongo2 mongo3) `mongod -f /usr/local/mongodb/conf/shard3.conf` 9.shard3初始化 操作服务器(mongo1) 链接 `mongo --host 1.1.1.1 --port 27003` 切换到admin数据库,填写shard2作为仲裁点,最后返回 ok:1 则正确。 `use admin` `config = {_id : "shard3",members : [{_id : 0, host : "1.1.1.1:27003" },{_id : 1, host : "1.1.1.2:27003" , arbiterOnly: true},{_id : 2, host : "1.1.1.3:27003" }]}` `rs.initiate(config)` ## 五.设置路由程序 先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(mongo1,mongo2,mongo3) 1.配置 操作服务器:(mongo1,mongo2,mongo3) `vim /usr/local/mongodb/conf/mongos.conf` ```python pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid logpath = /usr/local/mongodb/mongos/log/mongos.log logappend = true #配置其他俩台的时候注意更改监听IP bind_ip = 本机ip port = 20000 fork = true #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字 configdb = configs/1.1.1.1:21000,1.1.1.2:21000,1.1.1.3:21000 #设置最大连接 maxConns=20000 ``` 2.启动 操作服务器:(mongo1,mongo2,mongo3) `mongos -f /usr/local/mongodb/conf/mongos.conf` 3.初始化 操作服务器:(mongo1) 链接 `mongo --host 1.1.1.1 --port 20000` 进入admin数据库,将分片程序地址声明 `use admin` `sh.addShard("shard1/1.1.1.1:27001,1.1.1.2:27001,1.1.1.3:27001")` `sh.addShard("shard1/1.1.1.1:27002,1.1.1.2:27002,1.1.1.3:27002")` `sh.addShard("shard1/1.1.1.1:27003,1.1.1.2:27003,1.1.1.3:27003")` 查看集群状态 `sh.status()` ## 六.添加权限 集群中配置权限,需要先创建一个admin用户,拥有root权限,然后再停止整个集群,开启权限验证后再启动集群。 1.创建用户 操作服务器:(mongo1) 登陆当前的路由程序,也就是数据库 `mongo 1.1.1.1:20000` 切换到admin库,创建一个admin账户,密码123456,属于root组,可以管理admin库 `use admin `db.createUser({user:'admin',pwd:'123456',roles:[{ role : "root", "db" : "admin" }]});`` 返回1证明成功 `db.auth('admin','123456')` 2.创建KeyFile 操作服务器:(mongo1) 在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件。 创建keyFile `openssl rand -base64 753` 3.复制KeyFile 操作服务器:(mongo1 mongo2 mongo3) 将显示的内容复制到KeyFile.key `mkdir -p /usr/local/mongodb/key` `vim /usr/local/mongodb/key/KeyFile.key` `chmod 700 /usr/local/mongodb/key/KeyFile.key` 4.开启认证 操作服务器:(mongo1 mongo2 mongo3) 修改每个节点的`/usr/local/mongodb/conf/` `config.conf 和 shard1.conf 和 shard2.conf 和 shard3.conf` 添加如下 ```python #开启权限验证 auth=true keyFile=/usr/local/mongodb/key/KeyFile.key ``` 修改每个节点的mongos文件 `vim /usr/local/mongodb/conf/mongos.conf` 添加如下 ```python keyFile=/ops/servers/mongodb/key/KeyFile.key ``` 5.重启 操作服务器:(mongo1 mongo2 mongo3) 先停止服务,如果killall没有,则先yum安装psmisc `killall mongod` `killall mongos` 每个节点挨个启动配置服务 `mongod -f /usr/local/mongodb/conf/config.conf` 每个节点挨个启动分片服务 `mongod -f /usr/local/mongodb/conf/shard1.conf` `mongod -f /usr/local/mongodb/conf/shard2.conf` `mongod -f /usr/local/mongodb/conf/shard3.conf` 每个节点挨个启动路由服务 `mongos -f /usr/local/mongodb/conf/mongos.conf` 6.验证 操作服务器:(mongo1) 连接admin库或者其他库,去查询当前有的数据库或者其它操作,将会报错如下 链接 `mongo 1.1.1.1:20000/admin` 查看当前有哪些数据库 `show dbs` 会报错  使用账号密码登陆则正常使用 `mongo 1.1.1.1:20000/admin -u admin -p 123456` `show dbs` 正常使用了  ## 七.集群维护 1.启动monggo集群 mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos. 在集群每个节点启动一遍 `mongod -f /ops/server/mongodb/conf/config.conf` 在集群每个节点启动一遍 `mongod -f /ops/server/mongodb/conf/shard1.conf` `mongod -f /ops/server/mongodb/conf/shard2.conf` `mongod -f /ops/server/mongodb/conf/shard3.conf` 在集群每个节点启动一遍 `mongod -f /ops/server/mongodb/conf/mongos.conf` 2.关闭mongo集群,直接killall杀掉所有进程 `killall mongod` `killall mongos`
日行一善
Dec. 10, 2020, 3:47 p.m.
Share documents
Collection documents
Last
Next
Scan wechat
Copy link
Scan your mobile phone to share
Copy link
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
QQ粉丝交流群:882382311
Markdown文件
share
link
type
password
Update password