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 集群" title: "CentOS7 安装 Redis 集群"
date: 2019-11-29T15:14:29+08:00 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"] tags: ["redis"]
categories: ["database"] categories: ["database"]
--- ---
## 环境 ## 环境
- 操作系统: CentOS7.7,关闭 firewalld 和 selinux - 操作系统: CentOS7.9,关闭 firewalld 和 selinux
- Redis: 5.0.6 - Redis: 5.0.14
- master 实例 - master 实例
- 10.0.4.110:6371 - 10.0.4.110:6371
- 10.0.4.110:6372 - 10.0.4.110:6372
- 10.0.4.110:6373 - 10.0.4.110:6373
- slave 实例 - slave 实例
- 10.0.4.111:6371 - 10.0.4.111:6371
- 10.0.4.111:6372 - 10.0.4.111:6372
- 10.0.4.111:6373 - 10.0.4.111:6373
## 编译 redis server ## 编译 redis server
- 在 CentOS7.7 测试服务器上下载、编译 - 在 CentOS7.9 测试服务器上下载、编译
```bash ```bash
wget http://download.redis.io/releases/redis-5.0.6.tar.gz curl -LO http://download.redis.io/releases/redis-5.0.14.tar.gz
tar xzf redis-5.0.6.tar.gz tar zxf redis-5.0.14.tar.gz
cd redis-5.0.6 cd redis-5.0.14
make make
``` ```
- 抽取安装文件 - 抽取安装文件
```bash ```bash
mkdir -p /opt/redis_cluster/{bin,conf} mkdir -p /opt/redis/{bin,conf}
cp src/{redis-server,redis-cli,redis-benchmark} /opt/redis_cluster/bin/ cp src/{redis-server,redis-cli,redis-benchmark} /opt/redis/bin/
# redis-check-rdb 和 redis-check-aof 与 redis-server 校验值一致,无需复制 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 bind 0.0.0.0
protected-mode yes protected-mode no
tcp-backlog 511 port 6379
timeout 3600 daemonize yes
tcp-keepalive 300
daemonize no
supervised no supervised no
pidfile log/redis-6379.pid
loglevel notice loglevel notice
logfile log/redis-6379.log
always-show-logo no always-show-logo no
#save ""
save 900 1 save 900 1
save 300 10 save 300 10
save 60 10000 save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb dbfilename dump.rdb
#masterauth "123456" dir db-6379
replica-serve-stale-data yes maxclients 8192
replica-read-only yes maxmemory 6442450944
repl-diskless-sync no #requirepass xxxx
repl-diskless-sync-delay 5 #masterauth xxxx
repl-disable-tcp-nodelay no #cluster-enabled yes
replica-priority 100 #cluster-config-file nodes-6379.conf
#requirepass "123456" maxmemory-policy volatile-random
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
appendonly 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
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 ```ini
[Unit] [Unit]
Description=Redis cluster -- node %i Description=Redis cluster -- node %i
After=network.target After=network.target
[Service] [Service]
ExecStartPre=/usr/bin/ls -d /var/lib/redis_cluster/%i WorkingDirectory=/opt/redis
ExecStart=/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/redis.conf \ ExecStart=/opt/redis/bin/redis-server conf/redis-%i.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
Restart=on-failure Restart=on-failure
RestartSec=1 RestartSec=2
[Install] [Install]
WantedBy=multi-user.target 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 ```bash
scp -r /opt/redis_cluster 10.0.4.110:/opt/ scp -r /opt/redis 10.0.4.110:/opt/
scp -r /opt/redis_cluster 10.0.4.111:/opt/ scp -r /opt/redis 10.0.4.111:/opt/
``` ```
- 在 10.0.4.110 和 10.0.4.111 上都执行以下操作 - 在 10.0.4.110 和 10.0.4.111 上都执行以下操作
```bash ```bash
mv /opt/redis_cluster/redis@.service /usr/lib/systemd/system/ cp /opt/redis/redis@.service /usr/lib/systemd/system/
systemctl daemon-reload 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 上配置实例开机启动 - 在 10.0.4.110 和 10.0.4.111 上配置实例开机启动
```bash ```bash
systemctl enable redis@6371 systemctl enable redis@6371
systemctl enable redis@6372 systemctl enable redis@6372
systemctl enable redis@6373 systemctl enable redis@6373
``` ```
- 在 10.0.4.110 和 10.0.4.111 上启动全部实例 - 在 10.0.4.110 和 10.0.4.111 上启动全部实例
```bash ```bash
systemctl start redis@6371 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 ```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 --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",回车后输出如下图 - 同意配置,输入 "yes",回车后输出如下图
![](https://colben.cn/img/eb3c0ccd3d0017c18d4eba3a0b776d29e21.png) ![](https://www.colben.cn/img/eb3c0ccd3d0017c18d4eba3a0b776d29e21.png)
- 查看集群当前实例 - 查看集群当前实例
```bash ```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 - 添加 slave 实例 10.0.4.111:6371同步 master 10.0.4.110:6371
```bash ```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 add-node 10.0.4.111:6371 10.0.4.110:6371 \
--cluster-slave \ --cluster-slave \
--cluster-master-id 5be0edaf74d1eec50bbe675f9698397023a943b7 --cluster-master-id 5be0edaf74d1eec50bbe675f9698397023a943b7
@ -174,32 +179,39 @@ categories: ["database"]
# --cluster-slave 指定添加 slave 实例 # --cluster-slave 指定添加 slave 实例
# --cluster-master-id 指定 10.0.4.110:6371 的 id即本次添加实例的 master # --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 - 添加 slave 实例 10.0.4.111:6372同步 master 10.0.4.110:6372
```bash ```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 add-node 10.0.4.111:6372 10.0.4.110:6371 \
--cluster-slave \ --cluster-slave \
--cluster-master-id 96f2225fdd054d8a16b31726fd1eb0b66c612646 --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 - 添加 slave 实例 10.0.4.111:6373同步 master 10.0.4.110:6373
```bash ```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 add-node 10.0.4.111:6373 10.0.4.110:6371 \
--cluster-slave \ --cluster-slave \
--cluster-master-id cd60c238e66c8b4a31355bee4610444a47acef86 --cluster-master-id cd60c238e66c8b4a31355bee4610444a47acef86
``` ```
- 输出如下图 - 输出如下图
![](https://colben.cn/img/633adea823cad6380030826ce75a44109fb.png) ![](https://www.colben.cn/img/633adea823cad6380030826ce75a44109fb.png)
- 查看集群当前实例 - 查看集群当前实例
```bash ```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 部署
- 安装 docker-ce参考[这里](https://www.colben.cn/post/docker/#%E5%AE%89%E8%A3%85) - 安装 docker-ce参考[这里](https://www.colben.cn/post/docker/#%E5%AE%89%E8%A3%85)