検索

mongodb复制集的搭建

Jun 07, 2016 pm 04:06 PM
mongomongodbコピーコピー建てるグループノード

副本集是一组,由N个mongo节点组成并协同工作的,提供自动的故障集群转移。 通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,其中有一个主服务器(primary),用户处理客户端请求,还有多个备份服务器(secondary),

副本集是一组,由N个mongo节点组成并协同工作的,提供自动的故障集群转移。

通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,其中有一个主服务器(primary),用户处理客户端请求,还有多个备份服务器(secondary),用户保存主服务器的数据副本。并且当主库奔溃时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。同时需要三台服务器或者数据库就可以满足。以上也是其的主要优势所在。

建立一个副本集需要步骤,1、需要启动每个节点,2、然后进行初始化设置。在这里,我们将配置一组(三个节点,可以使用两个数据节点一个仲裁节点),一般三个节点也是标准设置。一旦mongod节点启动,我们将发出一个命令,以正确地初始化设置。几秒钟后,将选举产生一个主节点,你就可以开始写和查询集。

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

具体搭建如下:

1.启动三个节点(两个数据节点,一个仲裁节点)

介绍一下涉及到的参数

--dbpath 数据文件路径

--logpath 日志文件路径

--port 端口号,默认是27017.我这里使用的也是这个端口号.

--replSet 复制集的名字,一个replicasets中的每个节点的这个参数都要用一个复制集名字

--replSet replcopy / 这个后面跟的是其他standard节点的ip和端口

--maxConns 最大连接数

--fork 后台运行

--logappend 日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

1>启动第一个standard节点(ip:192.168.191.151)

/u01/mongo/bin/mongod--dbpath=/u01/mongodb/data/ --logpath=/u01/mongodb/logs/node1.log--oplogSize400 --maxConns=2000 --replSet replcopy/192.168.191.151:27017 --fork

2>启动第二个standard节点 (ip:192.168.191.150)

/u01/mongo/bin/mongod--dbpath=/u01/mongodb/data/ --logpath=/u01/mongodb/logs/node2.log --oplogSize 400--maxConns=2000 --replSet replcopy/192.168.191.150:27017 --fork

3>启动arbiter节点,也就是仲裁节点 (ip:192.168.191.150)。注意!--replSet replcopy/后面写的是两个standard节点的ip和端口

/u01/mongo/bin/mongod--dbpath=/u01/mongodb/arbiter/ --port 20000 --logpath=/u01/mongodb/logs/arbiter.log--replSet replcopy/192.168.191.150:27017,192.168.191.151:27017 --fork

2.很关键的一步,配置完上面,下面开始初始化各个节点。在第一个启动的节点上,运行mongo

cfg = { _id: "replcopy", members:[ { _id:0,host:"192.168.191.150:27017"}, { _id:1, host:"192.168.191.151:27017"} ]}

rs.initiate(cfg)

3.加入arbiter(仲裁)节点

1.PRIMARY>rs.addArb("192.16.191.150:2000");

到了这里,这个集群已经配置完成,三个节点的角色已经分配完毕,怎么查看是否正常呢

1.rs.status()通过这个命令,可以查看各个节点的ip、角色已经是否正常

2.rs.stepDown() 这个命令可以强制primary和standard节点角色互换,从而验证是否能够实现failover功能,在主节点上运行。

注意:添加新节点前,一定要配置好防火墙,开放对应的IP及PORT。

添加普通数据节点

PRIMARY>rs.add("ip:port")

删除节点

PRIMARY>rs.remove("ip:port")

显示当前谁是primay

PRIMARY> rs.isMaster()

注mongodb复制为什么要三台机器以上

首先介绍一下在replicaset里分为三种节点类型:

1>primary 负责client的读写。

2 >secondary作为热备节点,应用Primary的oplog读取的操作日志,和primary保持一致,不提供读写操作!

secondary有两种类型:

1)normal secondary 随时和Primay保持同步,

2)delayed secondary 延时指定时间和primary保持同步,防止误操作.

3 >arbiter.它不负责任何读写,只作为一个仲裁者,负责primary down的时候剩余节点的选举操作

