集群准备: | OS | IP | ROLE | PORT | | —- | —- | —- | —- | | Centos 7.6 | 172.17.20.50 | master,slave | 7001,17001,7002,17002 | | Centos 7.6 | 172.17.20.51 | master,slave | 7001,17001,7002,17002 | | Centos 7.6 | 172.17.20.52 | master,slave | 7001,17001,7002,17002 |
安装依赖:
yum -y install gcc automake autoconf libtool make
redis安装:
wget https://download.redis.io/releases/redis-5.0.4.tar.gztar zxvf redis-5.0.4.tar.gzmdkir /data/redis # 准备redis的工作目录cd redis-5.0.4/make PREFIX=/data/redis installcp src/redis* /data/redis/bincd /data/redis/bin && rm -rf *.c *.h *.o # 删除无用的文件
redis节点配置,172.17.20.50上操作
- 生成配置文件 ```bash cat > redis_7001.conf << EOF bind 0.0.0.0 protected-mode yes port 7001 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/run/redis_7001.pid loglevel notice logfile “/data/redis/redis_7001/logs/redis-7001.logs” databases 16 always-show-logo yes
rdb 持久化相关配置
save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump_7001.rdb dir /data/redis/redis_7001/data
主从复制相关配置
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
aof持久化相关配置,no表示未开启
appendonly no appendfilename “appendonly.aof” appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble 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
集群相关配置
cluster-enabled yes cluster-config-file nodes_7001.conf cluster-node-timeout 25000
集群密码认证(集群中所有节点密码必须一致,可不开启)
masterauth “SDFAgPjgGLK!8”
requirepass “SDFAgPjgGLK!8”
EOF
cp redis_7001.conf redis_7002.conf sed -i ‘s/7001/7002/g’ redis_7002.conf
2. 集群配置
```bash
cd /data/redis
mkdir -pv /data/redis/redis_7001/{logs,conf,data}
mkdir -pv /data/redis/redis_7002/{logs,conf,data}
# 将上边生成的两个配置文件分别放在所有机器对应目录下,redis_7001/conf/redis_7001.conf,redis_7002/conf/redis_7002.conf
# 将redis目录发送到其余两个节点
for i in 51 52; do scp -r /data/redis/redis_7001 172.17.20.${i}:/data/redis; done
for i in 51 52; do scp -r /data/redis/redis_7002 172.17.20.${i}:/data/redis; done
设置命令环境变量,所有节点上操作
echo 'export PATH=$PATH:/data/redis/bin/' >> /etc/profile source /etc/profile redis-server -v # 查看redis版本启动7001实例 ```bash redis-server redis_7001/conf/redis_7001.conf
确认端口是否正常启动
ss -tnlp | grep 7001 LISTEN 0 128 :7001 : users:((“redis-server”,pid=21310,fd=6)) LISTEN 0 128 :17001 : users:((“redis-server”,pid=21310,fd=8))
查看服务启动日志,发现有warning信息
cat redis_7001/logs/redis-7001.logs

5. 解决启动warnnig报警,三台机器都需要操作
1. 解决最大打开文件数
```bash
# 查看当前值,一般系统默认是1024
$ ulimit -n
1024
$ echo '* soft nofile 65535' >> /etc/security/limits.conf
$ echo '* hard nofile 65535' >> /etc/security/limits.conf
# 修改后,重新登录即可生效
2. 解决TCP积压值过小问题
$ echo "net.core.somaxconn = 65535" > /etc/sysctl.d/redis.conf
$ sysctl -p /etc/sysctl.d/redis.conf #刷新使其生效
net.core.somaxconn = 1024
3. 允许分配所有的物理内存
$ echo "vm.overcommit_memory = 1" >> /etc/sysctl.d/redis.conf
$ sysctl -p /etc/sysctl.d/redis.conf #刷新使其生效
net.core.somaxconn = 1024
vm.overcommit_memory = 1
4. 解决内存透明大页警告
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
#上述指令只是当前生效,重启后就会失效,接下来改为永久生效
$ echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
$ chmod +x /etc/rc.d/rc.local
$ redis-server redis_7001/conf/redis_7001.conf $ redis-server redis_7002/conf/redis_7002.conf
$ ss -tnlp | grep redis LISTEN 0 128 :7001 : users:((“redis-server”,pid=2864,fd=6)) LISTEN 0 128 :7002 : users:((“redis-server”,pid=2889,fd=6)) LISTEN 0 128 :17001 : users:((“redis-server”,pid=2864,fd=8)) LISTEN 0 128 :17002 : users:((“redis-server”,pid=2889,fd=8))
5. 创建集群
```bash
# 随意一个节点,创建集群,同一个主从不要在同一个节点
$ redis-cli --cluster create 172.17.20.50:7001 172.17.20.50:7002 172.17.20.51:7001 172.17.20.51:7002 172.17.20.52:7001 172.17.20.52:7002 --cluster-replicas 1

- 验证集群 ```bash $ redis-cli -p 7001 -h 172.17.20.50
172.17.20.50:7001> cluster nodes c9326c09a075b3584893fc271c69b85d99ce0e2f 172.17.20.50:7001@17001 myself,master - 0 1632727842000 1 connected 0-5460 944c762d93b539a58c200417522e1b51181d4662 172.17.20.51:7002@17002 slave c9326c09a075b3584893fc271c69b85d99ce0e2f 0 1632727841000 4 connected 271fd4eef715ed20b512cf301b5beca5cfa7f85e 172.17.20.52:7001@17001 master - 0 1632727841000 5 connected 10923-16383 2e74fc9d6502bc7f5e31bb8fc5daba38980d54d1 172.17.20.51:7001@17001 master - 0 1632727844000 3 connected 5461-10922 d74710b74d09ea2c20c62c3a2179d5fbe09694db 172.17.20.52:7002@17002 slave 2e74fc9d6502bc7f5e31bb8fc5daba38980d54d1 0 1632727845081 6 connected d48459bc07dba8bc357d4a7f299657a41fb67b67 172.17.20.50:7002@17002 slave 271fd4eef715ed20b512cf301b5beca5cfa7f85e 0 1632727844079 5 connected
172.17.20.50:7001> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:196 cluster_stats_messages_pong_sent:208 cluster_stats_messages_sent:404 cluster_stats_messages_ping_received:203 cluster_stats_messages_pong_received:196 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:404 ``` 参考链接:https://lvjianzhao.gitee.io/lvjianzhao/2020/06/07/Redis%205.0.5%E6%88%96Redis%206.0.4%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2/
