mongodb4.4.3副本+分片集群
发布日期:2021-05-12 17:20:18 浏览次数:13 分类:精选文章

本文共 7960 字,大约阅读时间需要 26 分钟。

目录


环境:

系统:CentOS7.9    

IP 数据盘 分区形式 mongos config server shard1 shard2 shard3
192.168.100.21 vdb lvm 27017 27018 27001 27002 27003
192.168.100.22 vdb lvm 27017 27018 27001 27002 27003
192.168.100.23 vdb lvm 27017 27018 27001 27002 27003

 

 

 

 

 

# 1. 关闭selinux、firewall

sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/configsetenforce 0systemctl disable firewalld.servicesystemctl stop firewalld.servicesystemctl status firewalld.service

# 2. 系统打开文件数

#系统打开文件数【单独下边两步需要重启才生效】grep -w "^* soft nofile.*" /etc/security/limits.conf || echo "* soft nofile 61440" >> /etc/security/limits.confgrep -w "^* hard nofile.*" /etc/security/limits.conf || echo "* hard nofile 61440" >> /etc/security/limits.confgrep -w "^DefaultLimitNOFILE.*" /etc/systemd/system.conf || echo "DefaultLimitNOFILE=61440" >> /etc/systemd/system.confgrep -w "^DefaultLimitNPROC.*" /etc/systemd/system.conf || echo "DefaultLimitNPROC=61440" >> /etc/systemd/system.conf#【不重启生效】ulimit -Hn 61440    # 【改大后,不可改小,直到重启恢复默认】ulimit -Sn 61440

# 3. ntp时间同步

# 关闭chronyd时间服务systemctl stop chronyd.servicesystemctl disable chronyd.service# 调整系统时区为亚洲上海【shanghai】timedatectl set-timezone Asia/Shanghai# 安装ntp服务, 并调整本地时间yum -y install ntpsed -i s/centos.pool.ntp.org/cn.pool.ntp.org/g /etc/ntp.confntpdate -u 0.cn.pool.ntp.orgsystemctl enable ntpd.servicesystemctl restart ntpd.servicentpdate -u 0.cn.pool.ntp.org

# 4. 挂数据盘、添加软件源、安装,并配置

#     1> 挂数据盘

# 确认vdb没用的话,可以使用# pvcreate -y /dev/vdbpvcreate /dev/vdbvgcreate vg_cunchu /dev/vdblvcreate -L 99.6G vg_cunchu -n lv_cunchumkfs.xfs /dev/vg_cunchu/lv_cunchu# 创建挂载目录mkdir -p /data/mongodb# 写入开机挂载vim /etc/fstab# 执行一次即可,这里没写判断# echo -e "/dev/vg_cunchu/lv_cunchu\t/data/mongodb/\txfs\tdefaults\t0 0" >> /etc/fstab # 挂载mount -a# 创建需要的数据目录mkdir -p /data/mongodb/confmkdir -p /data/mongodb/data/configmkdir -p /data/mongodb/data/shard{1..3}mkdir -p /data/mongodb/logmkdir -p /data/mongodb/key

#     2> 添加软件源、安装

cat > /etc/yum.repos.d/mongodb.repo << "EOF"[mongodb-org]name=MongoDB Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/gpgcheck=0enabled=1EOF
yum install -y mongodb-orgsystemctl disable mongod

#     3> 添加配置文件