为什么我们要添加一个仲裁节点,具体说明如下:

如果创建两节点的Replica Sets,一主一备secondary,如果Secondary宕机,Primary会变成Secondary!这时候集群里没有Primary了!为什么会出现这样的情况呢。

这是和MongoDB的Primary选举策略有关的,如果情况不是Secondary宕机,而是网络断开,那么两个节点都会选取自己为Primary,因为他们能连接上的只有自己这一个节点。而这样的情况在网络恢复后就需要处理复杂的一致性问题。而且断开的时间越长,时间越复杂。所以MongoDB选择的策略是如果集群中只有自己一个节点,那么不选取自己为Primary。

所以正确的做法应该是添加两个以上的节点,或者添加arbiter,当然最好也最方便的做法是添加arbiter,aribiter节点只参与选举,几乎不会有压力,所以你可以在各种闲置机器上启动arbiter节点,这不仅会避免上面说到的无法选举Primary的情况,更会让选取更快速的进行。因为如果是三台数据节点,一个节点宕机,另外两个节点很可能会各自选举自己为Primary,从而导致很长时间才能得出选举结果。实际上集群选举主库上由优先级和数据的新鲜度这两个条件决定的。

db.getMongo().setSlaveOk() 在slave上可以使备库可读,从而实现负载的转移。

程序连接字符串形式:

mongodb://localhost,localhost:27018,localhost:27019

连接到三台服务器组成的Replica Sets,把所有写操作集中在主库,读操作分布在各丛库

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQL:世界で最も人気のあるデータベースの紹介MySQL:世界で最も人気のあるデータベースの紹介Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの重要性:データストレージと管理MySQLの重要性:データストレージと管理Apr 12, 2025 am 12:18 AM

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

なぜMySQLを使用するのですか?利点と利点なぜMySQLを使用するのですか?利点と利点Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。InnoDBロックメカニズム(共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロック)を説明します。Apr 12, 2025 am 12:16 AM

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。

貧弱なMySQLクエリパフォーマンスの一般的な原因は何ですか?貧弱なMySQLクエリパフォーマンスの一般的な原因は何ですか?Apr 12, 2025 am 12:11 AM

MySQLクエリのパフォーマンスが低いことの主な理由には、インデックスの使用、クエリオプティマイザーによる誤った実行計画の選択、不合理なテーブルデザイン、過剰なデータボリューム、ロック競争などがあります。 1.インデックスがゆっくりとクエリを引き起こし、インデックスを追加するとパフォーマンスが大幅に向上する可能性があります。 2。説明コマンドを使用してクエリ計画を分析し、オプティマイザーエラーを見つけます。 3.テーブル構造の再構築と結合条件を最適化すると、テーブルの設計上の問題が改善されます。 4.データボリュームが大きい場合、パーティション化とテーブル分割戦略が採用されます。 5.高い並行性環境では、トランザクションの最適化とロック戦略は、ロック競争を減らすことができます。

複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?複数の単一列インデックスに対して複合インデックスをいつ使用する必要がありますか?Apr 11, 2025 am 12:06 AM

データベースの最適化では、クエリ要件に従ってインデックス作成戦略を選択する必要があります。1。クエリに複数の列が含まれ、条件の順序が固定されている場合、複合インデックスを使用します。 2。クエリに複数の列が含まれているが、条件の順序が修正されていない場合、複数の単一列インデックスを使用します。複合インデックスは、マルチコラムクエリの最適化に適していますが、単一列インデックスは単一列クエリに適しています。

MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)MySQLでスロークエリを識別して最適化する方法は? (スロークエリログ、Performance_schema)Apr 10, 2025 am 09:36 AM

MySQLスロークエリを最適化するには、slowquerylogとperformance_schemaを使用する必要があります。1。LowerQueryLogを有効にし、しきい値を設定して、スロークエリを記録します。 2。performance_schemaを使用してクエリの実行の詳細を分析し、パフォーマンスのボトルネックを見つけて最適化します。

MySQLおよびSQL:開発者にとって不可欠なスキルMySQLおよびSQL:開発者にとって不可欠なスキルApr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン