MongoDB Shard Cluster

发布于:2025-05-01 ⋅ 阅读:(24) ⋅ 点赞:(0)
#!/bin/bash
# 创建目录
mkdir -p /data-db/shard1/ # 分片1
mkdir -p /data-db/shard2/ # 分片2
mkdir -p /data-db/config/ # 配置

# 下载并解压mongodb
cd /data-db/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.22.tgz && tar -zxvf mongodb-linux-x86_64-ubuntu2004-4.4.22.tgz  && mv mongodb-linux-x86_64-ubuntu2004-4.4.22 mongodb

# 创建系统用户用于安装运行 mongodb
useradd -r -s /bin/false mongodb
# 把上面创建的目录授权给这个用户
chown -R mongodb:mongodb /data-db/mongodb
chown -R mongodb:mongodb /data-db/shard1
chown -R mongodb:mongodb /data-db/shard2
chown -R mongodb:mongodb /data-db/config

# 修改hosts文件
echo "172.20.192.20 member1.blockin.ai " >> /etc/hosts
echo "172.20.192.21 member2.blockin.ai " >> /etc/hosts
echo "172.20.192.31 member3.blockin.ai " >> /etc/hosts
echo "172.20.192.32 member4.blockin.ai " >> /etc/hosts
echo "172.20.192.33 member5.blockin.ai " >> /etc/hosts
echo "172.20.192.34 member6.blockin.ai " >> /etc/hosts

# 增加/data-db/mongodb到环境变量
echo "export PATH=\$PATH:/data-db/mongodb/bin" >> ~/.bashrc
source ~/.bashrc

# 创建mongod服务单元文件(shard1)
cat << EOF > /etc/systemd/system/mongodb-shard1.service
[Unit]
Description=MongoDB Shard 1
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/data-db/mongodb/bin/mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /data-db/shard1 --logpath /data-db/shard1/mongod.log --port 27010 --shardsvr --wiredTigerCacheSizeGB 1
ExecStop=/data-db/mongodb/bin/mongod --shutdown --dbpath /data-db/shard1
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 创建mongod服务单元文件(shard2)
cat << EOF > /etc/systemd/system/mongodb-shard2.service
[Unit]
Description=MongoDB Shard 2
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/data-db/mongodb/bin/mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /data-db/shard2 --logpath /data-db/shard2/mongod.log --port 27011 --shardsvr --wiredTigerCacheSizeGB 1
ExecStop=/data-db/mongodb/bin/mongod --shutdown --dbpath /data-db/shard2
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 创建mongod服务单元文件(config)
cat << EOF > /etc/systemd/system/mongodb-config.service
[Unit]
Description=MongoDB Config Server
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/data-db/mongodb/bin/mongod --bind_ip 0.0.0.0 --replSet config --dbpath /data-db/config --logpath /data-db/config/mongod.log --port 27019 --configsvr --wiredTigerCacheSizeGB 1
ExecStop=/data-db/mongodb/bin/mongod --shutdown --dbpath /data-db/config
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 创建mongos服务单元文件
cat << EOF > /etc/systemd/system/mongodb-mongos.service
[Unit]
Description=MongoDB Mongos Router
After=network.target

[Service]
User=mongodb
Group=mongodb
ExecStart=/data-db/mongodb/bin/mongos --bind_ip 0.0.0.0 --logpath /data-db/mongos/mongos.log --port 27017 --configdb config/member1.blockin.ai:27019,member2.blockin.ai:27019,member3.blockin.ai:27019
ExecStop=/data-db/mongodb/bin/mongos --shutdown
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd守护进程
systemctl daemon-reload

# 启动并设置开机自启服务
systemctl start mongodb-shard1
systemctl enable mongodb-shard1
systemctl start mongodb-shard2
systemctl enable mongodb-shard2
systemctl start mongodb-config
systemctl enable mongodb-config
systemctl start mongodb-mongos
systemctl enable mongodb-mongos

# 分片用的复制集 在1,2,3
# 使用systemctl启动后,这里不需要再手动fork启动
# mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /data-db/shard1 --logpath /data-db/shard1/mongod.log --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1

# 初始化分片
mongo --host member1.blockin.ai:27010  rs.initiate({ 
    _id: "shard1",   
    "members": [
        {
            "_id": 0,
            "host": "member1.blockin.ai:27010"
        },
        {
            "_id": 1,
            "host": "member2.blockin.ai:27010"
        },
        {
            "_id": 2,
            "host": "member3.blockin.ai:27010"
        }
    ]
});

# config复制集 在1,2,3
# 使用systemctl启动后,这里不需要再手动fork启动
# mongod --bind_ip 0.0.0.0 --replSet config --dbpath /data-db/config --logpath /data-db/config/mongod.log --port 27019 --fork --configsvr --wiredTigerCacheSizeGB 1

# 初始化
mongo --host member1.blockin.ai:27019  rs.initiate({
    _id: "config",
    "members": [
        {
            "_id": 0,
            "host": "member1.blockin.ai:27019"
        },
        {
            "_id": 1,
            "host": "member2.blockin.ai:27019"
        },
        {
            "_id": 2,
            "host": "member3.blockin.ai:27019"
        }
    ]
});

# mongos (对外服务可以多个)
# 使用systemctl启动后,这里不需要再手动fork启动
# mongos --bind_ip 0.0.0.0 --logpath /data-db/mongos/mongos.log --port 27017 --fork   --configdb  config/member1.blockin.ai:27019,member2.blockin.ai:27019,member3.blockin.ai:27019

# 创建mongos, 然后添加分片
mongo --host mongos1.blockin.ai:27017
mongos >  sh.addShard("shard1/member1.blockin.ai:27010,member2.blockin.ai:27010,member3.blockin.ai:27010");

sh.enableSharding("database")

sh.shardCollection("database.collection", {shardKey: 1})

db // 显示当前数据库的名字
db = db.getSiblingDB("database") // 切换到database数据库

sh.enableSharding("nft")

#分片用的复制集 在4,5,6
# 使用systemctl启动后,这里不需要再手动fork启动
# mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /data-db/shard2 --logpath /data-db/shard2/mongod.log --port 27011 --fork --shardsvr --wiredTigerCacheSizeGB 1

# 初始化分片
mongo --host member4.blockin.ai:27011

mongo --host member4.blockin.ai:27011  rs.initiate({
    _id: "shard2",
    "members": [
        {
            "_id": 0,
            "host": "member4.blockin.ai:27011"
        },
        {
            "_id": 1,
            "host": "member5.blockin.ai:27011"
        },
        {
            "_id": 2,
            "host": "member6.blockin.ai:27011"
        }
    ]
});

# 加入第二个分片
# 连接到mongos, 添加分片
mongo --host member1.blockin.ai:27017

mongos >  sh.addShard("shard2/member4.blockin.ai:27011,member5.blockin.ai:27011,member6.blockin.ai:27011");

mongos > sh.status()


网站公告

今日签到

点亮在社区的每一天
去签到