diff --git a/content/post/redis-cluster-install.md b/content/post/redis-cluster-install.md index 9ac26df..af3a04b 100644 --- a/content/post/redis-cluster-install.md +++ b/content/post/redis-cluster-install.md @@ -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)