均衡器开机没反应,怎样检查故障

JavaScript024

均衡器开机没反应,怎样检查故障,第1张

常见故障有两种,第一,硬件故障.第二,软件故障.听报警声一长两短是内存有问题一长几短是显卡有问题如果没报警声,风扇转,屏幕无显示,说明CPU有问题以上情况都没有,系统自检也成功的话,就是操作系统有问题或者硬盘坏了,如果自检不成功,则检查CMOS设置脑常见故障及排除首先,需要明确的一点是,电脑故障分别软件故障和硬件故障。将电脑系统盘完全格式化,重新安装操系统,仅仅安装必要驱动。这时,如果故障解决了,即为软件故障;如果故障仍没有解决,即为硬件故障。还有一种情况是,格式化后不能正常安装操作系统,这同样为硬件故障。、如果您的电脑安装的是Windows98或WindowsME操作系统,那么经常遇到死机、重启、蓝屏等情况是正常的,这是操作系统本身的BUG造成的。解决之道也很简单,就是升级Windows2000或XP系统。电脑常见故障之一——死机在笔者的实际维修生涯中,造成死机的硬件故障最常见就是:CPU散热器出问题,CPU过热所致。检测方法:首先将电脑平放在地上后,打开电脑,观察CPU散热器扇叶是否在旋转,如果扇叶完全不转,故障确认。有时候,CPU风扇出现故障,但却没有完全停止转动,由于转数过小,所以同样起不到良好的散热作用。检测这种情况笔者常用的一个方法是:将食指轻轻的放在CPU风扇上(注意,不要把指甲放到风扇上),如果有打手的感觉,证明风扇运行良好;如果手指放上去,风扇就不转了,风扇故障确认。解决方案:很间单,更换CPU散热器。其它造成死机的常见硬件故障:显卡、电源散热器出问题,过热所致。电源散热风扇故障的检测方法稍有不同,将手心平放在电源后部,如果感觉吹出的风有力,不是很热,证明正常;如果感觉吹出的风很热,或是根本感觉不到风,证明有问题。解决方案:显卡问题可以直接更换显卡风扇;电源风扇虽然在内部,但同样拆开自行更换,所需要只是一个螺丝刀而已。电脑常见故障之二——重启造成重启的最常见硬件故障:CPU风扇转速过低或CPU过热。一般来说,CPU风扇转速过低或过热只能造成电脑死机,但由于目前市场上大部分主板均有:CPU风扇转速过低和CPU过热保护功能(各个主板厂商的叫法不同,其实都是这个意思)。它的作用就是:如果在系统运行的过程中,检测到CPU风扇转速低于某一数值,或是CPU温度超过某一度数,电脑自动重启。这样,如果电脑开启了这项功能话,CPU风扇一旦出现问题,电脑就会在使用一段时间后不断重启。检测方法:将BIOS恢复一下默认设置,关闭上述保护功能,如果电脑不再重启,就可以确认故障源了。解决方案:同样为更换CPU散热器。造成重启的常见硬件故障:主板电容爆浆电脑在长时间使用后,部分质量较差的主板电容会爆浆。如果是只是轻微爆浆,电脑依然可以正常使用,但随着主板电容爆浆的严重化,主板会变得越来越稳定,出现重启的故障。比较严重,这种情况电脑根本就不可能启动不是很严重,这种情况电脑应该还可正常使用检测方法:将机箱平放,看主板上的电容,正常电容的顶部是完全平的,部分电容会有点内凹;但爆浆后的电容是凸起的。解决方案:拆开电脑,拿到专门维修站点去维修,一般更换主板供电部分电容的维修费在20块钱以内(成本不过几毛钱);超过这个数,你就碰到JS了。如果是某一次非法关机后或是磕碰电脑后,电脑可以通过硬件自检的过程,但在进入操作系统的过程中重启,并且一再如此的话,就要考虑是否是硬盘问题了。检测方法:使用“金海硕-效率源磁盘坏道修复程序1.6破解版”,去网上下载一个,很好找的。使用这款软件时,注意要将系统时间调整到2003年5月到2003年12月之间,进入这款软件运行界面后,完全是中文傻瓜式操作就不用介绍了。解决方案:上文介绍的“效率源”同样可以修复硬件坏道,不过就笔者使用,修复效果并不是很好。在这里,笔者推荐大家使用“HDDRegeneratorShell硬盘坏道修复工具”,操作介面虽然是英文的,不过英文比较简单,就算是你完全看不懂,那就一直按“回车键”就可以进入修复界面。需要提醒大家的是,在使用“HDD”前,请注意备份硬盘数据。在使用HDD修复完后,再使用“效率源”检测一下,90%以上的硬盘可以完全修复。如果这时检查你的硬盘依然有坏道,建议你更换一块新硬盘,为你的老硬盘准备“后事”吧。请朋友们注意,以上方法适用于任何情况下的硬盘坏道修复,是笔者在多年的维修工作中,发现的比较简单,同样是修复率比较高的一个方法,完全修复率可达90%以上。电脑常见故障之三——开机无响应(上)经常使用电脑的朋友应该会碰到这种情况,开机时按下电源按钮后,电脑无响应,显示器黑屏不亮。除去那些傻瓜式的故障原因,如显示器、主机电源没插好;显示器与主板信号接口处脱落外,常见的故障原因如下。其实这个故障还分两种情况,一是开机后CPU风扇转但黑屏,二是按开机键CPU风扇不转。我们先来分析比较简单第一种情况。“开机后CPU风扇转但黑屏”的故障原因一般可以通过主板BIOS报警音来区分,我们将常用主板BIOS报警音的意义列在后面。AWARDBIOS程序图片,开机时按DEL可进入一般我们的BIOS是AWARD,所以在这里我们只列这种BIOS的报警音含义。1短系统正常boot机2短常规错误,请进入CMOSSETUP重新设置不正确的选项1长1短RAM或主板出错1长2短显卡错误-----------------------常见1长3短键盘控制器错误1长9短BIOS损坏不断地响(长声)内存插不稳或损坏-------常见不停地响电源,显示器未和显示卡连接好重复短响电源如果你的电脑属于上文报警音中之一,你就可以“头疼医头,脚痛医脚”了。注意在上文中标出的两个“常见”项,这两项故障一般可以通过将配件拔下,用橡皮擦干净金手指重新安装上解决。据笔者经验,90%以上的这两种故障可以通过上述方式解决。还有时开机后,主板BIOS报警音没有响。这时,就需要注意一下主板硬盘指示灯(主机上显眼处红色的那个),如果一闪一闪的(间隔不定),像是不断的在读取硬盘数据,正常启动的样子,那就将检查的重点放在显示器上。如果确定是显示器的问题,就只能送维修站了。注意:普通用户请不要自行打开显示器后盖进行维修,里面有高压电。如果主板硬盘指示灯长亮,或是长暗的话,就要将检查的重点放在主机上。可以试着将内存、显卡、硬盘等配件逐一插拔的方式来确认故障源。如果全部试过后,电脑故障依然没有解决,就只能送维修站了。估计故障是:CPU或主板物理损坏。电脑常见故障之三——开机无响应(下)下面我们来分析“按开机键CPU风扇不转”的故障原因。这种故障可以说是最难处理的,尤其是在没有任何专业设备的情况下。笔者只能根据以往的维修经验给出一些确实可行的检验步骤。请注意,以下的每一步骤全都是笔者曾经见到的实际故障案例。电脑主机一大杀手——灰尘1、检查电源和重启按键是不是出了物理故障,最常见的是按下去起不来,两个按键的任一个出现这种问题,均可以造成电脑无法正常开机。解决方法只能送修或更换机箱,因为机箱由于集成在机箱内部,普通用户很难修理。2、打开机箱,将主板BIOS电源拔下,稍等一会,再重新按上,看电脑是否可以正常运行。3、将主板与机箱的链接线全部拔下,用螺丝刀碰触主板电源控制针(由于有许多针,电源控制针的确认请参照主板说明书,别乱碰,会烧主板的),如果正常开机,证明是机箱开机和重启键的问题。解决方法同上。4、将电源和主板、光驱、硬盘、软驱等设备相互之间的数据和电源线全部拔下,将主板背板所有设备,如显示器、网线、鼠标、键盘也全部拔下,吹干主板电源插座和电源插头上的灰尘后重新插上,开机。如果可以开机,再将设备一件一件插上,以确认故障源。确认后更新出故障的配件即可解决问题。以上四步全部试完了,依然不可以确定故障源的话,在现在设备的情况下,已经不能确定故障源所在,只能将电脑主机送维修站了。估计故障是:电源或主板烧毁。

