ノードでredisクラスター機能を使用するにはどうすればよいですか?次の記事では、node に基づいた Redis クラスター構成について詳しく説明します。
nodejs
での redis
クラスター関数の使用については、比較的完全な情報が見つかりませんでした。記事を読んで理解できたので、私も開発やデバッグの過程でかなり寄り道をしました。
この記事では、ローカルで Redis クラスターを構築する方法、クライアント上でクラスターを使用する方法、および構築プロセス中に発生する問題とエラーを要約して説明します。次回も利用します 必要に応じて寄り道をさせていただき、開発や作業の効率化を図ります。 クラスターを使用する背景: Redis シングルトン モードでは、ユーザー数と訪問数の増加に伴い、qps 値が急激に上昇し、大量の
io操作により、ある瞬間に一定量の占有が発生する cpu (100%)
がいっぱいになると、いつでもダウンタイムが発生するリスクがあります 同時に、redis などのバッチ処理症状を治療するだけで根本原因は治療しないため、 サーバー パフォーマンスのボトルネックを突破できません。したがって、クラスター ソリューションを使用するか、Redis インスタンスを追加することが不可欠です。
用語の説明 - クラスター
並列コンピューティング
に複数のコンピューターを使用して、非常に高い計算速度を実現できます。また、複数のコンピューターをバックアップに使用できるため、いずれかのマシンが壊れた場合でも、システム全体が復旧できます。まだ正常に機能しています。実行します。 (redis3.0 より前は、 Sentinel モードが一般的に使用されていましたが、 Sentinel の構成は若干複雑で、パフォーマンスと高可用性は平均的です ) redis クラスターの要件
投票フォールト トレランス メカニズムでは、ノードの半分以上がノードがダウンしていると認識する必要があるため、ノードはダウンしているため、2 つのノードでクラスターを形成することはできません。 Redis クラスターには少なくとも 3 つのノードが必要です。 クラスターの高可用性を確保するには、各ノードにスレーブ ノード (つまり、バックアップ ノード) が必要であるため、Redis
クラスターには少なくとも 6 台のサーバーが必要です。 (3 つのマスターと 3 つのスレーブ、3 つのデポジットと 3 つの取得、高可用性、バックアップ) もちろん、ローカルでデバッグするときにこれほど多くのサーバーを使用することは不可能です。ローカルでの実行をシミュレートする 6 redis
実際、運用環境での Redis クラスターのセットアップは基本的にここと同じです。 Mac 環境でローカル Redis クラスターを構築する
1. redis をダウンロードしてインストールします
公式サイトにインストールすることを選択できます。 Web サイト、または名前付き行を使用できます。 Installation#安装
brew install redis
#启动
redis-server
#进入redis客户端
redis-cli
2. redis を使用してクラスター環境を構成する
まず、redis 構成ファイルの場所を見つけます。
brew list redis
- # redis のインストール場所を確認します
-
cd /opt/homebrew/Cellar/redis/6.2.4
# 場所に基づいてバージョン番号が存在するフォルダーを入力します -
open .
# フォルダーを開きます -
Use
Xcode.app - homebrew.mxcl.redis.plist
を開きます。つまり、次のように
redis.confがある場所を見つけることができます。
##6 つのサービス構成ファイルを作成します
cd /opt/homebrew/etc/
# 需要在 /opt/homebrew/etc/ 路径下 mkdir -p redis/cluster/7000 mkdir -p redis/cluster/7001 mkdir -p redis/cluster/7002 mkdir -p redis/cluster/7003 mkdir -p redis/cluster/7004 mkdir -p redis/cluster/7005設定ファイルを変更します
/opt/homebrew/etc/redis.conf
ディレクトリ上に作成した redis/cluster/7000 にコピーして変更するだけです。手順は次のとおりです。
最初に構成ファイルをコピーして変更します
cd /opt/homebrew/etc/ # 进入配置文件目录 cp redis.conf redis/cluster/7000/7000.conf code redis/cluster/7000/7000.conf # 用编辑器打开或者用vim打开配置文件来进行修改
7000.conf#を入力します##その後、次のプロパティを変更します- #
# Redis端口号(7000-7005每个配置文件都要修改) port 7000 # 开启集群模式运行 cluster-enabled yes # 集群内部配置文件配置文件路径,默认nodes-6379.conf(7000-7005每个配置文件都要修改) cluster-config-file nodes-7000.conf # 节点间通信的超时时间 cluster-node-timeout 5000 # 数据持久化 appendonly yes
cd /opt/homebrew/etc/redis/cluster # 进入配置文件目录 cp 7000/7000.conf 7001/7001.conf cp 7000/7000.conf 7002/7002.conf cp 7000/7000.conf 7003/7003.conf cp 7000/7000.conf 7004/7004.conf cp 7000/7000.conf 7005/7005.conf
- その後、変更します
7001.conf-7005.conf
ポートおよびクラスタ構成ファイルの属性各構成ファイルの
- 注: 各構成ファイルは、
- の値を異なるように構成する必要があります(そうしないと、クラスターは有効になります)、上記はポートによって区別されます。
#構成ファイルのディレクトリは、
find /opt/homebrew -name nodes-7000.conf
コマンド ## で見つけることができます。 #3. クラスターサービスの起動と停止
##6 つのサービスを設定しているため、1 つずつ起動または停止することはできません。シェルを使用する必要があります。これを実現するためのスクリプト 进入 执行 执行 注意: 第一次执行./start.sh需要通过 Redis.Cluster提供了在多个Redis节点上自动分片的功能,使用前面搭建好的六个redis服务器,然后在本地启动 使用 替代集群的方案:在不需要数据同步和数据迁移的情况下,可以在客户端使用多个 1、Mac系统下连接redis报错? 控制台错误提示:Could not connect to Redis at 127.0.0.1:6379: Connection refused 原因:服务端没有开启或启动失败 解决办法:需要先启动redis服务端redis-server 参考链接 https://blog.csdn.net/qq_23347459/article/details/104257529 2、客户端启动、读写报错? 错误提示:ClusterAllFailedError: Failed to refresh slots cache. 原因:每个服务下的配置文件中的cluster-config-file属性一致。 处理:修改成唯一的属性值 参考链接1 https://stackoverflow.com/questions/57350961/ioredis-clusterallfailederror-failed-to-refresh-slots-cache 参考2 https://github.com/luin/ioredis/issues/711 3、执行创建主从redis语句失败? 执行语句: 提示错误: 原因:执行创建语句时,没有清空数据和重置集群 处理:清空数据和重置集群, 清除rdb和aof文件 参考清除redis数据 https://stackoverflow.com/questions/37206993/redis-server-cluster-not-working redis集群在客户端的使用是非常简单的,相比之下服务端的配置会比较繁琐。 客户端的具体使用只做了一下简单的说明,使用过程中要注意redis数据的同步和迁移等问题。 使用集群虽然能提升服务能力、支持主从复制、哨兵模式、读写分离、平分服务器的压力等特点。但不具备自动容错和恢复功能,如果出现宕机会使部分读写请求失败,降低了系统的可用性。在使用时根据业务情况分析、选择不同的方案。 本文转载自:https://juejin.cn/post/7079928963107127327 作者:tager 更多node相关知识,请访问:nodejs 教程!/opt/homebrew/etc/redis/cluster
目录,创建start.sh和stop.sh文件# start.sh 文件
#!/bin/sh
redis-server /opt/homebrew/etc/redis/cluster/7000/7000.conf &
redis-server /opt/homebrew/etc/redis/cluster/7001/7001.conf &
redis-server /opt/homebrew/etc/redis/cluster/7002/7002.conf &
redis-server /opt/homebrew/etc/redis/cluster/7003/7003.conf &
redis-server /opt/homebrew/etc/redis/cluster/7004/7004.conf &
redis-server /opt/homebrew/etc/redis/cluster/7005/7005.conf &
# stop.sh 文件
#!/bin/sh
redis-cli -p 7000 shutdown &
redis-cli -p 7001 shutdown &
redis-cli -p 7002 shutdown &
redis-cli -p 7003 shutdown &
redis-cli -p 7004 shutdown &
redis-cli -p 7005 shutdown &
./start.sh
或者./stop.sh
来启停服务ps -ef |grep redis
来查看已启动的redis服务sudo chmod +x start.sh
授权执行权限4. 相关命令
redis-cli -p 7000 # 单个客户端启动
redis-server 7000/7000.conf # 启动单个服务端
redis-cli -p 7000 shutdown # 关闭服务端
sudo chmod +x start.sh # 开启脚本执行权限
# 设置redis主从关系(三主三从)
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
cluster nodes #查看集群节点情况(进入某个客户端执行)
cluster info #查看集群信息(进入某个客户端执行)
查看所有key值:keys *
删除指定索引的值:del key
清空整个 Redis 服务器的数据:flushall
清空当前库中的所有 key:flushdb
客户端使用 ioredis 框架接入集群
node redis.js
,就可以测试集群的效果了。ioredis// redis.js
const Redis = require("ioredis");
const cluster = new Redis.Cluster([
{
port: 7000,
host: "127.0.0.1",
},
{
port: 7001,
host: "127.0.0.1",
},
]);
cluster.set("foo", "bar");
cluster.get("foo", (err, res) => {
// res === 'bar'
});
使用bull框架(redis 队列)
import Queue from 'bull'
// 创建redis队列实例
const instance = new Queue('custom', {
prefix : '{myprefix}',
createClient(type) {
// cluster 集群实例同上
return cluster
}
})
// 添加数据到redis队列(生产者)
instance.add(
'request',
{
...params
},
{
removeOnComplete: false
}
).catch(e => {
console.error(e)
})
// 消费者回调
instance.process('request', 5, async (job, done) => {
console.log('获取当前消费的数据:', job.data)
// 执行异步操作
await new Promise((resolve)=>resolve())
done()
})
bull
框架连接ioredis
集群时存在问题: 每次有数据push
到redis
队列时对应的回调函数可能会触发多次,目前无法确定是使用的问题还是框架本身的问题(如果有了解的欢迎大家留言告知)。redis
实例,结合Math.random()
使数据平分到其中的一个redis
,从而解决了单个实例硬件(cpu
等)瓶颈的问题。问题处理
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
# 以7000端口的服务为例,7001-7005重复以下操作
$redis-cli -p 7000
127.0.0.1:7000> flushall
127.0.0.1:7000> cluster reset
127.0.0.1:7000> exit
# 使用find找到rdb和aof文件(也在rdb目录下)
find /opt/homebrew -name dump.rdb
# 重新执行创建语句成功
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
结语
以上がノードでのRedisクラスター機能の使い方を詳しく見る【詳細設定】の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
