部署機(jī)器:
10-104-4-139
10-102-1-143
10-102-0-3
主節(jié)點(diǎn)3個(gè), 從節(jié)點(diǎn)3個(gè)
部署方法:
docker
三臺(tái)機(jī)器主從交替防止主從都在一臺(tái)機(jī)器情況下機(jī)器宕機(jī)的時(shí)候沒(méi)有從節(jié)點(diǎn)能夠恢復(fù)
一悴侵、docker環(huán)境搭建
// 安裝docker
yum install docker
// 啟動(dòng)
systemctl start docker
// 設(shè)置開(kāi)機(jī)啟動(dòng)
systemctl enable docker
// 安裝docker-compose
yum install dokcer-compose
二病蛉、docker-compose編寫
將redis-cluster(一主一從)容器與redis-exporter(用于prometheus監(jiān)控使用)結(jié)合到一起
version: '3.3'
services:
redis-node-1:
image: redis:6.2.4
container_name: redis-node-1
restart: always
dns_search: .
volumes:
- "/usr/local/redis/etc/redis-node-1.conf:/etc/redis/redis.conf"
- "/usr/local/redis/data/redis-node-1:/data"
# - "/usr/local/redis/log/redis-node-1.log:/tmp/redis.log"
network_mode: host
command: redis-server /etc/redis/redis.conf
redis-exporter-node-1:
image: bitnami/redis-exporter:latest
container_name: redis-node-1-exporter
restart: always
dns_search: .
ports:
- "9122:9121"
networks:
- redis-net
entrypoint: redis_exporter --redis.addr 172.17.0.1:6391 --redis.password de22760d7e6ffdd8b288bf986c54e085
redis-node-2:
image: redis:6.2.4
container_name: redis-node-2
restart: always
dns_search: .
volumes:
- "/usr/local/redis/etc/redis-node-2.conf:/etc/redis/redis.conf"
- "/usr/local/redis/data/redis-node-2:/data"
# - "/usr/local/redis/log/redis-node-2.log:/tmp/redis.log"
network_mode: host
command: redis-server /etc/redis/redis.conf
redis-exporter-node-2:
image: bitnami/redis-exporter:latest
container_name: redis-node-2-exporter
restart: always
dns_search: .
ports:
- "9123:9121"
networks:
- redis-net
entrypoint: redis_exporter --redis.addr 172.17.0.1:6392 --redis.password de22760d7e6ffdd8b288bf986c54e085
networks:
redis-net:
driver: bridge
redis配置
# 配置詳情參考https://blog.csdn.net/weixin_44236477/article/details/120339537
# 端口需要改成具體端口
port 6391
bind 0.0.0.0
loglevel warning
# 如果要使用docker的標(biāo)準(zhǔn)輸出就注釋該條
# logfile /tmp/redis.log
stop-writes-on-bgsave-error yes
rdbcompression no
rdbchecksum no
masterauth "de22760d7e6ffdd8b288bf986c54e085"
requirepass "de22760d7e6ffdd8b288bf986c54e085"
# 保護(hù)模式如果開(kāi)啟的話無(wú)法遠(yuǎn)程鏈接
protected-mode no
cluster-enabled yes
# 記錄集群節(jié)點(diǎn)信息
cluster-config-file nodes.conf
# 集群節(jié)點(diǎn)之間連接的超時(shí)時(shí)間(超過(guò)這個(gè)時(shí)間可能會(huì)導(dǎo)致被認(rèn)為掛掉導(dǎo)致頻繁的主從切換, 最好設(shè)置稍微大點(diǎn)這里設(shè)置12s)
cluster-node-timeout 12000
# 開(kāi)啟appendonly備份模式
appendonly yes
# 每秒鐘備份
appendfsync everysec
# 對(duì)aof文件進(jìn)行壓縮時(shí)是否執(zhí)行同步操作
no-appendfsync-on-rewrite no
# 當(dāng)當(dāng)前aof文件大小超過(guò)上一次重寫的aof文件大小的100%會(huì)再次進(jìn)行重寫 默認(rèn)為100
auto-aof-rewrite-percentage 200
# 重寫aof文件的大小最小值 默認(rèn)為64mb
auto-aof-rewrite-min-size 1024mb
# 可以配置值為1炒瘸。master的slave數(shù)量大于該值仓坞,slave才能遷移到其他孤立master上橱夭,如這個(gè)參數(shù)若被設(shè)為2嗤形,那么只有當(dāng)一個(gè)主節(jié)點(diǎn)擁有2 個(gè)可工作的從節(jié)點(diǎn)時(shí),它的一個(gè)從節(jié)點(diǎn)會(huì)嘗試遷移针贬。
cluster-migration-barrier 1
# 默認(rèn)情況下击费,集群全部的slot有節(jié)點(diǎn)負(fù)責(zé),集群狀態(tài)才為ok桦他,才能提供服務(wù)蔫巩。 設(shè)置為no,可以在slot沒(méi)有全部分配的時(shí)候提供服務(wù)快压。不建議打開(kāi)該配置圆仔,這樣會(huì)造成分區(qū)的時(shí)候,小分區(qū)的master一直在接受寫請(qǐng)求蔫劣,而造成很長(zhǎng)時(shí)間數(shù)據(jù)不一致
cluster-require-full-coverage no
# 一個(gè)lua腳本執(zhí)行的最大時(shí)間坪郭,單位為ms 默認(rèn)5000
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
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
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 512mb 215mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
repl-backlog-size 100mb
repl-backlog-ttl 3600
rename-command FLUSHALL ""
rename-command FLUSHDB ""
三、環(huán)境配置以及啟動(dòng)
在對(duì)應(yīng)的三臺(tái)機(jī)器依次執(zhí)行
mkdir -p /usr/local/redis && cd /usr/local/redis
mkdir data && mkdir etc && cd etc
vim redis-node-1.conf (將上面的redis配置復(fù)制進(jìn)去)
vim redis-node-2.conf (同上)
vim docker-compose.yml(將上面docker-compose復(fù)制進(jìn)行)
// 切記, 如果有開(kāi)啟防火墻的話要開(kāi)放redis的端口一起redis端口+10000端口(比如6379 16379)
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 6391,6392,16391,16392 -j ACCEPT (復(fù)制該句其中端口為你redis的端口 最好放到文件前面)
systemctl restart iptables
systemctl restart docker (docker沒(méi)有對(duì)宿主機(jī)防火墻的權(quán)限所以需要重啟同步)
// 啟動(dòng)容器脉幢, 如果出現(xiàn)該錯(cuò)誤ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule則重啟docker(systemctl restart docker)
docker-compose -f docker-compose.yml up -d
切記docker搭建redis集群不支持自建網(wǎng)絡(luò)M嵛帧`氯瘛!否則在創(chuàng)建集群的時(shí)候會(huì)一直等待加入
image.png
四沪曙、redis集群構(gòu)建
// 隨意進(jìn)入一臺(tái)集群機(jī)器
redis-cli -h 10.102.1.143 -p 6391 -a de22760d7e6ffdd8b288bf986c54e085 --cluster create 10.104.4.139:6391 10.104.4.139:6392 10.102.0.3:6391 10.102.0.3:6392 10.102.1.143:6391 10.102.1.143:6392 --cluster-replicas 1
image.png
五奕污、管理平臺(tái)以及監(jiān)控
- 搭建集群管理平臺(tái)redisinsight
mkdir -p /usr/local/redisinsight
chmod 777 /usr/local/redisinsight
docker run -d --restart=always --name redisinsight -v /usr/local/redisinsight:/db -p 8001:8001 redislabs/redisinsight:latest
// 需要做內(nèi)存分析的把自己rdb的目錄也掛載進(jìn)去
image.png
-
將redis-exporter注冊(cè)進(jìn)prometheus
這邊promehteus采用consul做服務(wù)發(fā)現(xiàn)所以忘c(diǎn)onsul里面注冊(cè)服務(wù)就行
image.png
image.png