This commit is contained in:
colben 2023-03-01 20:32:22 +08:00
parent 3b24031a1f
commit dc3d152756

View File

@ -1,146 +1,144 @@
---
title: "CentOS7 安装 Redis 集群"
date: 2019-11-29T15:14:29+08:00
lastmod: 2019-11-29T15:14:29+08:00
lastmod: 2023-03-01T20:03:00+08:00
tags: ["redis"]
categories: ["database"]
---
## 环境
- 操作系统: CentOS7.7,关闭 firewalld 和 selinux
- Redis: 5.0.6
- 操作系统: CentOS7.9,关闭 firewalld 和 selinux
- Redis: 5.0.14
- master 实例
- 10.0.4.110:6371
- 10.0.4.110:6372
- 10.0.4.110:6373
- slave 实例
- 10.0.4.111:6371
- 10.0.4.111:6372
- 10.0.4.111:6373
## 编译 redis server
- 在 CentOS7.7 测试服务器上下载、编译
- 在 CentOS7.9 测试服务器上下载、编译
```bash
wget http://download.redis.io/releases/redis-5.0.6.tar.gz
tar xzf redis-5.0.6.tar.gz
cd redis-5.0.6
curl -LO http://download.redis.io/releases/redis-5.0.14.tar.gz
tar zxf redis-5.0.14.tar.gz
cd redis-5.0.14
make
```
- 抽取安装文件
```bash
mkdir -p /opt/redis_cluster/{bin,conf}
cp src/{redis-server,redis-cli,redis-benchmark} /opt/redis_cluster/bin/
# redis-check-rdb 和 redis-check-aof 与 redis-server 校验值一致,无需复制
mkdir -p /opt/redis/{bin,conf}
cp src/{redis-server,redis-cli,redis-benchmark} /opt/redis/bin/
cd /opt/redis/bin
ln -s redis-server redis-check-aof
ln -s redis-server redis-check-rdb
ln -s redis-server redis-sentinel
```
- 创建 /opt/redis/conf/redis-6379.conf常用配置如下
```
- 创建 /opt/redis_cluster/conf/redis.conf常用配置如下
```bash
bind 0.0.0.0
protected-mode yes
tcp-backlog 511
timeout 3600
tcp-keepalive 300
daemonize no
protected-mode no
port 6379
daemonize yes
supervised no
pidfile log/redis-6379.pid
loglevel notice
logfile log/redis-6379.log
always-show-logo no
#save ""
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
#masterauth "123456"
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
#requirepass "123456"
maxclients 10000
maxmemory 4294967296
maxmemory-policy volatile-lru
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
dir db-6379
maxclients 8192
maxmemory 6442450944
#requirepass xxxx
#masterauth xxxx
#cluster-enabled yes
#cluster-config-file nodes-6379.conf
maxmemory-policy volatile-random
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
cluster-enabled yes
cluster-node-timeout 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
```
- 创建 /opt/redis_cluster/redis@.service配置如下
- 创建 /opt/redis/conf/redis-637{1..3}.conf
```bash
cd /opt/redis/conf
cp redis-6379.conf redis-6371.conf
cp redis-6379.conf redis-6372.conf
cp redis-6379.conf redis-6373.conf
sed -i \
-e 's/6379/6371/g' \
-e '/daemonize/cdaemonize no' \
-e '/supervised/csupervised systemd' \
-e '/requirepass/crequirepass 123456' \
-e '/masterauth/cmasterauth 123456' \
-e '/cluster/^#//' \
redis-6371.conf
sed -i \
-e 's/6379/6372/g' \
-e '/daemonize/cdaemonize no' \
-e '/supervised/csupervised systemd' \
-e '/requirepass/crequirepass 123456' \
-e '/masterauth/cmasterauth 123456' \
-e '/cluster/^#//' \
redis-6372.conf
sed -i \
-e 's/6379/6373/g' \
-e '/daemonize/cdaemonize no' \
-e '/supervised/csupervised systemd' \
-e '/requirepass/crequirepass 123456' \
-e '/masterauth/cmasterauth 123456' \
-e '/cluster/^#//' \
redis-6373.conf
```
- 创建日志目录和数据目录
```bash
cd /opt/redis
mkdir -p db-{6371..6373} log
```
- 创建 /opt/redis/redis@.service内容如下
```ini
[Unit]
Description=Redis cluster -- node %i
After=network.target
[Service]
ExecStartPre=/usr/bin/ls -d /var/lib/redis_cluster/%i
ExecStart=/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/redis.conf \
--daemonize no \
--port %i \
--pidfile /var/run/redis_%i.pid \
--logfile /var/log/redis_cluster/%i.log \
--dir /var/lib/redis_cluster/%i \
--cluster-config-file /var/lib/redis_cluster/%i/nodes.conf
ExecStop=/opt/redis_cluster/bin/redis-cli -h 127.0.0.1 -p %i shutdown
WorkingDirectory=/opt/redis
ExecStart=/opt/redis/bin/redis-server conf/redis-%i.conf
Restart=on-failure
RestartSec=1
RestartSec=2
[Install]
WantedBy=multi-user.target
```
## 部署
- 把测试机的 /opt/redis_cluster 目录复制到 10.0.4.110 和 10.0.4.111 上
- 把 /opt/redis 目录复制到 10.0.4.110 和 10.0.4.111 上
```bash
scp -r /opt/redis_cluster 10.0.4.110:/opt/
scp -r /opt/redis_cluster 10.0.4.111:/opt/
scp -r /opt/redis 10.0.4.110:/opt/
scp -r /opt/redis 10.0.4.111:/opt/
```
- 在 10.0.4.110 和 10.0.4.111 上都执行以下操作
```bash
mv /opt/redis_cluster/redis@.service /usr/lib/systemd/system/
cp /opt/redis/redis@.service /usr/lib/systemd/system/
systemctl daemon-reload
mkdir -p /var/lib/redis_cluster/{6371..6373}
mkdir -p /var/log/redis_cluster
```
- 在 10.0.4.110 和 10.0.4.111 上配置实例开机启动
```bash
systemctl enable redis@6371
systemctl enable redis@6372
systemctl enable redis@6373
```
- 在 10.0.4.110 和 10.0.4.111 上启动全部实例
```bash
systemctl start redis@6371
@ -149,24 +147,31 @@ categories: ["database"]
```
## 配置集群
- 在 10.0.4.110 或 10.0.4.111 上创建集群,指定三个 master 实例
- 在 10.0.4.110 上创建集群,指定三个 master 实例
```bash
/opt/redis_cluster/bin/redis-cli \
/opt/redis/bin/redis-cli \
-a 123456 \
--cluster create 10.0.4.110:6371 10.0.4.110:6372 10.0.4.110:6373
```
- 输出如下图
![](https://colben.cn/img/dc44a6e8688218edb10ad7f2427b0525132.png)
![](https://www.colben.cn/img/dc44a6e8688218edb10ad7f2427b0525132.png)
- 同意配置,输入 "yes",回车后输出如下图
![](https://colben.cn/img/eb3c0ccd3d0017c18d4eba3a0b776d29e21.png)
![](https://www.colben.cn/img/eb3c0ccd3d0017c18d4eba3a0b776d29e21.png)
- 查看集群当前实例
```bash
/opt/redis_cluster/bin/redis-cli -p 6371 cluster nodes
/opt/redis/bin/redis-cli -p 6371 cluster nodes
```
- 输出如下图
![](https://colben.cn/img/0bfe3ac4984fbd6973738dddb20d5bb6c72.png)
![](https://www.colben.cn/img/0bfe3ac4984fbd6973738dddb20d5bb6c72.png)
- 添加 slave 实例 10.0.4.111:6371同步 master 10.0.4.110:6371
```bash
/opt/redis_cluster/bin/redis-cli \
/opt/redis/bin/redis-cli \
-a 123456 \
--cluster add-node 10.0.4.111:6371 10.0.4.110:6371 \
--cluster-slave \
--cluster-master-id 5be0edaf74d1eec50bbe675f9698397023a943b7
@ -174,32 +179,39 @@ categories: ["database"]
# --cluster-slave 指定添加 slave 实例
# --cluster-master-id 指定 10.0.4.110:6371 的 id即本次添加实例的 master
```
- 输出如下图
![](https://colben.cn/img/cf50fb5da24afb930eab80100707b13efbe.png)
![](https://www.colben.cn/img/cf50fb5da24afb930eab80100707b13efbe.png)
- 添加 slave 实例 10.0.4.111:6372同步 master 10.0.4.110:6372
```bash
/opt/redis_cluster/bin/redis-cli \
/opt/redis/bin/redis-cli \
--cluster add-node 10.0.4.111:6372 10.0.4.110:6371 \
--cluster-slave \
--cluster-master-id 96f2225fdd054d8a16b31726fd1eb0b66c612646
```
- 输出如下图
![](https://colben.cn/img/4577cd8a2c7aea037e50fb002f91bb40842.png)
![](https://www.colben.cn/img/4577cd8a2c7aea037e50fb002f91bb40842.png)
- 添加 slave 实例 10.0.4.111:6373同步 master 10.0.4.110:6373
```bash
/opt/redis_cluster/bin/redis-cli \
/opt/redis/bin/redis-cli \
--cluster add-node 10.0.4.111:6373 10.0.4.110:6371 \
--cluster-slave \
--cluster-master-id cd60c238e66c8b4a31355bee4610444a47acef86
```
- 输出如下图
![](https://colben.cn/img/633adea823cad6380030826ce75a44109fb.png)
![](https://www.colben.cn/img/633adea823cad6380030826ce75a44109fb.png)
- 查看集群当前实例
```bash
/opt/redis_cluster/bin/redis-cli -p 6371 cluster nodes
/opt/redis/bin/redis-cli -p 6371 cluster nodes
```
- 输出如下图
![](https://colben.cn/img/3d5e7c0b8e7a7e51028d11358f442947367.png)
![](https://wwww.colben.cn/img/3d5e7c0b8e7a7e51028d11358f442947367.png)
## Docker 部署
- 安装 docker-ce参考[这里](https://www.colben.cn/post/docker/#%E5%AE%89%E8%A3%85)