系統(tǒng)為 Redhat 7.4 數(shù)據(jù)庫為 Redis 5.0.8 1. redis集群規(guī)劃節(jié)點編號 | IP地址 | 端口 | 節(jié)點類型 | 配置文件 |
---|
1 | 172.18.95.83 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf | 2 | 172.18.95.84 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf | 3 | 172.18.95.85 | 6379 | 主 | /home/redis/cluster/6379/redis_6379.conf | 4 | 172.18.95.83 | 6380 | 從 | /home/redis/cluster/6380/redis_6380.conf | 5 | 172.18.95.84 | 6380 | 從 | /home/redis/cluster/6380/redis_6380.conf | 6 | 172.18.95.85 | 6380 | 從 | /home/redis/cluster/6380/redis_6380.conf | 7 | 172.18.95.83 | 6381 | 從 | /home/redis/cluster/6381/redis_6381.conf | 8 | 172.18.95.84 | 6381 | 從 | /home/redis/cluster/6381/redis_6381.conf | 9 | 172.18.95.85 | 6381 | 從 | /home/redis/cluster/6381/redis_6381.conf |
2 安裝redis軟件首先我們根據(jù)以前的內(nèi)容安裝3套redis 其中配置文件的目錄參考上面的規(guī)劃 3.新建目錄三臺機器 su - redis mkdir -p /home/redis/cluster/6379 mkdir -p /home/redis/cluster/6380 mkdir -p /home/redis/cluster/6381 4.集群配置文件接下來我們分別在/home/redis/cluster目錄下建立哨兵配置文件(共9個) 這里以節(jié)點1為例,其他節(jié)點參考 其實只是比單機的配置文件多了一些集群相關(guān)的配置 節(jié)點1 $ cat /home/redis/cluster/6379/redis_6379.conf
daemonize yes bind 172.18.95.83 port 6379 tcp-backlog 1024 timeout 300 tcp-keepalive 300 databases 16 requirepass 123456 masterauth 123456
cluster-enabled yes cluster-node-timeout 15000 cluster-config-file nodes-6379.conf
pidfile "/home/redis/cluster/6379/redis_6379.pid"
loglevel notice logfile "/home/redis/cluster/6379/redis_6379.log"
dir "/home/redis/cluster/6379"
dbfilename "dump.rdb" stop-writes-on-bgsave-error no rdbcompression yes rdbchecksum yes
appendonly yes appendfilename "appendonly.aof" appendfsync everysec aof-load-truncated yes no-appendfsync-on-rewrite no aof-rewrite-incremental-fsync yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 32mb
maxclients 65503 maxmemory 1gb maxmemory-policy allkeys-lru
# replication slave-serve-stale-data yes slave-read-only yes repl-disable-tcp-nodelay no repl-backlog-size 32mb
# slow log slowlog-log-slower-than 10000 slowlog-max-len 1024
hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 512mb 512mb 60 client-output-buffer-limit pubsub 64mb 16mb 60
protected-mode yes
# security rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command KEYS ""
上面參數(shù)我們需要根據(jù)實際情況修改一些參數(shù) bind 172.18.95.84 127.0.0.1 監(jiān)聽地址,第一個使用本機IP地址 port 6380 監(jiān)聽端口 maxmemory redis允許使用的最大內(nèi)存,根據(jù)服務(wù)器配置和業(yè)務(wù)需求決定 requirepass 123456 redis密碼,可以注釋掉表示不設(shè)置 masterauth 123456 連接master時用的密碼,如master未設(shè)置可注釋掉 還需要根據(jù)實際修改配置文件和日志文件的路徑和名稱
5.啟動redis接下來我們啟動所有8個redis節(jié)點 啟動redis su - redis 172.18.95.83 /usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf /usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf /usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf 172.18.95.84 /usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf /usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf /usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf 172.18.95.85 /usr/local/bin/redis-server /home/redis/cluster/6379/redis_6379.conf /usr/local/bin/redis-server /home/redis/cluster/6380/redis_6380.conf /usr/local/bin/redis-server /home/redis/cluster/6381/redis_6381.conf 這時我們查看集群狀態(tài)發(fā)現(xiàn)是fail的,而且沒有其他節(jié)點的信息
集群文件也只有一個節(jié)點的信息 [redis@SYTEST1 6379]$ more nodes-6379.conf 9a74ab968c706a36d7a44427a45e4c151a8bfa63 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0 同時集群也是不能寫入的 172.18.95.83:6379> set hello world (error) CLUSTERDOWN Hash slot not served 172.18.95.83:6379> 6. 搭建集群接下來我們來搭建集群 除了手動搭建,我們這里使用命令來自動化安裝 redis 3和4的版本需要使用ruby腳本來完成自動化安裝,到了5的版本,該功能已經(jīng)集成到redis-cli命令中 我們輸入如下命令完成搭建 因為我們這里舍得6379端口是主節(jié)點所以我們將6379的端口寫在最前面 其中一個節(jié)點 redis-cli -a "123456" --cluster create 172.18.95.83:6379 172.18.95.84:6379 172.18.95.85:6379 172.18.95.83:6380 172.18.95.84:6380 172.18.95.85:6380 172.18.95.83:6381 172.18.95.84:6381 172.18.95.85:6381 --cluster-replicas 2
--cluster-replicas 2 表示一主兩從 這里填入yes 可以看到該命令已經(jīng)將從節(jié)點分配在不同節(jié)點上了,并且6379端口為主節(jié)點 最后完成了搭建并打印結(jié)果
對于集群我們只要保證主從節(jié)點不在同一個服務(wù)器就可以了,如果需要固定的主從關(guān)系,請使用后面的命令來改變關(guān)系 7.連接redis集群我們使用如下命令來連接集群,可選擇任一節(jié)點 [redis@SYTEST1 6379]$ redis-cli -h 172.18.95.83 -p 6379 -a 123456 -c 這里必須加入-c參數(shù),否則如果操作的key的slot值不在該節(jié)點會導(dǎo)致命令執(zhí)行失敗 8.查詢集群信息查詢節(jié)點信息 cluster nodes
查詢slot信息 該命令可以更直觀的查看集群的架構(gòu) cluster slots
查詢集群狀態(tài) cluster info
手動failover 有時集群宕機重啟后可能會導(dǎo)致主備節(jié)點在同一臺機器上,這時需要手動指定一個從節(jié)點成為主節(jié)點 從節(jié)點#172.18.95.83:6380> cluster failover 重新指定主庫 我們同樣可以手動指定從節(jié)點同步哪個主節(jié)點 后面跟的是主節(jié)點的node id 從節(jié)點># 172.18.95.85:6380> cluster replicate 2fb4d5cf998a562e1391c082eb34a1476c8f620f
|