集群
1.Redis 集群的優(yōu)勢(shì)
自動(dòng)分割數(shù)據(jù)到不同的節(jié)點(diǎn)上讯檐。
整個(gè)集群的部分節(jié)點(diǎn)失敗或者不可達(dá)的情況下能夠繼續(xù)處理命令。
特點(diǎn)
主從復(fù)制
實(shí)現(xiàn)了高可用
數(shù)據(jù)分片存儲(chǔ)
集群節(jié)點(diǎn)的 meet
過(guò)程
指派槽
客戶端和槽
3. Redis 集群的安裝
原生命令安裝
步驟
配置開(kāi)啟集群節(jié)點(diǎn)
配置
meet
指派槽
配置主從
實(shí)例操作
六個(gè)容器
三個(gè)主
三個(gè)從
務(wù)必保證一個(gè)主有一個(gè)從
架構(gòu)圖
實(shí)驗(yàn)步驟
安裝官方工具
- 首先使用docker鏡像起一個(gè)centos鏡像 里面已經(jīng)裝有 redis 并且進(jìn)入
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
一個(gè) ruby 語(yǔ)言實(shí)現(xiàn)的訪問(wèn) 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
文件夾中潭袱, 它是一個(gè) Ruby 程序摇零, 這個(gè)程序通過(guò)向?qū)嵗l(fā)送特殊命令來(lái)完成創(chuàng)建新集群, 檢查集群沽甥, 或者對(duì)集群進(jìn)行重新分片(reshared
)等工作声邦。
cp ~/redis-4.0.10/src/redis-trib.rb /usr/local/bin/
如果是使用yum安裝的redis的話 下面可能幫到你
點(diǎn)擊到github下載redis-trib.rb
放到和之前源碼一樣的位置即可
編輯集群配置文件
vi /etc/redis-cluster.conf
bind 0.0.0.0
port 7001 ---容器的話就不需要修改端口
daemonize yes --- 后臺(tái)啟動(dòng)
# 允許任何地址不使用密碼訪問(wèn)我
protected-mode yes
dir "/redis/data/"
logfile "cluster-7001.log"
dbfilename "cluster-dump-7001.log"
cluster-enabled yes
cluster-config-file redis-cluster.conf
# 不需要集群的全部節(jié)點(diǎn)完好才提供服務(wù)
cluster-require-full-coverage no
然后就可以啟動(dòng)服務(wù)了
redis-server /etc/redis-cluster.conf
最后把這個(gè)部署好的容器進(jìn)行commit成本地鏡像
docker commit 容器名/容器id redis-cluster
接下來(lái)我們就可使用docker-compose來(lái)進(jìn)行集群?jiǎn)?dòng)
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
注意:這里使用同一個(gè)網(wǎng)絡(luò)便于容器之間通信,鏡像不加標(biāo)簽?zāi)J(rèn)是latest,最后的網(wǎng)絡(luò)external代表著使用額外的網(wǎng)絡(luò)名 tty:true讓這個(gè)幾個(gè)容器在啟動(dòng)后將這個(gè)終端給占住摆舟,不然會(huì)異常退出
這樣在啟動(dòng)完docker-compose后我們就可以進(jìn)入到容器中讓每個(gè)redis-server啟動(dòng)
docker-compose exec redis-clu-m2 redis-server /etc/redis-cluster.conf
依次執(zhí)行 只需要換個(gè)服務(wù)名即可
選擇一個(gè)服務(wù)器容器來(lái)進(jìn)行集群部署 這里我們選擇的是redis-clu-m1來(lái)部署
redis-trib.rb create --replicas 1 主節(jié)點(diǎn)1的IP:端口 主節(jié)點(diǎn)2的IP:端口 主節(jié)點(diǎn)3的IP:端口 從節(jié)點(diǎn)1的IP:端口 從節(jié)點(diǎn)2的IP:端口 從節(jié)點(diǎn)3的IP:端口
依次將主從寫(xiě)到后面 待會(huì)會(huì)一一對(duì)應(yīng)
注意這兒不能使用容器名 不解析 需要提前將各個(gè)容器的ip地址給找出來(lái)
在redis-clu-m1中執(zhí)行的命令
[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
-因?yàn)閐ocker-compose是隨機(jī)啟動(dòng)的 所以這里面的ip地址不會(huì)按順序
下面是執(zhí)行的結(jié)果展示
在那個(gè)服務(wù)器上都可以查到亥曹,在任意服務(wù)器上能查任意的節(jié)點(diǎn)