3台mongodb集群部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32447301/article/details/83656999

###【在多台机器上执行下面的命令
#在所有创建一个xiaoniu普通用户:

useradd xiaoniu

#为xiaoniu用户添加密码:

echo 123456 | passwd --stdin xiaoniu

#将xiaoniu添加到sudoers

echo "xiaoniu ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/xiaoniu
chmod 0440 /etc/sudoers.d/xiaoniu

#解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行

sudo sed -i 's/Defaults    requiretty/Defaults:xiaoniu !requiretty/' /etc/sudoers

#创建一个mongo目录

mkdir /mongo

#给相应的目录添加权限

chown -R xiaoniu:xiaoniu /mongo

#配置mongo的yum源

cat >> /etc/yum.repos.d/mongodb-org-3.4.repo << EOF
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF

#关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#重新启动

reboot

#分别在多台机器上使用xiaoniu用户登录

sudo yum install -y mongodb-org

#继续角色信息

node-1        node-2          node-3
mongos        mongos          mongos        路由服务器,寻址
config        config          config        配置服务器,保存配置
shard1(主)    shard2(主)     shard3(主)   分片:保存数据
shard2        shard3          shard1   副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)
shard3        shard1          shard2

#分别在多台机器上创建mongo config server对应的目录

mkdir -p /mongo/config/{log,data,run}

#分别在多台机器上修改config server的配置文件

cat >> /mongo/config/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /mongo/config/log/mongod.log
storage:
  dbPath: /mongo/config/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /mongo/config/run/mongod.pid
net:
  port: 27100
replication:
  replSetName: config
sharding:
  clusterRole: configsvr
EOF

#clusterRole: configsvr这个配置是固定的
#【重要】启动所有的mongo config server服务

mongod --config /mongo/config/mongod.conf

#登录任意一台配置服务器,初始化配置副本集

mongo --port 27100

#创建配置

config = {
   _id : "config",
    members : [
        {_id : 0, host : "192.168.1.11:27100" },
        {_id : 1, host : "192.168.1.12:27100" },
        {_id : 2, host : "192.168.1.13:27100" }
    ]
}

#初始化副本集配置

rs.initiate(config)

#查看分区状态

rs.status()

#注意:其中,"_id" : "config"对应配置文件中配置的 replicaction.replSetName 一致,“members” 中的 “host” 为三个节点的ip和port


#配置第一个分片和副本集
#修改mongo shard1 server的配置文件

mkdir -p /mongo/shard1/{log,data,run}

#分别在多台机器上修改shard1 server的配置文件

cat >> /mongo/shard1/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /mongo/shard1/log/mongod.log
storage:
  dbPath: /mongo/shard1/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /mongo/shard1/run/mongod.pid
net:
  port: 27001
replication:
  replSetName: shard1
sharding:
  clusterRole: shardsvr
EOF

#启动所有的shard1 server

mongod --config /mongo/shard1/mongod.conf

#登陆任意一台shard1服务器(希望哪一台机器是主,就登录到那一台机器上),初始化副本集

mongo --port 27001

#使用admin数据库

use admin

#定义副本集配置

config = {
   _id : "shard1",
    members : [
        {_id : 0, host : "192.168.1.11:27001" },
        {_id : 1, host : "192.168.1.12:27001" },
        {_id : 2, host : "192.168.1.13:27001" }
    ]
}

#初始化副本集配置

rs.initiate(config)

#查看分区状态

rs.status()

#配置第二个分片和副本集
#修改mongo shard2 server的配置文件

mkdir -p /mongo/shard2/{log,data,run}

#分别在多台机器上修改shard2 server的配置文件

cat >> /mongo/shard2/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /mongo/shard2/log/mongod.log
storage:
  dbPath: /mongo/shard2/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /mongo/shard2/run/mongod.pid
net:
  port: 27002
replication:
  replSetName: shard2
sharding:
  clusterRole: shardsvr
EOF

#启动所有的shard2 server

