Redis主從集群原理講解和Docker-compose安裝Redis主從集群
今日目標
掌握Docker-compose安裝Redis主從集群
單節(jié)點Redis的并發(fā)能力是有上限的,要進一步提高Redis的并發(fā)能力,就需要搭建主從集群,實現讀寫分離
- 主節(jié)點: 可以對Redis實現讀寫操作
- 從節(jié)點: 只可以對Redis實現讀操作
1.Redis主從集群安裝
1.1. 集群結構
搭建的主從集群結構如圖如下:
圖片
共包含三個節(jié)點,一個主兩個從。這里我們會在同一臺虛擬機中開啟3個redis實例,模擬主從集群,信息如下:
IP | PORT | 角色 |
192.168.150.102 | 6380 | master |
192.168.150.102 | 6381 | slave |
192.168.150.102 | 6382 | slave |
因為已經學習過Docker,所以使用Docker技術安裝Rdis主從集群
1.2. Docker-Compose安裝
【步驟一】:選擇合適版本的Docker-Compose
Linux 上我們可以從 Github 上下載它的二進制包來使用,選擇適應Docker版本的docker compose,使用Docker info 查看Docker對應的Docker-Compose版本,我的機器對應的是v2.21.0
docker info
【步驟二】:下載Docker-Compose對應的穩(wěn)定版本
將Docker-Compose下載后,放在/usr/local/bin/目錄下
curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
【步驟三】:將可執(zhí)行權限應用于Docker-Compose二進制文件
chmod +x /usr/local/bin/docker-compose
【步驟四】:測試是否安裝成功
docker-compose version
結果:
[root@www ~]# docker-compose version
Docker Compose version v2.21.0
圖片
如果您覺得本文不錯,歡迎關注,點贊,收藏支持,您的關注是我堅持的動力!
1.3. 準備實例和配置
要在同一臺虛擬機開啟3個實例,必須準備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。確保下面的配置已經更改(位置也別錯)
# master
## 創(chuàng)建主節(jié)點的配置文件
mkdir -p /redis-master-slave/master/config /redis-master-slave/master/data
cd /redis-master-slave/master/config/
curl -O -L http://download.redis.io/releases/redis-6.0.20.tar.gz
tar -zxvf redis-6.0.20.tar.gz
cp /redis-master-slave/master/config/redis-6.0.20/redis.conf /redis-master-slave/master/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave/master/config/redis.conf
# slave-1
## 創(chuàng)建從節(jié)點-1的配置文件
mkdir -p /redis-master-slave/slave-1/config /redis-master-slave/slave-1/data
cd /redis-master-slave/slave-1/config/
cp /redis-master-slave/master/config/redis-6.0.20/redis.conf /redis-master-slave/slave-1/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave/slave-1/config/redis.conf
# slave-2
## 創(chuàng)建從節(jié)點-2的配置文件
mkdir -p /redis-master-slave/slave-2/config /redis-master-slave/slave-2/data
cd /redis-master-slave/slave-2/config/
cp /redis-master-slave/master/config/redis-6.0.20/redis.conf /redis-master-slave/slave-2/config/redis.conf
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /redis-master-slave/slave-2/config/redis.conf
1.4. docker-compose-redis-master-slave.yml文件的編寫
創(chuàng)建名稱為docker-compose-redis-master-slave.yml用于安裝Redis主從集群的docker-compose文件
version: '3'
services:
# 主
master:
image: redis:6.0.20 # 鏡像'redis:6.0.20 '
container_name: redis-master # 容器名為'redis-master'
restart: unless-stopped # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經停止了的容器
command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly no # 啟動redis服務并添加密碼為:123456,默認不開啟redis-aof方式持久化配置
environment: # 設置環(huán)境變量,相當于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 數據卷掛載路徑設置,將本機目錄映射到容器目錄
- "/redis-master-slave/master/data:/data"
- "/redis-master-slave/master/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件內容`http://download.redis.io/redis-stable/redis.conf`
ports: # 映射端口
- "6380:6379"
# 從1
slave1:
image: redis:6.0.20 # 鏡像'redis:6.0.20 '
container_name: redis-slave-1 # 容器名為'redis-slave-1'
restart: unless-stopped # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經停止了的容器
command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly no --slaveof 192.168.150.102 6380 --masterauth 123456 # 啟動redis服務并添加密碼為:123456,默認不開啟redis-aof方式持久化配置,連接并認證master節(jié)點
environment: # 設置環(huán)境變量,相當于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 數據卷掛載路徑設置,將本機目錄映射到容器目錄
- "/redis-master-slave/slave-1/data:/data"
- "/redis-master-slave/slave-1/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件內容`http://download.redis.io/redis-stable/redis.conf`
ports: # 映射端口
- "6381:6379"
# 從2
slave2:
image: redis:6.0.20 # 鏡像'redis:6.0.20 '
container_name: redis-slave-2 # 容器名為'redis-slave-2'
restart: unless-stopped # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經停止了的容器
command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly no --slaveof 192.168.150.102 6380 --masterauth 123456 # 啟動redis服務并添加密碼為:123456,默認不開啟redis-aof方式持久化配置,連接并認證master節(jié)點
environment: # 設置環(huán)境變量,相當于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 數據卷掛載路徑設置,將本機目錄映射到容器目錄
- "/redis-master-slave/slave-2/data:/data"
- "/redis-master-slave/slave-2/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件內容`http://download.redis.io/redis-stable/redis.conf`
ports: # 映射端口
- "6382:6379"
1.4.1. 運行 -- 主從復制模式(主寫從讀)
使用Docker-Compos運行edocker-compose-redis-master-slave.yml進行安裝Redis主從集群
docker-compose -f docker-compose-redis-master-slave.yml -p redis up -d
1.4.2. 測試
- 1.進入redis-master容器
docker exec -it redis-master redis-cli -h 192.168.150.102 -p 6380 -a 123456
- 2.查看集群狀態(tài)
info replication
圖片
- 3.在redis-master容器執(zhí)行
set name zhangsan
get name
圖片
- 進入redis-slave-1容器
docker exec -it redis-master redis-cli -h 192.168.150.102 -p 6381 -a 123456
- 進入redis-slave-1容器執(zhí)行獲取數據
get name
- 進入redis-slave-1容器執(zhí)行寫數據
set name lisi
發(fā)現報錯,因為從節(jié)點只能讀取數據,不能謝數據
圖片