Redis主從和叢集
主從概念
- 一個master可以擁有多個slave,一個slave又可以擁有多個slave。如此下去,形成了強大的多級伺服器叢集架構。
- master用寫資料,經統計:網站的讀寫比率是10:1
- 通過主從分離可以實現讀寫分離
-
master和slave都是一個redis例項(redis服務)
主從配置
Redis:
安裝 sudo apt-get install redis-server 解除安裝 sudo apt-get purge --auto-remove redis-server 啟動 sudo service redis-server start 停止 sudo service redis-server stop
## master ## #1. 修改 master配置 vim /etc/redis/redis.conf #2.修改bind為本機ip bind your_ip ## slave配置 ## #1.複製redis.conf 名為slave.conf cp redis.conf slave.conf # 2.修改配置 修改bind為本機ip bind your_ip #3.更改埠 例如 port 6378 #4. 更改slaveof slaveof your_ip 6379 redis-server /etc/redis/slave.conf
檢視主從關係 redis-cli -h your_ip -p your_port info Replication

或者:

當master中新增資料後,會自動備份到slave中,slave中read_only.
叢集
為什麼要有叢集?
- 如果訪問量過大(1000W),主服務肯定會掛掉,資料服務就掛掉了或者發生自然災難。
- 大公司都有跟多伺服器(華東地區,華南地區,華北地區,西北地區,西南地區等)
叢集概念
- 叢集式相互獨立的,通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與叢集相互作用時,叢集像是一個獨立的伺服器。叢集配置用於提高可用性和可縮放性。
當請求到來首先負載均衡伺服器處理,把請求轉發到另外一臺伺服器上。
分類
-
軟體層面
只有一臺電腦,在這臺電腦上啟動了多個redis服務。
-
硬體層面
存在多臺實體電腦,每臺電腦上啟動了一個或多個redis服務
機器一:
新建一個資料夾,建立7000.conf 7001.conf 7002.conf
port 7000 #(7000-7002) bind 172.21.0.16 #作為守護程序執行 daemonize yes pidfile 7000.pid #(7000-7002) cluster-enabled yes cluster-config-file 7000_node.conf #(7000-7002) #連線叢集的超時時間 cluster-node-timeout 15000 appendonly yes
啟動三個服務
redis-server 7000.conf
redis-server 7001.conf
redis-server 7002.conf

機器二相同配置
(7003-7005)
建立叢集
- 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
-
安裝redis相關依賴
sudo gem install redis
-
執行如下指令建立叢集
redis-trib.rb create --replicas 1 172.21.0.16:7000 172.21.0.16:7001 172.21.0.16:7002 172.21.0.16:7003 172.21.0.16:7004 172.21.0.16:7005
Redis 叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對 key 使用 crc16 演算法算出一個結果,然後把結果對 16384 求餘數, 這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大 致均等的將雜湊槽對映到不同的節點。
槽的分配:

資料驗證
連線 redis,例如進入7002
redis-cli -h 172.21.0.16 -c -p 7002

新增資料自動跳轉伺服器。