redis 主從配置 | 叢集配置
主從配置 | 叢集配置
redis主從
主從配置原因:
1.到達讀寫分離,讀的操作和寫操作比例10 : 1讀資料頻繁,寫資料次數少,這樣可以配置1個master資料庫用來寫資料,配置多個slave從資料庫來滿足讀取操作
2.降低伺服器壓力,讀取資料訪問的速度加快
3.主的資料庫會將修改內容同步到從的資料庫-資料備份
配置步驟:
配置主:
1.修改etc/redis/redis.conf檔案:
bind 主資料庫ip地址
port 主資料庫埠號
2.重啟redis服務
sudo service redis stop
redis-server redis.conf
配置從:
1.複製etc/redis/redis.conf檔案
sudo cp redis.conf slaveof.conf
2.修改etc/redis/redis.conf檔案
2.0 sudo vim slaveof.conf
2.1 bind 從資料庫ip
2.2 port 從資料庫埠
2.3 修改slaveof 主資料庫ip地址 主資料庫埠號
3.重啟redis服務
3.1 最好先幹掉之前的redis服務
px aux | grep redis
sudo kill -9 pid
3.2 分別啟動主/從服務
sudo redis-server redis.conf
sudo redis-server slaveof.conf
4.檢視主從關係
redis-cli -h ip地址 -p 埠 info Replication
測試資料
1. master主服務
1.1 進入master客戶端: redis-cli -h -p 6379
1.2 master上寫入測試資料
set name james
2. slaveof從服務
2.1 進入slaveof客戶端: redis-cli -h -p 6378
2.2 讀取資料
get name
redis簡單的主從配置就這樣
redis叢集
叢集配置原因
- 叢集是一組相互獨立的、通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與叢集相互作用時,叢集像是一個獨立的伺服器。叢集配置是用於提高可用性和可縮放性。
當請求到來首先由負載均衡伺服器處理,把請求轉發到另外的一臺伺服器上。
配置步驟
1.在redis-config(叢集目錄)目錄下建立配置檔案7000.conf,7001.conf,7002.conf,7003.conf,7004.conf,7005.conf
注: 叢集最少需要6個伺服器
1.1 在配置檔案中進行如下配置:
port 埠
bind ip地址
daemonize yes
pidfile 7000.pid # 對應伺服器程序的pid
cluster-enabled yes # 開啟叢集
cluster-config-file 7000_node.conf # node節點檔案
cluster-node-timeout 15000
appendonly yes
2. 使用相應的配置檔案啟動redis服務
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf
redis-server 7003.conf
redis-server 7004.conf
redis-server 7005.conf
ps aux | grep redis
3. 建立叢集
- redis的安裝包中包含了redis-trib.rb,用於建立叢集
-
將命令複製,這樣可以在任何目錄下呼叫此命令
sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
-
安裝ruby環境,因為redis-trib.rb是用ruby開發的
- sudo apt-get install ruby
建立之前先確認一下gem源地址 : 國外的地址因為某種原因...
-- 先檢視使用的 gem 源是什麼地址
gem source -l -- 如果是https://rubygems.org/ 就需要更換
-- 更換指令為
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.com/ # 之前國內的.org域名已經失效
-- 通過 gem 安裝 redis 的相關依賴
sudo gem install redis
-- 然後重新執⾏指令
# redis-trib.rb : 建立叢集的命令關鍵字
# create: 建立叢集
# --replicas 1 :設定叢集的對應關係 1:1對1的關係(一個master對應一個slave)
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
會提示如下主從資訊: 並輸入yes
提示success 建立完成
資料測試
**叢集建立成功後,所有的伺服器都是master 沒有主從之分
**從上圖可以看到前三個7000,7001,7002 都有一個slots卡槽地址 範圍(16384) , 資料必須要在有卡槽的地方進行一個寫入和讀取, 而沒有卡槽的伺服器則需要藉助有卡槽的伺服器來進行資料的寫入和讀取
1. 加入叢集 注意連線伺服器 -c:表示加入叢集
redis-cli -h 127.0.0.1 -c -p 7002
2. 寫入資料
set name durant
由於7005並沒有卡槽,所以它借用了卡槽地址為5798的伺服器 , 並且重定向到了7001伺服器
3. 讀取資料並且修改資料
get name
set age 18
**這說明了叢集中任意伺服器均可以進行讀寫資料的操作,資料完全共享
資料儲存在哪個卡槽地址中,讀取要去卡槽地址對應的埠(ip)去讀取
**關於卡槽值如何計算並分配寫入資料
CRC16演算法
具體演算法:CRC16(key) % 16384
Redis叢集沒有並使用傳統的一致性雜湊來分配資料,而是採用另外一種叫做雜湊 槽 (hash slot)的公式來分配的。
redis cluster 預設分配了 16384 個slot,當我們 set一個key 時,會用CRC16演算法來取模得到所屬的slot,然後將這個key 分到哈 希槽區間的節點上,
具體演算法就是:CRC16(key) % 16384。所以我們在測試的 時候看到set 和 get 的時候,直接跳轉到了7000埠的節點
至此,一個簡單的redis叢集就基本配置完畢了