1. 程式人生 > 其它 >MySQL 案例實戰--MySQL資料庫 多表查詢

MySQL 案例實戰--MySQL資料庫 多表查詢

技術標籤:學習redis筆記redis

Redis叢集

主從複製用來解決資料的冗餘備份,從節點僅僅用來同步資料,而哨兵機制實現了故障轉移,但是,哨兵機制無法解決:1)單節點併發壓力問題2)單節點記憶體和磁碟物理上限問題。

1.叢集

redis在3.0之後開始支援Cluster(模式),目前redis的叢集支援節點的自動發現,支援skave-master選舉和容錯,支援線上分片(sharding shard)等特性。

2. 叢集細節

  • 所有的redis節點彼此互聯(PING-PANG機制),內部使用二進位制協議優化傳輸速度和頻寬。

  • 節點的fail是通過叢集中超過半數的節點檢測失效時才會生效。

  • 客戶端與redis節點直連,不需要中間proxy層,客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可

  • redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster負責維護node<->slot<->value

在叢集中,通過CRC16演算法保證鍵均勻的分配到各個槽位,各個節點上。

CRC16演算法特點:

①對叢集模式下的所有key進行CRC16計算,計算的結果始終在0-16383之間

②對客戶端的key進行CRC16計算同一個key多次經過CRC16計算結果始終一致

③對客戶端的不同key進行CRC16進行計算,計算的結果會出現不同key的結果一致。

3. 叢集搭建

判斷一個叢集中的節點是否可用,是叢集中的所有主節點選舉過程,如果半數以上的節點認為當前節點掛掉,那麼當前節點就是掛掉了,所以搭建redis叢集時建議節點數最好為奇數,搭建節點最少需要三個主節點,三個從節點,至少需要六個點。

  1. 準備環境,安裝ruby以及redis叢集依賴
yum install -y ruby rubygems
gem install redis
  1. 在一臺機器建立7個目錄(為了方便管理,在test目錄下建立)。
 mkdir 7001 7002 7003 7004 7005 7006 7007
  1. 把redis.conf配置檔案分別拷貝七份到對應目錄
cp redis-6.0.10/redis.conf test/7001/
cp redis-6.0.10/redis.conf test/7002/
cp redis-6.0.10/redis.conf test/7003/
cp redis-6.0.10/redis.conf test/7004/
cp redis-6.0.10/redis.conf test/7005/
cp redis-6.0.10/redis.conf test/7006/
cp redis-6.0.10/redis.conf test/7007/
  1. 修改不同目錄配置檔案(除了埠和)
//把數字改為對應埠即可
port  7001         //修改埠
dbfilename dump-7001.rdb //資料檔案
appendfilename "appendonly-7001.aof" //AOF持久化日誌檔案
cluster-config-file nodes-7001.conf //叢集節點配置檔案

//以下引數配置改為一致
bind  0.0.0.0        //開啟遠端連線
cluster-enabled yes //開啟叢集模式
cluster-node-timeout 5000  //叢集節點超時時間
appendonly yes             //開啟AOF持久化
daemonize yes 		//守護程序啟動

  1. 指定不同目錄配置檔案啟動七個節點
./redis-server /root/test/7001/redis.conf
........
./redis-server /root/test/7007/redis.conf
  1. 檢視自己啟動的redis服務是否全部啟動成功

    ps -ef|grep redis
    
  2. 複製指令碼到redis的bin目錄中(新版本直接使用redis-cli操作,假如你用舊版本的方式操作,它會提示你使用新版本的操作命令)

    cp /root/redis-6.0.10/src/redis-trip.rb ./redis-trib.rb
    
  3. 啟動叢集服務

    注意這裡我沒有新增7007的服務,到時候7007的服務無法正常使用。

    ./redis-cli --cluster create 192.168.73.128:7001 192.168.73.128:7002 192.168.73.128:7003 192.168.73.128:7004 192.168.73.128:7005 192.168.73.128:7006 --cluster-replicas 1  
    

    執行命令之後,控制檯輸出問你Can I set the above configuration? (type ‘yes’ to accept),輸入yes之後,叢集就建立成功了。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-LkLgTon1-1611639129809)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20210125214432140.png)]

  4. 執行下面的命令檢視redis叢集狀態。

./redis-cli --cluster check 192.168.73.128:7001
  1. 連線叢集任意一節點
./redis-cli -p 7002 -c //redis聯機連線服務 ./redis-cli -p 7002是單機連線
  1. 叢集節點狀態說明

    通過不同的命令對key進行操作時,你會發現有時控制檯會重定向到其它服務對key進行操作,說明它的確是對key進行了CRC16演算法,將key分配到不同節點進行操作。

    • 主節點

      主節點存在hash slots,且節點的hash slots 沒有交叉

      主節點不能刪除

      一個主節點可以有多個從節點

      主節點宕機時多個副本之間自動選舉主節點

    • 從節點

      從節點沒有hash slots

      從節點可以刪除

      從節點不負責資料的寫,只負責資料的同步

  2. 新增主節點

    1. add-node --save [新加入節點] [原始叢集任意節點]
     ./redis-cli --cluster add-node 192.168.73.128:7007 192.168.73.128:7006
    

    新增新的主節點必須滿足以下條件

    ①庫必須為空,不能有任何內容②要新增的主節點必須先啟動

    節點新增完以後,你還得分片,新新增的節點才有slot。

    ./redis-cli --cluster reshard 192.168.73.128:7007
    

    執行完以後會有相關提示,分別輸入要新增slot(槽)的數量,以及剛剛新增的節點的id,輸入“all”,最後輸入“yes”,它就會重新分配節點到新新增的節點

    檢視叢集資訊,如圖埠為7007的master節點已經被分到了1000slot(槽)

     ./redis-cli --cluster check 192.168.73.128:7007
    

    偷個懶,關於節點的其它操作轉載別人的

    以下為轉載筆記:[原文][https://www.cnblogs.com/zhoujinyi/p/11606935.html]

    說明:redis-cli --cluster help

    [複製程式碼](javascript:void(0)