
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
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月03日 09时07分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux下编程出现 对'sem_wait'未定义的引用解决方案
2021-05-12
ccf小明种苹果
2021-05-12
[C++系列] 48. string类基础知识点
2021-05-12
[每日一题] 66. 客似云来(fib数列公式)
2021-05-12
[每日一题] 85. 红与黑(图、DFS)
2021-05-12
[排序算法] 4. 希尔排序(插入排序)
2021-05-12
[每日一题] 151. 只出现一次的数字(位运算、异或、常规解法)
2021-05-12
[LeetCode 双周赛22] 2. 安排电影院座位(排序、暴力优化、巧妙解法)
2021-05-12
[LeetCode 周赛181] 2. 四因数(暴力、常规解法)
2021-05-12
[M图论+bfs] lc127. 单词接龙(图论难题+建图+bfs求最短路)
2021-05-12
[M模拟] lc48. 旋转图像(模拟+思维)
2021-05-12
form表单
2021-05-12
JavaFX学习笔记-颜色选择器ColorPicker与日期选择器DatePicker
2021-05-12
使用Java在Windows上获取一个文件的创建时间
2021-05-12
Flutter学习笔记-主轴与交叉轴的对其方式
2021-05-12
工具研究:(三)Nginx配置错误的路由时均统一跳转到登录界面
2021-05-12
数据库设计原则与编写sql规范要求-据于阿里开发手册简化
2021-05-12
ant design pro v5去掉右边content区域的水印
2021-05-12
eclipse下清除项目的svn信息
2021-05-12