pm2 是一个 Node.js 应用的进程管理器,它可以让你的应用程序保持运行,还有一个内建的负载均衡器。它非常简单而且强大,你可以零间断重启或重新加载你的 node 应用,它也允许你为你的 node 应用创建集群。

在这篇博文中,我会向你展示如何安装和配置 pm2 用于这个简单的 'Express' 应用,然后配置 Nginx 作为运行在 pm2 下的 node 应用的反向代理。

前提:

Ubuntu 16.04 - 64bit

Root 权限

第一步 - 安装 Node.js LTS

在这篇指南中,我们会从零开始我们的实验。首先,我们需要在服务器上安装 Node.js。我会使用 Nodejs LTS 6.x 版本,它能从 nodesource 仓库中安装。

从 Ubuntu 仓库安装 python-software-properties 软件包并添加 “nodesource” Nodejs 仓库。

sudo apt-get install -y python-software-properties

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

安装最新版本的 Nodejs LTS:

sudo apt-get install -y nodejs

安装完成后,查看 node 和 npm 版本。

node -v

npm -v

检查 node.js 版本

第二步 - 生成 Express 示例 App

我会使用 express-generator 软件包生成的简单 web 应用框架进行示例安装。express-generator 可以使用npm 命令安装。

用 npm安装 express-generator:

