NoSQL之Redis叢集部署解析
文章目錄
前言
通過Redis叢集部署有效的解決了單位元組Redis伺服器帶來的問題,靈活運用Redis的配置操作與優化,在實際生活中應用設定。
一 部署原由
1.1 原由概述
1.單位元組Redis伺服器帶來的問題
單點故障,服務不可用
無法處理大量的併發資料請求
資料丟失——大災難
2.解決方法
搭建Redis叢集(至少3個,奇數個伺服器)
基於高可用性,有主備節點備份,叢集規模至少6個伺服器
1.2 部署配置前置知識點
1.2.1 Redis叢集介紹
1.Redis叢集是一個提供在多 個Redis間節點間共享資料的程式集
2.Redis叢集並不支援處理多個keys的命令,因為這需要在不同的節點間移動資料,從而達不到像Redis那樣的效能,在高負載的情況下可能會導致不可預料的錯誤
3.Redis叢集通過分割槽來提供一定程度的可用性,在實際環境中當某個節點當機或者不可達的情況下可繼續處理命令
1.2.2 Redis叢集的優勢
1.自動分割資料到不同的節點上
2.整個叢集的部分節點失敗或者不可達的情況下能夠繼續處理命令
(資料順序儲存,有主備替補)
1.2.3 Redis叢集的實現方法
有客戶端分片
代理分片
伺服器端分片
1.2.4 Redis-Cluster資料分片
Redis叢集沒有使用一致性hash,而是引入了雜湊槽(資料儲存空間)概念
Redis叢集有16384個雜湊槽(0-16383)
每個key通過CRC1 6校驗後對16384取模來決定放置槽
叢集的每個節點負責一部分雜湊槽
1.2.5 部署操作簡化
1.以3個節點組成的叢集為例
節點A包含0到5500號雜湊槽
節點B包含5501到11000號雜湊槽
節點C包含11001到16383號雜湊槽
2.支援新增或者刪除節點
新增刪除節點無需停止服務
3.講解
如果想新新增個節點D,需要移動節點A, B, C中的部分槽到D上
如果想移除節點A,需要將A中的槽移到B和C節點上,再將沒有任何槽的A節點從叢集中移除
1.2.6 Redis-Cluster的主從複製模型
1.叢集中具有A,B,C三個節點,如果節點B失敗了,整個叢集就會因缺少5501-11000這個範圍的槽而不可用
2.為每個節點新增一一個從節點A1, B1, C1,整個叢集便有三個master節點和三個slave節點組成,在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務
3.當B和B1都失敗後,叢集將不可用
二 部署解析
2.1 部署環境圖示
2.2 實施操作
1.設定網路引數、關閉防火牆和selinux(所有節點)
2.下載並安裝Redis(所有節點)
3.修改Redis配置檔案(所有節點)
4.建立Redis叢集(master1節點)
匯入key檔案並安裝rvm
執行環境變數讓其生效
安裝Ruby2.4. 1版本
安裝redis客戶端
建立redis叢集
2.3 部署準備
2.3.1 專案裝置
redis-server1 (主伺服器):20.0.0.10
redis-server2 (主伺服器):20.0.0.11
redis-server3 (主伺服器):20.0.0.12
redis-slave1 (備伺服器):20.0.0.13
redis-slave2 (備伺服器):20.0.0.14
redis-slave3 (備伺服器):20.0.0.15
2.3.2 專案準備
1.重新命名
[root@server1 ~]# hostnamectl set-hostname redis-server1
[root@server1 ~]# bash
[root@server2 ~]# hostnamectl set-hostname redis-server2
[root@server2 ~]# bash
[root@client1 ~]# hostnamectl set-hostname redis-server3
[root@client1 ~]# bash
[root@server1 ~]# hostnamectl set-hostname redis-slave1
[root@server1 ~]# bash
[root@localhost ~]# hostnamectl set-hostname redis-slave2
[root@localhost ~]# bash
[root@server6 ~]# hostnamectl set-hostname redis-slave3
[root@server6 ~]# bash
2.4 部署流程
2.4.1 首先安裝完成redis基礎配置
面向所有裝置
新增redis-5.0.4.tar.gz安裝包
1.解壓縮
[root@redis-server1 ~]# tar zxvf redis-5.0.4.tar.gz
2.安裝配置
[root@redis-server1 ~]# cd redis-5.0.4/
[root@redis-server1 redis-5.0.4]# make
[root@redis-server1 redis-5.0.4]# make PREFIX=/usr/local/redis install
更改安裝路徑可以用make PREFIX=安裝路徑 install
建立命令連結
[root@redis-slave3 redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@redis-slave3 redis-5.0.4]# cd
3.檢視安裝指令碼
[root@redis-server1 ~]# cd redis-5.0.4/utils/
[root@redis-server1 utils]# ls -lh
[root@redis-server1 utils]# ./install_server.sh 執行指令碼安裝
4.檢視埠狀態
[root@redis-slave1 ~]# netstat -anpt | grep redis
[root@redis-slave1 ~]# vi /etc/redis/6379.conf 編輯配置檔案
新增修改
bind 20.0.0.10 修改127.0.0.1為本機地址
cluster-enabled yes
appendonly yes 開啟AOF持久化
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage yes
[root@redis-server1 ~]# /etc/init.d/redis_6379 stop 關閉服務
[root@redis-server1 ~]# /etc/init.d/redis_6379 start 啟動服務
以上完成Redis基礎配置安裝
6臺redis伺服器啟動redis服務
2.4.1 在redis-server1上,使用指令碼建立群集
新增redis-3.2.0.gem
安裝軟體
[root@redis-server1 ~]# yum -y install ruby rubygems
[root@redis-server1 ~]# gem install redis-3.2.0.gem
建立群集配置
[root@redis-server1 ~]# redis-cli --cluster create --cluster-replicas 1 20.0.0.10:6379 20.0.0.11:6379 20.0.0.12:6379 20.0.13:6379 20.0.0.14:6379 20.0.0.15:6379
完成群集配置安裝部署
2.4.3 測試群集
在redis-slave1(20.0.0.13)伺服器上
[root@redis-slave1 ~]# redis-cli -h 20.0.0.13 -p 6379 -c 登入資料庫
20.0.0.13:6379> set weather sunny 新增weather鍵值為sunny
-> Redirected to slot [8949] located at 20.0.0.11:6379
提示儲存該鍵值的雜湊槽為8949,位置定位到在伺服器20.0.0.11上
OK 新增操作成功
20.0.0.11:6379> exit 退出資料庫
在redis-slave3(20.0.0.15)伺服器上
[root@redis-slave3 ~]# redis-cli -h 20.0.0.15 -p 6379 -c 登入資料庫
20.0.0.15:6379> get weather 獲取weather的鍵值
-> Redirected to slot [8949] located at 20.0.0.11:6379
提示儲存該鍵值的雜湊槽為8949,位置定位到在伺服器20.0.0.11上
"sunny" 鍵值為sunny
在redis-server2(20.0.0.11)伺服器上
[root@redis-server2 ~]# redis-cli -h 20.0.0.11 -p 6379 -c 登入資料庫
20.0.0.11:6379> get weather 獲取weather的鍵值
"sunny" 鍵值為sunny
在redis-server3(20.0.0.12)伺服器上
[root@redis-server3 ~]# redis-cli -h 20.0.0.12 -p 6379 -c 登入資料庫
20.0.0.12:6379> set centos 7.6 新增centos鍵值為7.6
-> Redirected to slot [467] located at 20.0.0.10:6379
提示儲存該鍵值的雜湊槽為467,位置定位到在伺服器20.0.0.10上
OK 新增操作成功
在redis-server1(20.0.0.10)伺服器上
[root@redis-server1 ~]# redis-cli -h 20.0.0.10 -p 6379 -c 登入資料庫
20.0.0.10:6379> get centos 獲取centos的鍵值
"7.6" 鍵值為7.6
可以在任意一臺伺服器上檢視群集資訊
redis-server1(20.0.0.10伺服器上
[root@redis-server1 ~]# redis-cli -h 20.0.0.10 -p 6379 -c
20.0.0.10:6379> cluster info 檢視群集資訊
20.0.0.10:6379> cluster nodes 檢視節點資訊
總結
通過以上對Redis叢集的學習瞭解,又增加掌握了一種叢集部署應用方式。
相關文章
- NoSQL之Redis配置解析SQLRedis
- Redis Cluster叢集模式部署Redis模式
- 【Redis叢集實戰】Redis Cluster 部署Redis
- Redis 4.0叢集環境部署Redis
- Redis Cluster叢集模式部署XRedis模式
- redis叢集之主從複製叢集的原理和部署Redis
- Redis-cluster叢集搭建部署Redis
- redis 叢集搭建以及redislive監測部署Redis
- Centos7部署Redis叢集CentOSRedis
- redis叢集之分片叢集的原理和常用代理環境部署Redis
- 玩轉Redis叢集之SentinelRedis
- 玩轉Redis叢集之CodisRedis
- 玩轉Redis叢集之ClusterRedis
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- redis Cluster模式叢集 多機器 docker 部署Redis模式Docker
- Docker部署系列之Docker Compose安裝Redis三主三從叢集DockerRedis
- redis叢集Redis
- redis 叢集Redis
- K8S如何部署Redis(單機、叢集)K8SRedis
- Kubernetes(k8s)部署redis-cluster叢集K8SRedis
- Redis叢集部署Redis
- Redis 叢集部署Redis
- Redis服務之叢集節點管理Redis
- 部署分片叢集
- Redis cluster 叢集Redis
- redis系列:叢集Redis
- Redis Cluster(叢集)Redis
- redis叢集原理Redis
- 搭建 Redis 叢集Redis
- redis叢集搭建Redis
- redis偽叢集配置Cluster叢集模式Redis模式
- Dubbo原始碼解析之服務叢集原始碼
- redis主從叢集搭建及容災部署(哨兵sentinel)Redis
- NoSQL之Redis叢集搭建——6臺伺服器,三臺主伺服器,三臺從伺服器SQLRedis伺服器
- Redis Cluster 叢集部署Redis
- NoSQL之Redis的配置優化SQLRedis優化
- Redis安裝之叢集-哨兵模式(sentinel)模式Redis模式
- 【Redis】用python操作redis叢集RedisPython