cat > /data/mongodb/conf/config.conf << EOFdbpath=/data/mongodb/data/configlogpath=/data/mongodb/log/config.logport=27018logappend=truefork=truemaxConns=5000replSet=configsconfigsvr=truebind_ip=0.0.0.0EOFcat > /data/mongodb/conf/mongos.conf << EOFlogpath=/data/mongodb/log/mongos.loglogappend = trueport = 27017fork = trueconfigdb = configs/192.168.100.21:27018,192.168.100.22:27018,192.168.100.23:27018maxConns=20000bind_ip=0.0.0.0EOFcat > /data/mongodb/conf/shard1.conf << EOFdbpath=/data/mongodb/data/shard1logpath=/data/mongodb/log/shard1.logport=27001logappend=truefork=truemaxConns=5000shardsvr=truereplSet=shard1bind_ip=0.0.0.0EOFcat > /data/mongodb/conf/shard2.conf << EOFdbpath=/data/mongodb/data/shard2logpath=/data/mongodb/log/shard2.logport=27002logappend=truefork=truemaxConns=5000shardsvr=truereplSet=shard2bind_ip=0.0.0.0EOFcat > /data/mongodb/conf/shard3.conf << EOFdbpath=/data/mongodb/data/shard3logpath=/data/mongodb/log/shard3.logport=27003logappend=truefork=truemaxConns=5000shardsvr=truereplSet=shard3bind_ip=0.0.0.0EOF

#    4> 添加启动脚本

cat > /etc/init.d/mongodb-cluster << EOF#!/bin/bash## description: mongodb cluster daemon# chkconfig: 2345 63 63#starting(){    # 启动配置服务    mongod -f /data/mongodb/conf/config.conf > /dev/null 2>&1 &    # 启动shard{1..3}    mongod -f /data/mongodb/conf/shard1.conf > /dev/null 2>&1 &    mongod -f /data/mongodb/conf/shard2.conf > /dev/null 2>&1 &    mongod -f /data/mongodb/conf/shard3.conf > /dev/null 2>&1 &    # 启动mongos    mongos -f /data/mongodb/conf/mongos.conf > /dev/null 2>&1 &    sleep 8    running_num=\`ps -aux | grep -v grep | grep '/data/mongodb' | egrep -c 'mongod|mongos'\`    if [ \$running_num -eq 5 ]; then    echo -e "MongoDB Cluster Node ... ... [ \e[1;32mSTART\e[0m ]"    else    echo -e "MongoDB Cluster Node ... ... [ \e[1;31mFaill\e[0m ]"    fi}stoping(){    # 停止5个服务    ps -aux | grep -v grep | grep "/data/mongodb" | egrep "mongod|mongos" | awk '{print $2}' | xargs kill -9 > /dev/null 2>&1 &    sleep 2    running_num=\`ps -aux | grep -v grep | grep '/data/mongodb' | egrep -c 'mongod|mongos'\`    if [ \$running_num -eq 0 ]; then    echo -e "MongoDB Cluster Node ... ... [ \e[1;32mSTOP\e[0m ]"    else    echo -e "MongoDB Cluster Node ... ... [ \e[1;31mdeaded\e[0m ]"    fi}statusing(){    running_num=\`ps -aux | grep -v grep | grep '/data/mongodb' | egrep -c 'mongod|mongos'\`    if [ \$running_num -eq 5 ]; then    echo -e "MongoDB Cluster Node ... ... [ \e[1;32mrunning\e[0m ]"    else    echo -e "MongoDB Cluster Node ... ... [ \e[1;31mis not running\e[0m ]"    fi}case "\$1" in    start)        starting;;    stop)        stoping;;    restart)        \$0 stop        \$0 start;;    status)        statusing;;    *)        echo "usage: \$0 { start | stop | restart | status }"        exit 1esacexit 0EOF# 添加执行权限chmod +x /etc/init.d/mongodb-cluster

#     5> 启动服务【所有节点执行】

chkconfig --add mongodb-cluster/etc/init.d/mongodb-cluster start

#     6> 配置集群

# 其中一台执行mongo --host 192.168.100.21 --port 27018use adminrs.initiate({_id:"configs",members:[{_id:0,host:"192.168.100.21:27018"},{_id:1,host:"192.168.100.22:27018"}, {_id:2,host:"192.168.100.23:27018"}]})rs.status()

 