npm install express-generator -g

-g : 在系统内部安装软件包。

我会以普通用户运行应用程序,而不是 root 或者超级用户。我们首先需要创建一个新的用户。

创建一个名为 yume 的用户:

useradd -m -s /bin/bash yume

passwd yume

使用 su 命令登录到新用户:

su - yume

下一步,用 express 命令生成一个新的简单 web 应用程序:

express hakase-app

命令会创建新项目目录 hakase-app。

用 express-generator 生成应用框架

进入到项目目录并安装应用需要的所有依赖。

cd hakase-app

npm install

然后用下面的命令测试并启动一个新的简单应用程序:

DEBUG=myapp:* npm start

默认情况下,我们的 express 应用会运行在 3000 端口。现在访问服务器的 IP 地址:192.168.33.10:3000 :

express nodejs 运行在 3000 端口

这个简单 web 应用框架现在以 'yume' 用户运行在 3000 端口。

第三步 - 安装 pm2

pm2 是一个 node 软件包,可以使用 npm 命令安装。(用 root 权限,如果你仍然以 yume 用户登录,那么运行命令 exit 再次成为 root 用户):

npm install pm2 -g

现在我们可以为我们的 web 应用使用 pm2 了。

进入应用目录 hakase-app:

su - yume

cd ~/hakase-app/

这里你可以看到一个名为 package.json 的文件,用 cat 命令显示它的内容。

cat package.json

配置 express nodejs 服务

你可以看到 start 行有一个 nodejs 用于启动 express 应用的命令。我们会和 pm2 进程管理器一起使用这个命令。

像下面这样使用 pm2 命令运行 express 应用:

pm2 start ./bin/www

现在你可以看到像下面这样的结果:

使用 pm2 运行 nodejs app

我们的 express 应用正在 pm2 中运行,名称为 www,id 为 0。你可以用 show 选项 show nodeid|name获取更多 pm2 下运行的应用的信息。

pm2 show www

pm2 服务状态

如果你想看我们应用的日志,你可以使用 logs 选项。它包括访问和错误日志,你还可以看到应用程序的 HTTP 状态。

pm2 logs www

pm2 服务日志

你可以看到我们的程序正在运行。现在,让我们来让它开机自启动。

pm2 startup systemd

systemd: Ubuntu 16 使用的是 systemd。

你会看到要用 root 用户运行命令的信息。使用 exit 命令回到 root 用户然后运行命令。

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u yume --hp /home/yume

它会为启动应用程序生成 systemd 配置文件。当你重启服务器的时候,应用程序就会自动运行。

pm2 添加服务到开机自启动

