集群
1.Redis 集群的優勢
自動分割數據到不同的節點上。
整個集群的部分節點失敗或者不可達的情況下能夠繼續處理命令。
特點
主從復制
實現了高可用
數據分片存儲
集群節點的 meet
過程
image
image
指派槽
image
客戶端和槽
image
3. Redis 集群的安裝
原生命令安裝
步驟
配置開啟集群節點
配置
meet
指派槽
配置主從
實例操作
六個容器
三個主
三個從
務必保證一個主有一個從
架構圖
image
實驗步驟
安裝官方工具
- 首先使用docker鏡像起一個centos鏡像 里面已經裝有 redis 并且進入
1. 下載、編譯、安裝 Ruby
[root@s1 ~]# wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.gz
安裝依賴包
yum install zlib-devel readline openssl-devel gcc gcc-c++ make
$ ./configure
$ make
$ sudo make install
2. 安裝 rubygem redis
一個 ruby 語言實現的訪問 Redis 集群的客戶端
cd ..
wget https://rubygems.org/rubygems/rubygems-3.0.2.tgz
tar -xf rubygems-3.0.2.tgz
cd rubygems-3.0.2/
ruby setup.rb
gem install redis
3. 安裝 redis-trib.rb
這里的redis是源碼安裝
redis-trib
位于 Redis 源碼的 src
文件夾中, 它是一個 Ruby 程序, 這個程序通過向實例發送特殊命令來完成創建新集群, 檢查集群, 或者對集群進行重新分片(reshared
)等工作。
cp ~/redis-4.0.10/src/redis-trib.rb /usr/local/bin/
如果是使用yum安裝的redis的話 下面可能幫到你
image.png
image.png
放到和之前源碼一樣的位置即可
編輯集群配置文件
vi /etc/redis-cluster.conf
bind 0.0.0.0
port 7001 ---容器的話就不需要修改端口
daemonize yes --- 后臺啟動
# 允許任何地址不使用密碼訪問我
protected-mode yes
dir "/redis/data/"
logfile "cluster-7001.log"
dbfilename "cluster-dump-7001.log"
cluster-enabled yes
cluster-config-file redis-cluster.conf
# 不需要集群的全部節點完好才提供服務
cluster-require-full-coverage no
然后就可以啟動服務了
redis-server /etc/redis-cluster.conf
image.png
最后把這個部署好的容器進行commit成本地鏡像
docker commit 容器名/容器id redis-cluster
接下來我們就可使用docker-compose來進行集群啟動
version: "3.2"
services:
redis-clu-m1:
image: redis-ruby:latest
container_name: redis-clu-m1
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-m2:
image: redis-ruby:latest
container_name: redis-clu-m2
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-m3:
image: redis-ruby:latest
container_name: redis-clu-m3
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s1:
image: redis-ruby:latest
container_name: redis-clu-s1
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s2:
image: redis-ruby:latest
container_name: redis-clu-s2
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s3:
image: redis-ruby:latest
container_name: redis-clu-s3
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
networks:
cmdb_jumpserver-test:
external:
name: cmdb_jumpserver-test
注意:這里使用同一個網絡便于容器之間通信,鏡像不加標簽默認是latest,最后的網絡external代表著使用額外的網絡名 tty:true讓這個幾個容器在啟動后將這個終端給占住,不然會異常退出
這樣在啟動完docker-compose后我們就可以進入到容器中讓每個redis-server啟動
docker-compose exec redis-clu-m2 redis-server /etc/redis-cluster.conf
依次執行 只需要換個服務名即可
選擇一個服務器容器來進行集群部署 這里我們選擇的是redis-clu-m1來部署
redis-trib.rb create --replicas 1 主節點1的IP:端口 主節點2的IP:端口 主節點3的IP:端口 從節點1的IP:端口 從節點2的IP:端口 從節點3的IP:端口
依次將主從寫到后面 待會會一一對應
注意這兒不能使用容器名 不解析 需要提前將各個容器的ip地址給找出來
在redis-clu-m1中執行的命令
[root@3604a0ecd95c /]# redis-trib.rb create --replicas 1 172.29.0.6:6379 172.29.0.7:6379 172.29.0.4:6379 172.29.0.5:6379 172.29.0.3:6379 172.29.0.2:6379
-因為docker-compose是隨機啟動的 所以這里面的ip地址不會按順序
下面是執行的結果展示
集群配置
成功后的標志
檢查節點信息
在那個服務器上都可以查到,在任意服務器上能查任意的節點