拉取redis基礎(chǔ)鏡像
docker search redis
--搜索鏡像
docker pull redis
-- 拉取鏡像
運(yùn)行三個(gè)容器(在此之前可以自定義個(gè)網(wǎng)絡(luò)咐汞,防止docker容器重啟后集群失效)
生產(chǎn)環(huán)境搭建,建議掛載redis目錄(配置文件、數(shù)據(jù))春塌,權(quán)限驗(yàn)證等,保證集群安全簇捍,以下為了方便測(cè)試只壳,直接裸奔了。
一主二從
docker -d --name m1 -p 6379:6379 redis
docker -d --name s1 -p 6380:6379 redis
docker -d --name s2 -p 6381:6379 redis
獲取指定主機(jī)m1容器內(nèi)地址
docker inspect m1
--我的地址 172.17.0.3
開始搭建
分別進(jìn)入s1垦写、s2容器內(nèi)
docker exec -it s1 bash
docker exec -it s2 bash
進(jìn)入redis
redis-cli
綁定主機(jī)ip吕世、端口
slaveof 172.17.0.3 6379
進(jìn)入主機(jī)m1中
docker exec -it m1 bash
查看集群狀態(tài)
info replication
從主機(jī)寫入數(shù)據(jù)彰触,從機(jī)也會(huì)有相應(yīng)的數(shù)據(jù)
set name zhangsan
連接Laravel梯投,版本 8.2
這里我選擇的 predis 這個(gè)組件包,版本 ^2.0,根據(jù)自己需求拉取
"require": {
"predis/predis": "^2.0"
},
安裝
composer require predis/predis
書寫配置文件database.php
,主要關(guān)注 redis 這個(gè)數(shù)組
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'cluster' => false,
// 集群配置
'clusters' => [
// 連接的集群名稱
'cluster1' => [
// 配置寫入節(jié)點(diǎn)
'write' => [
[
'host' => '127.0.0.1',
'password' => '',
'port' => 6379,
'database' => 0,
]
// 更多的主節(jié)點(diǎn)
],
// 配置讀取節(jié)點(diǎn)
'read' => [
[
'host' => '127.0.0.1',
'port' => 6380,
'database' => 0,
],
[
'host' => '127.0.0.1',
'port' => 6381,
'database' => 0,
]
// .... 更多的子節(jié)點(diǎn)
],
],
],
'options' => [
'cluster' => env('REDIS_CLUSTER', 'predis'),
'prefix' => env('REDIS_PREFIX', ''),
]
]
寫入測(cè)試方法
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Redis;
class IndexController extends Controller {
public function index()
{
// 連接到 cluster1 集群
$redis = Redis::connection('cluster1');
for ($i = 0; $i < 5; $i++){
$redis->set('age-'.$i,$i);
}
}
}
訪問該方法分蓖,最終寫入數(shù)據(jù)
該主從模式的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 數(shù)據(jù)冗余和備份:主從復(fù)制模式提供了數(shù)據(jù)的冗余備份尔艇。主節(jié)點(diǎn)的數(shù)據(jù)會(huì)被復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn)上,從節(jié)點(diǎn)可以充當(dāng)主節(jié)點(diǎn)的備份么鹤,確保數(shù)據(jù)的可用性和持久性终娃。
- 擴(kuò)展讀取能力:從節(jié)點(diǎn)可以處理讀取請(qǐng)求,從而分擔(dān)主節(jié)點(diǎn)的讀取壓力蒸甜。通過將讀取請(qǐng)求分布到多個(gè)從節(jié)點(diǎn)上棠耕,可以提高系統(tǒng)的整體讀取吞吐量。
- 數(shù)據(jù)分析和備份:從節(jié)點(diǎn)可以用于數(shù)據(jù)分析柠新、報(bào)表生成和數(shù)據(jù)備份等用途窍荧,而不會(huì)對(duì)主節(jié)點(diǎn)造成影響。
缺點(diǎn)
- 寫入限制:從節(jié)點(diǎn)是只讀的恨憎,默認(rèn)不允許直接在從節(jié)點(diǎn)上進(jìn)行寫入操作蕊退。所有寫入操作必須通過主節(jié)點(diǎn)進(jìn)行,從節(jié)點(diǎn)只能接收主節(jié)點(diǎn)的數(shù)據(jù)復(fù)制憔恳∪坷螅可以通過
redis.conf
配置文件修改,將從節(jié)點(diǎn)的slave-read-only
參數(shù)設(shè)置為no
钥组,這會(huì)允許從節(jié)點(diǎn)進(jìn)行寫入操作输硝。 - 網(wǎng)絡(luò)傳輸開銷:主節(jié)點(diǎn)需要將數(shù)據(jù)復(fù)制到從節(jié)點(diǎn),這會(huì)產(chǎn)生網(wǎng)絡(luò)傳輸?shù)拈_銷程梦。如果網(wǎng)絡(luò)帶寬有限或延遲較高腔丧,可能會(huì)對(duì)數(shù)據(jù)同步的效率和速度產(chǎn)生影響。
- 單點(diǎn)故障:主節(jié)點(diǎn)是整個(gè)系統(tǒng)的核心作烟,如果主節(jié)點(diǎn)發(fā)生故障愉粤,整個(gè)系統(tǒng)可能會(huì)受到影響。在這種情況下拿撩,需要手動(dòng)進(jìn)行故障轉(zhuǎn)移和主節(jié)點(diǎn)切換來保證系統(tǒng)的可用性衣厘。