Redis集群部署-docker集群

集群

1.Redis 集群的優勢

自動分割數據到不同的節點上。
整個集群的部分節點失敗或者不可達的情況下能夠繼續處理命令。

特點

主從復制

實現了高可用

數據分片存儲

集群節點的 meet 過程

image
image

指派槽

image

客戶端和槽

image

3. Redis 集群的安裝

原生命令安裝

步驟

  1. 配置開啟集群節點

  2. 配置 meet

  3. 指派槽

  4. 配置主從

實例操作

六個容器
三個主
三個從
務必保證一個主有一個從

架構圖
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的話 下面可能幫到你

點擊到github下載redis-trib.rb

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地址不會按順序

下面是執行的結果展示

集群配置
成功后的標志

檢查節點信息

在那個服務器上都可以查到,在任意服務器上能查任意的節點

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容