redis集群搭建(三主三从)
一、环境准备
每台机器有两个节点,一共六个节点(三主三从),主节点和从节点不在同一台机器上,有条件当然可以选择使用6台机器
地址 | 端口 |
---|---|
172.24.8.2 | 6379 6380 |
172.24.8.3 | 6379 6380 |
172.24.8.3 | 6379 6380 |
二、环境搭建
首先确保防火墙处于关闭状态否则创建集群时候会报错
这种情况只需要关闭防火墙即可
systemctl stop firewalld && systemctl disable firewalld
安装语言环境
yum -y install gcc gcc-c++
创建目录
mkdir -p /data/redis/redis_cluster/6379
mkdir -p /data/redis/redis_cluster/6380
拷贝bin/redis.conf 6379和6380的目录下面
并分别修改他们的端口
redis.conf 配置文件
bind 172.24.8.2
#requirepass oa123456
daemonize yes
pidfile /var/run/redis_6379.pid
logfile ""
stop-writes-on-bgsave-error no
dir ./
maxmemory 1GB
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
aof-use-rdb-preamble yes
#新增
cluster-enabled yes
cluster-config-file nodes_6379.conf
cluster-node-timeout 15000
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
databases 16
always-show-logo yes
rdbcompression yes
rdbchecksum yes
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动redis
bin/redis-server redis_cluster/6379/redis.conf
bin/redis-server redis_cluster/6380/redis.conf
三、创建集群
bin/redis-cli --cluster create 172.24.8.2:6379 172.24.8.2:6380 172.24.8.3:6379 172.24.8.3:6380 172.24.8.4:6379 172.24.8.4:6380 --cluster-replicas 1 -a oa123456
出现绿色表示集群创建成功
登录进去并查看集群各节点
bin/redis-cli -c -h 172.24.8.2 -p 6379
cluster nodes
cluster info
验证集群
四、设置密码
172.24.8.2:6379> config set requirepass oa123456
OK
172.24.8.2:6379> config rewrite
(error) NOAUTH Authentication required.
172.24.8.2:6379> auth oa123456
OK
172.24.8.2:6379> config rewrite
OK
172.24.8.2:6379>
Redis 出现(error)NOAUTH Authentication required
使用密码登录任意节点
bin/redis-cli -c -h 172.24.8.4 -p 6380 -a oa123456
五、加入到开机自启动服务
第一个redis端口6379
vim /etc/systemd/system/redis6379.service
内容添加如下
[Unit]
Description=redis6379-server
After=network.target
[Service]
Type=forking
ExecStart=/data/redis/bin/redis-server /data/redis/redis_cluster/6379/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动与停止与开机自启动
systemctl daemon-reload
systemctl start redis6379.service
systemctl stop redis6379.service
systemctl enable redis6379.service
第二个redis端口6380
vim /etc/systemd/system/redis6380.service
内容添加如下
[Unit]
Description=redis6380-server
After=network.target
[Service]
Type=forking
ExecStart=/data/redis/bin/redis-server /data/redis/redis_cluster/6380/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动与停止与开机自启动
systemctl daemon-reload
systemctl start redis6380.service
systemctl stop redis6380.service
systemctl enable redis6380.service
六、故障处理
发现有四个节点不在集群当中了,大概可能和设置密码有关系。
cluster forget
bin/redis-cli -c -h 172.24.8.2 -a oa123456 --cluster add-node 172.24.8.3:6379 172.24.8.3:6380 --cluster-slave --cluster-master-id 7ff17164a1dd665448a49f6526ea
33d036709b34
搭建集群时报错[ERR] Not all 16384 slots are covered by nodes.
其原因:
这个往往是由于主node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。所以在删除节点的时候一定要注意删除的是否是Master主节点。
解决办法:
1、使用如下命令来修复集群
# redis-cli --cluster fix host:port
bin/redis-cli --cluster fix 172.24.8.3:6379 -a oa123456
2、修复完成后再用check命令检查下是否正确,其命令如下:
# redis-cli --cluster check host:port
bin/redis-cli --cluster check 172.24.8.3:6379 -a oa123456
redis-cli --cluster check 127.0.0.1:6379
3、如果分布不均匀那可以使用下面的方式重新分配slot
# redis-cli --cluster reshar host:port
redis-cli --cluster reshard 127.0.0.1:6379
握手
echo 'cluster meet 172.24.8.3 6379' | /data/redis/bin/redis-cli -h 172.24.8.2 -p 6379 -a "oa123456"