# 其中一台执行,这里指定了192.168.100.23为仲裁节点[arbiter];# 在仲裁节点不可以执行如下命令mongo --host 192.168.100.21 --port 27001use adminrs.initiate({_id:"shard1",members:[{_id:0,host:"192.168.100.21:27001"},{_id:1,host:"192.168.100.22:27001"},{_id:2,host:"192.168.100.23:27001",arbiterOnly: true}]})
# 其中一台执行,这里指定了192.168.100.23为仲裁节点[arbiter];# 在仲裁节点不可以执行如下命令mongo --host 192.168.100.21 --port 27002use adminrs.initiate({_id:"shard2",members:[{_id:0,host:"192.168.100.21:27002"},{_id:1,host:"192.168.100.22:27002"},{_id:2,host:"192.168.100.23:27002",arbiterOnly: true}]})
# 其中一台执行,这里指定了192.168.100.23为仲裁节点[arbiter];# 在仲裁节点不可以执行如下命令mongo --host 192.168.100.21 --port 27003use adminrs.initiate({_id:"shard3",members:[{_id:0,host:"192.168.100.21:27003"},{_id:1,host:"192.168.100.22:27003"},{_id:2,host:"192.168.100.23:27003",arbiterOnly: true}]})

 

# 其中一台执行mongo --host 192.168.100.21 --port 27017use adminsh.addShard("shard1/192.168.100.21:27001,192.168.100.22:27001,192.168.100.23:27001")sh.addShard("shard2/192.168.100.21:27002,192.168.100.22:27002,192.168.100.23:27002")sh.addShard("shard3/192.168.100.21:27003,192.168.100.22:27003,192.168.100.23:27003")sh.status()

# 5. 实际使用

#     1>. 实现分片功能

# 设置分片chunk大小# 设置块大小为1M是方便实验,不然需要插入海量数据mongo --host 192.168.100.21 --port 27017use configdb.setting.save({"_id":"chunksize","value":1})

#          1>> 数据库启用分片

sh.enableSharding("calon")

#          2>> 创建索引,对表进行分片

db.user.createIndex({"id":1})                # 以"id"作为索引sh.shardCollection("calon.user",{"id":1})    # 根据"id"对user表进行分片sh.status()    # 查看分片情况

#          3>> 模拟写入数据

use calonfor(i=1;i<=500;i++){db.user.insert({"id":i,"name":"jack"+i})} #模拟往calon数据库的user表写入500数据

#     2> 启用密码认证

# 其中一个节点执行即可openssl rand -base64 123 > /data/mongodb/key/access.keychmod 400 /data/mongodb/key/access.keyrsync -av /data/mongodb/key/access.key 192.168.100.22:/data/mongodb/key/rsync -av /data/mongodb/key/access.key 192.168.100.23:/data/mongodb/key/mongo# 创建管理员用户,这里密码为“admin-123”use admindb.createUser({user: "root",pwd: "admin-123", roles: [ { role: "root", db: "admin" } ]})# 创建普通用户use calon  db.createUser({user: "user",pwd: "admin-456",roles: [ { role: "dbOwner", db: "calon" } ]})# /data/mongodb/conf/mongos.conf 文件添加如下,下面放了脚本,不用手敲# keyFile=/data/mongodb/key/access.key# 其他配置文件添加# auth=true# keyFile=/data/mongodb/key/access.key# 依次重启节点mongodb-cluster

#     自动追加【密码认证】配置的脚本

#!/bin/bash#for a in config.conf shard1.conf shard2.conf shard3.confdo        grep "auth=true" /data/mongodb/conf/${a} || echo "auth=true" >> /data/mongodb/conf/${a}donefor b in config.conf shard1.conf shard2.conf shard3.conf mongos.confdo        grep "keyFile=/data/mongodb/key/access.key" /data/mongodb/conf/${b} || echo "keyFile=/data/mongodb/key/access.key" >> /data/mongodb/conf/${b}done

 

 

上一篇:Openstack虚拟机已迁移,但属性还在老主机上
下一篇:linux iscsi

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年05月03日 09时07分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章