mongod --config /mongo/shard2/mongod.conf

#登陆(node2)的shard2服务器,初始化副本集

mongo --port 27002

#使用admin数据库

use admin

#定义副本集配置

config = {
   _id : "shard2",
    members : [
        {_id : 0, host : "192.168.1.12:27002" },
        {_id : 1, host : "192.168.1.13:27002" },
        {_id : 2, host : "192.168.1.11:27002" }
    ]
}

#初始化副本集配置

rs.initiate(config)

#查看分区状态

rs.status()

#配置第三个分片和副本集
#修改mongo shard3 server的配置文件

mkdir -p /mongo/shard3/{log,data,run}

#分别在多台机器上修改shard3 server的配置文件

cat >> /mongo/shard3/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /mongo/shard3/log/mongod.log
storage:
  dbPath: /mongo/shard3/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /mongo/shard3/run/mongod.pid
net:
  port: 27003
replication:
  replSetName: shard3
sharding:
  clusterRole: shardsvr
EOF

#启动所有的shard3 server

mongod --config /mongo/shard3/mongod.conf

#登陆node-1上的shard3服务器,初始化副本集

mongo --port 27003

#使用admin数据库

use admin

#定义副本集配置

config = {
   _id : "shard3",
    members : [
        {_id : 0, host : "192.168.1.13:27003" },
        {_id : 1, host : "192.168.1.11:27003" },
        {_id : 2, host : "192.168.1.12:27003" }
    ]
}

#初始化副本集配置

rs.initiate(config)

#查看分区状态

rs.status()

注意:启动mongos是守候进程是因为/mongo/mongos/mongod.conf缺少了fork: true这个配置

mkdir -p /mongo/mongos/{log,data,run}

#添加mongs的配置文件

cat >> /mongo/mongos/mongod.conf << EOF
systemLog:
  destination: file
  logAppend: true
  path: /mongo/mongos/log/mongod.log
processManagement:
  fork: true
  pidFilePath: /mongo/mongos/run/mongod.pid
net:
  port: 27200
sharding:
  configDB: config/192.168.1.111:27100,192.168.1.12:27100,192.168.1.13:27100
EOF

#注意,这里configDB后面的config要与配置服务器的_id保持一致

#启动路由服务器

mongos --config /mongo/mongos/mongod.conf

#登录其中的一台路由节点,手动启用分片

mongo --port 27200

#添加分片到mongos

sh.addShard("shard1/192.168.1.11:27001,192.168.1.12:27001,192.168.1.13:27001")
sh.addShard("shard2/192.168.1.12:27002,192.168.1.13:27002,192.168.1.11:27002")
sh.addShard("shard3/192.168.1.13:27003,192.168.1.11:27003,192.168.1.12:27003")

#设置slave可读(在命令行中生效一次),如果配置从接到可读,那么是连接客户端指定的

rs.slaveOk()

没有分片是因为没有开启分片规则
#创建mobike数据库

use admin

#对bikes这个数据库开启分片功能

db.runCommand({"enablesharding":"mobike"}) 

#创建bikes集合

db.createCollection("bikes")

##对bike数据库下的users集合按id的hash进行分片

db.runCommand({"shardcollection":"mobike.bikes","key":{_id:'hashed'}})

#启动所有的config server

mongod --config /mongo/config/mongod.conf

#启动所有的shard1

mongod --config /mongo/shard1/mongod.conf

#启动所有的shard2

mongod --config /mongo/shard2/mongod.conf

#启动所有的shard3

mongod --config /mongo/shard3/mongod.conf

#启动所有的mongos

mongos --config /mongo/mongos/mongod.conf

#关闭服务

mongod --shutdown --dbpath /mongo/shard3/data
mongod --shutdown --dbpath /mongo/shard2/data
mongod --shutdown --dbpath /mongo/shard1/data
mongod --shutdown --dbpath /mongo/config/data

猜你喜欢

转载自blog.csdn.net/qq_32447301/article/details/83656999
今日推荐