第四步 - 安装和配置 Nginx 作为反向代理

在这篇指南中,我们会使用 Nginx 作为 node 应用的反向代理。Ubuntu 仓库中有 Nginx,用 apt 命令安装它:

sudo apt-get install -y nginx

下一步,进入到 sites-available 目录并创建新的虚拟主机配置文件。

cd /etc/nginx/sites-available/

vim hakase-app

粘贴下面的配置:

upstream hakase-app {

# Nodejs app upstream

server 127.0.0.1:3000

keepalive 64

}

# Server on port 80

server {

listen 80

server_name hakase-node.co

root /home/yume/hakase-app

location / {

# Proxy_pass configuration

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for

proxy_set_header Host $http_host

proxy_set_header X-NginX-Proxy true

proxy_http_version 1.1

proxy_set_header Upgrade $http_upgrade

proxy_set_header Connection "upgrade"

proxy_max_temp_file_size 0

proxy_pass http://hakase-app/

proxy_redirect off

proxy_read_timeout 240s

}

}

保存文件并退出 vim。

在配置中:

node 应用使用域名 hakase-node.co 运行。

所有来自 nginx 的流量都会被转发到运行在 3000 端口的 node app。

测试 Nginx 配置确保没有错误。

nginx -t

启用 Nginx 并使其开机自启动。

systemctl start nginx

systemctl enable nginx

第五步 - 测试

打开你的 web 浏览器并访问域名(我的是):http://hakase-app.co 。

你可以看到 express 应用正在 Nginx web 服务器中运行。

Nodejs app 在 pm2 和 Nginx 中运行

下一步,重启你的服务器,确保你的 node app 能开机自启动:

pm2 save

sudo reboot

如果你再次登录到了你的服务器,检查 node app 进程。以 yume 用户运行下面的命令。

su - yume

pm2 status www

nodejs 在 pm2 下开机自启动

Node 应用在 pm2 中运行并使用 Nginx 作为反向代理。

MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。

