Docker 安裝 Redis 單機&集羣總結

前言

Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於 內存 分佈式 、可選持久性的鍵值對( Key-Value )存儲數據庫

安裝單機版

  • 安裝源:DockerHub

  • 默認配置文件:配置文件示例 6.2

  • 運行時指定配置文件

    • docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf
      
  • 局域網訪問配置

    • #不限制IP訪問,局域網能夠訪問
      bind 0.0.0.0
      #禁用保護模式
      protected-mode no
      
  • 設置密碼:requirepass devops666

  • v6.0 後的版本增加了通過 ACL 的方式設置用戶名密碼

  • 持久化:appendonly yes

  • 啓用後默認使用的 AOF(Append-Only File)持久化方式

  • AOF/RDB 等持久化方式文檔說明

  • compose.yml

    • version: '3.1'
      services:
        redis:
          container_name: db_redis_6_2
          image: redis:6.2.13
          restart: always
          command: redis-server /usr/local/etc/redis/redis.conf
          volumes:
            - ./data:/data
            - ./config/redis.conf:/usr/local/etc/redis/redis.conf
          ports:
            - "6379:6379"
          networks:
            - devopsnetwork
      
      networks:
        devopsnetwork:
          external: true
      
  • redis.conf

    • #不限制IP訪問,局域網能夠訪問
      bind 0.0.0.0 
      #禁用保護模式
      protected-mode no 
      
      #端口
      port 6379
      
      #密碼 
      requirepass devops666
      
      #開啓AOF日誌 指定持久化方式
      appendonly yes 
      
  • 安裝成功,可以使用 dbeaver 連接查看

搭建 Redis 集羣

Redis 集羣是一種高可用、可水平擴展的 Redis 部署方式。它將 Redis 數據庫分佈在多個節點上,是爲了提供高性能、高可用性和可伸縮性而設計的分佈式 Redis 解決方案

需要注意的點

  • 配置、管理和維護成本相對高
  • 不支持多數據庫,只能使用 0 數據庫
  • 不支持跨節點的事務操作
  • 批量操作時支持有限,如數據不在一個節點,則會報錯
  • 在部署 Redis 集羣模式時,至少需要六個節點組成集羣才能保證集羣的可用性。

集羣規劃

  • 節點分配

    • devops02:192.168.123.216
    • devops03:192.168.123.219
    • devops04:192.168.123.222
  • 端口分配

    • 6389: redis 訪問端口
    • 16389: 集羣端口, 普通端口號加 10000,集羣節點之間的通訊
  • 不要設置密碼,未找到節點間通信帶密碼的解決方案,-a password 只是主節點訪問使用

  • 集羣的 redis 配置模板

    • #端口
        port 6380
      
        #是否開啓 Redis 集羣模式
        cluster-enabled yes
      
        #設置 Redis 集羣配置信息及狀態的存儲位置
        cluster-config-file nodes.conf
      
        #設置 Redis 羣集節點的通信的超時時間
        cluster-node-timeout 5000
        appendonly yes
        daemonize no
        protected-mode no
        pidfile  /data/redis.pid
      
        #主節點需要的最小從節點數,只有達到這個數,主節點失敗時,它從節點纔會進行遷移。
        # cluster-migration-barrier 1
      
        #設置集羣可用性
        # cluster-require-full-coverage yes
        # 集羣節點 IP,如果要外部訪問需要修改爲宿主機IP,如:192.168.123.216 
        # cluster-announce-ip 默認172.x.x.x
        #客戶端連接端口
        #cluster-announce-port 6380
        #節點間通信端口
        #cluster-announce-bus-port 16380
      
  • docker compose.yml 配置模板

    • version: '3.1'
        services:
          redis:
            container_name: cluster_redis_6380
            image: redis:6.2.13
            restart: always
            command: redis-server /usr/local/etc/redis/redis.conf
            volumes:
              - ./data:/data
              - ./config/redis.conf:/usr/local/etc/redis/redis.conf
            ports:
              - '6380:6380'
              - '16380:16380'
      

集羣部署

將上面的配置模板文件按下面的目錄結構創建

- node-cluster
  - redis-6380
    - config
      - redis.conf :需要配置模板中修改 port:6380
    - compose.yml:需要配置模板中修改 container_name: cluster_redis_6380
  - redis-6381
    - config
      - redis.conf :需要配置模板中修改 port:6381
    - compose.yml:需要配置模板中修改 container_name: cluster_redis_6381
  1. 修改 redis.conf 中的 port

  2. 修改 compose.yml 中的 container_name: cluster_redis_6381

  3. 將 node-cluster 目錄上傳到準備的集羣節點服務器:192.168.123.216,192.168.123.219,192.168.123.222

  4. 在服務器的對應目錄中執行 docker compose up -d,確保容器正常運行

  5. 依託於創建的 redis 容器,使用下面的命令創建集羣並添加節點

      devops02=192.168.123.216
      devops03=192.168.123.219
      devops04=192.168.123.222
      docker exec -it cluster_redis_6380 redis-cli -p 6380 --cluster create \
      ${devops02}:6380 \
      ${devops02}:6381 \
      ${devops03}:6380 \
      ${devops03}:6381 \
      ${devops04}:6380 \
      ${devops04}:6381 \
      --cluster-replicas 1 \
      --cluster-yes
    

  6. 連接集羣測試(redis-cli)

    1. docker exec -it cluster_redis_6380 redis-cli -p 6380 -c
      
    2. 查看集羣信息:cluster info
    3. 查看集羣節點信息:cluster nodes
    4. 本地連接測試:redis-cli -h 192.168.123.216 -p 6380 -c

至此,終於是一步步的創建好了 Redis 集羣

集羣外部訪問問題

當 redis.conf 沒有設置 cluster-announce-ip 時,使用redis-cli訪問沒有問題,但是會發現連接時訪問節點會變成容器內部IP

導致的結果就是 使用一些Redis客戶端連接會超時,無法使用。要解決這個問題,需要將每個節點的 redis.conf 中的 cluster-announce-ip 配置修改爲其宿主機IP即可,可以這樣做

  • 新建對應文件夾及配置

  • 複製對應IP文件夾到服務器再創建集羣即可

  • 工具連接測試

後語

假期結束,先是折騰了一會創建集羣密碼的問題,然後又是嘗試各種連接工具,終於搞定了集羣的安裝,完美的假期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章