前言
Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於 內存 、 分佈式 、可選持久性的鍵值對( Key-Value )存儲數據庫
- redis版本:redis:6.2.13
- 作者:易墨
安裝單機版
-
安裝源:DockerHub
-
運行時指定配置文件
-
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)持久化方式
-
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
-
修改 redis.conf 中的 port
-
修改 compose.yml 中的 container_name: cluster_redis_6381
-
將 node-cluster 目錄上傳到準備的集羣節點服務器:192.168.123.216,192.168.123.219,192.168.123.222
-
在服務器的對應目錄中執行
docker compose up -d
,確保容器正常運行 -
依託於創建的 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
-
連接集羣測試(redis-cli)
-
docker exec -it cluster_redis_6380 redis-cli -p 6380 -c
- 查看集羣信息:
cluster info
- 查看集羣節點信息:
cluster nodes
- 本地連接測試:
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文件夾到服務器再創建集羣即可
-
工具連接測試
後語
假期結束,先是折騰了一會創建集羣密碼的問題,然後又是嘗試各種連接工具,終於搞定了集羣的安裝,完美的假期。