(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。

使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。

(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。

(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。

(1)文档数据类型

SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。

(2)即时查询能力

MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。

(3)复制能力

MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。

(4)速度与持久性

MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。

MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。

(5)数据扩展

MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。

MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。

MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。

mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。

mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。

mongosniff,网络嗅探工具,用来观察发送到数据库的操作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。

因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。

因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。

创建数据库并不是必须的操作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式。

以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。

使用java驱动链接MongoDB是一件非常简单的事情,简单的引用,简单的做增删改查。在使用完java驱动后我才发现spring 对MongoDB 的封装还不如官方自身提供出来的东西好用,下面简单的展示一下使用。

这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。

插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。

要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结操作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新操作。

如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。

在关于schema 的设计中要注意一些原则,比如:

数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。

集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 . 符号,但必须以字母或数字开头,完全。

限定集合名不能超过128个字符,实际上 . 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。

其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。

(1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 .explain()方法进行对比

(2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询

(3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的

(4)复合索引里的键的顺序是很重要的

(1)单键索引

(2)复合索引

(3)唯一性索引

(4)稀疏索引

如索引的字段会出现null的值,或是大量文档都不包含被索引的键。

如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过

当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用

对索引进行压缩,重建。

(1)查阅慢查询日志

(2)分析慢查询

注意新版本的MongoDB 的explain方法是需要参数的,不然只显示普通的信息。

本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性

提供主从复制能力,热备能力,故障转移能力

实际上MongoDB对副本集的操作跟mysql主从操作是差不多的,先看一下mysql的主从数据流动过程

而MongoDB主要依赖的日志文件是oplog

写操作先被记录下来,添加到主节点的oplog里。与此同时,所有从结点复制oplog。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目最后,把那些条目添加到自己的oplog里并应用到自己的库里。从节点使用长轮询立即应用来自主结点oplog的新条目。

当遇到以下情况,从节点会停止复制

local数据库保存了所有副本集元素据和oplog日志

可以使用以下命令查看复制情况

每个副本集成员每秒钟ping一次其他所有成员,可以通过rs.status()看到节点上次的心跳检测时间戳和 健康 状况。

这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点。

如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容。

(1)使用单节点链接

只能链接到主节点,如果链接到从节点的话,会被拒绝写入操作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉。

(2)使用副本集方式链接

能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况。

分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理,操作。

当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题

(1)分片组件

(2)分片的核心操作

分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置

块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据

(3)拆分与迁移

块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档。

迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。

启动两个副本集、三个配置服务器、一个mongos进程

配置分片

(1)分片查询类型

(2)索引

分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。

当创建分片时,会根据分片键创建一个索引。

(1)分片键是不可修改的、分片键的选择非常重要

(2)低效的分片键

(3)理想的分片键

(1)部署拓扑

根据不同的数据中心划分

这里写图片描述

(2)最低要求

(3)配置的注意事项

需要估计集群大小,可使用以下命令对现有集合进行分片处理

(4)备份分片集群

备份分片时需要停止均衡器

(1)部署架构

使用64位机器、32位机器会制约mongodb的内存,使其最大值为1.5GB

(2)cpu

mongodb 只有当索引和工作集都可放入内存时,才会遇到CPU瓶颈,CPU在mongodb使用中的作用是用来检索数据,如果看到CPU使用饱和的情况,可以通过查询慢查询日志,排查是不是查询的问题导致的,如果是可以通过添加索引来解决问题

mongodb写入数据时会使用到CPU,但是mongodb写入时间一次只用到一个核,如果有频繁的写入行为,可以通过分片来解决这个问题

(3)内存

大内存是mongodb的保障,如果工作集大小超过内存,将会导致性能下降,因为这将会增加数据加载入内存的动作

(4)硬盘

mongodb默认每60s会与磁盘强制同步一次,称为后台刷新,会产生I/O操作。在重启时mongodb会将磁盘里面的数据加载至内存,高速磁盘将会减少同步的时间

(5)文件系统

使用ext4 和 xfs 文件系统

禁用最后访问时间

(6)文件描述符

linux 默认文件描述符是1024,需要大额度的提升这个额度

(7)时钟

mongodb各个节点服务器之间使用ntp服务器

(1)绑定IP

启动时使用 - -bind_ip 命令

(2)身份验证

启动时使用 - -auth 命令

(3)副本集身份认证

使用keyFile,注意keyFile文件的权限必须是600,不然会启动不起来

(1)拓扑结构

搭建副本集至少需要两个节点,其中仲裁结点不需要有自己的服务器

(2)Journaling日志

写数据时会先写入日志,而此时的数据也不是直接写入硬盘,而是写入内存

但是Journaling日志会消耗内存,所以可以在主库上面关闭,在从库上面启动

可以单独为Journaling日志使用一块固态硬盘

在插入时,可以通过驱动确保Journaling插入后再反馈,但是会非常影响性能。

logpath 选项指定日志存储地址

-vvvvv 选项(v越多,输出越详细)

db.runCommand({logrotare:1}) 开启滚动日志

(1)serverStatus

这里写图片描述

(2)top

(3)db.currentOp()

动态展示mongodb活动数据

占用当前mongodb监听端口往上1000号的端口

(1)mongodump

把数据库内容导出成BSON文件,而mongorestore能读取并还原这些文件

(2)mongorestore

把导出的BSON文件还原到数据库

(3)备份原始数据文件

可以这么做,但是,操作之前需要进行锁库处理 db.runCommand({fsync:1,lock:true})

db.$cmd.sys.unlock.findOne() 请求解锁操作,但是数据库不会立刻解锁,需要使用db.currentOp()验证。

(1)修复

mongd --repair 修复所有数据库

db.runCommand({repairDatabase:1}) 修复单个数据库

修复就是根据Jourling文件读取和重写所有数据文件并重建各个索引

(2)压紧

压紧,会重写数据文件,并重建集合的全部索引,需要停机或者在从库上面运行,如果需要在主库上面运行,需要添加force参数 保证加写锁。

(1)监控磁盘状态

(2)为提升性能检查索引和查询

总的来说,扫描尽可能少的文档。

保证没有冗余的索引,冗余的索引会占用磁盘空间、消耗更多的内存,在每次写入时还需做更多工作

(3)添加内存

dataSize 数据大小 和 indexSize 索引大小,如果两者的和大于内存,那么将会影响性能。

storageSize超过dataSize 数据大小 两倍以上,就会因磁盘碎片而影响性能,需要压缩。