天天看點

群集—redis群集

1、單節點redis伺服器帶來的問題:

  • 單節點故障,服務不可用
  • 無法處理大量的并發資料請求
  • 資料丢失-大災難

2、解決方法:

  • 搭建Redis群集

3、Redis叢集介紹:

  • Redis叢集是一個提供在多個Redis間節點間共享資料的程式集。
  • Redis叢集并不支援處理多個keys的指令,因為這需要在不司的節點間移動資料,進而不到像Redis那樣的性能,在高負載的情況下可能會導緻不可預料的錯誤。
  • Redis叢集通過分區來提供—定程度的可用性,在實際環境中當某個節點當機或者不可達的情況下可繼續處理指令。

4、Redis叢集的優勢:

  • 自動分割資料到不同的節點上
  • 整個叢集的部分節點失敗或者不可達的情況下能夠繼續處理指令
  • Redis叢集的實作方法
    • 有用戶端分片
    • 代理分片
    • 伺服器端分片

5、Redis-Cluster資料分片:

  • Redis叢集沒有使用一緻性hash,而是引入了哈希槽概念
  • Redis 叢集有16384個哈希槽
  • 每個key通過CRC16校驗後對16384取模來決定放置槽
  • 叢集的每個節點負責一部分哈希槽
  • Redis-Cluster資料分片(續)
    • 以3個節點組成的叢集為例
      • 節點A包含О到5500号哈希槽
      • 節點B包含5501到11000号哈希槽
      • 節點C包含11001到16384号哈希槽
  • 支援添加或者删除節點
    • 添加删除節點無需停止服務
  • 例如
    • 如果想新添加個節點D,需要移動節點A,B,C中的部分槽到D上
    • 如果想移除節點A,需要将A中的槽移到B和C節點上,再将沒有任何槽的A節點從叢集中移除。

6、Redis-Cluster的主從複制模型:

  • 叢集中具有A,B,C三個節點,如果節點B失敗了,整個叢集就會因缺少5501-11006這個範圍的槽而不可用。
  • 為每個節點添加一個從節點A1,B1,C1,整個叢集便有三個master節點和三個slave節點組成,在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務
  • 當B和B1都失敗後,叢集将不可用。

7、案例實施:

  • 設定網絡參數、關閉防火牆和selinux(所有節點)
  • 下載下傳并安裝Redis(所有節點)
  • 修改Redis配置檔案(所有節點)
  • 建立Redis叢集(master1節點)
    • 導入key檔案并安裝rvm
    • 執行環境變量讓其生效
    • 安裝Ruby2.4.1版本
    • 安裝redis用戶端
    • 建立redis叢集
實驗準備:
兩台機子、
實驗過程:
在兩台機子上安裝redis資料庫:
iptables -F
setenforce 0
yum install gcc gcc-c++ -y
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd redis-5.0.7/
make 
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd /opt/redis-5.0.7/utils
./install_server.sh                後面一直回車  出現“Installtion successful!”
netstat -nultp | grep 6379
vim /etc/redis/6379.conf
70#  注釋掉                             添加群集裡面的所有節點的IP位址
89#yes>no
93#6379
137#daemonize yes                  去掉#
833#cluster-enabled yes
841#cluster-config-file nodes-6379.conf
847#luster-node-timeout 15000
700#appendonly yes
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
cd /var/lib/redis/6379/              >>ls   三個檔案

在master上:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
cd /opt/   将安裝腳本拖進來
chmod +x rvm-installer.sh              用來裝rub
./rvm-installer.sh
source /etc/profile.d/rvm.sh
rvm install 2.4.10
rvm use 2.4.10
gem install redis
配網卡    如果沒有顯示添加的網卡   systemctl start NetworkManager
iptables -F
setenforce 0
/etc/init.d/redis_6379 restart
redis-cli --cluster create 14.0.0.14:6379 14.0.0.135:6379 14.0.0.136:6379 14.0.0.15:6379 14.0.0.137:6379 14.0.0.132:6379 --cluster-replicas 1    ##建立資料庫群集
redis-cli -c -h ip(目标資料庫的位址)   ##用來進資料庫


當做redis群集時,出現不空的報錯情況時:
在所有的redis的節點上調試。
cd /var/lib/redis/6379/
rm -rf *
pkill redis-server
netstat -luntp | grep 6379
vim /etc/redis/6379.conf    的cluster-enabled yes
/etc/init.d/redis_6379 start 

在master上繼續創連結:
redis-cli --cluster create 14.0.0.14:6379 14.0.0.135:6379 14.0.0.136:6379 14.0.0.15:6379 14.0.0.137:6379 14.0.0.132:6379 --cluster-replicas 1
           

繼續閱讀