Redis cluster 部署

本贴最后更新于 1683 天前,其中的信息可能已经时移世易

环境准备:
| 类别 | IP| 规格 | 主机名 |
| 1| 192.168.43.120| 4C8G |redis-cluster-01|
| 2| 192.168.43.121| 4C8G |redis-cluster-02|
| 3| 192.168.43.122| 4C8G |redis-cluster-03|
注意:系统均为 centos7.6,均已关闭 firewalld 和 selinux。
集群架构是三台机器,每台机器部署两个节点,端口分别是 6379 和 6380.

第一步:下载 Redis 离线二进制包

# wget http://download.redis.io/releases/redis-4.0.10.tar.gz 

第二步:解压

# tar xf redis-4.0.10.tar.gz 
# mv redis-4.0.10 /usr/local/redis 

第三步:编译&&编译安装

# cd /usr/local/redis 
# make 
# make install 

第四步:将二进制可执行文件拷贝至/usr/local/bin 或者/usr/bin 目录下

# cd src/ 
# cp redis-trib.rb /usr/local/bin/ 

第五步:检查

# cd ../utils/
# ls -l
总用量 76 
-rw-rw-r-- 1 root root 593 6月 13 2018 build-static-symbols.tcl 
-rw-rw-r-- 1 root root 1303 6月 13 2018 cluster_fail_time.tcl 
-rw-rw-r-- 1 root root 1070 6月 13 2018 corrupt_rdb.c 
drwxrwxr-x 2 root root 4096 6月 13 2018 create-cluster 
-rwxrwxr-x 1 root root 2137 6月 13 2018 generate-command-help.rb 
drwxrwxr-x 3 root root 4096 6月 13 2018 graphs 
drwxrwxr-x 2 root root 4096 6月 13 2018 hashtable 
drwxrwxr-x 2 root root 4096 6月 13 2018 hyperloglog 
-rwxrwxr-x 1 root root 9567 6月 13 2018 install_server.sh 
drwxrwxr-x 2 root root 4096 6月 13 2018 lru 
-rw-rw-r-- 1 root root 1277 6月 13 2018 redis-copy.rb 
-rwxrwxr-x 1 root root 1352 6月 13 2018 redis_init_script 
-rwxrwxr-x 1 root root 1047 6月 13 2018 redis_init_script.tpl 
-rw-rw-r-- 1 root root 1762 6月 13 2018 redis-sha1.rb 
drwxrwxr-x 2 root root 4096 6月 13 2018 releasetools 
-rwxrwxr-x 1 root root 3787 6月 13 2018 speed-regression.tcl 
-rwxrwxr-x 1 root root 693 6月 13 2018 whatisdoing.sh 

第六步:部署节点 1

# ./install_server.sh 
Welcome to the redis service installer This script will help you easily set up a running redis server 
Please select the redis port for this instance: [6379] Selecting default: 6379 
Please select the redis config file name [/etc/redis/6379.conf] /data/redis/conf/6379.conf 
Please select the redis log file name [/var/log/redis_6379.log] /data/redis/logs/6379.log 
Please select the data directory for this instance [/var/lib/redis/6379] /data/redis/data/6379 Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config: Port : 6379 
Config file : /data/redis/6379.conf 
Log file : /data/redis/logs/6379.log 
Data dir : /data/redis/6379 
Executable : /usr/local/bin/redis-server 
Cli Executable : /usr/local/bin/redis-cli 
Is this ok? 
Then press ENTER to go on or Ctrl-C to abort. 
Copied /tmp/6379.conf => /etc/init.d/redis_6379 
Installing service... Successfully added to chkconfig! 
Successfully added to runlevels 345! 
Starting Redis server... Installation successful!

注意:
①.如果是部署单机 Redis,到这里就算结束了。
②.由于部署的集群是单机双实例(如果有条件的话,可以一台机器只部署一个节点),所以第六步和第七步都要执行。
第七步:部署节点 2

# ./install_server.sh 
Welcome to the redis service installer This script will help you easily set up a running redis server 
Please select the redis port for this instance: [6379] 6380 
Please select the redis config file name [/etc/redis/6380.conf] /data/redis/conf/6380.conf 
Please select the redis log file name [/var/log/redis_6380.log] /data/redis/logs/6380.log 
Please select the data directory for this instance [/var/lib/redis/6380] /data/redis/data/6380 Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config: Port : 6380 
Config file : /data/redis/6380.conf 
Log file : /data/redis/logs/6380.log 
Data dir : /data/redis/6380 
Executable : /usr/local/bin/redis-server 
Cli Executable : /usr/local/bin/redis-cli 
Is this ok? 
Then press ENTER to go on or Ctrl-C to abort. 
Copied /tmp/6380.conf => /etc/init.d/redis_6380 
Installing service... Successfully added to chkconfig! 
Successfully added to runlevels 345! 
Starting Redis server... Installation successful!

第八步:检查

# tree -L 3 
 . 
└── redis 
    ├── 6379 
    ├── 6379.conf 
    ├── 6380 
    ├── 6380.conf 
    └── logs 
        ├── 6379.log 
        └── 6380.log 
4 directories, 4 files

另外的两台机器按照上面的步骤(第一步到第八步)操作即可。
第九步:配置

# sed -i "s/# cluster-enabled yes/cluster-enabled yes/g;s/bind 127.0.0.1/bind 192.168.43.120 127.0.0.1/g" /data/redis/*.conf

注意:在另外两台机器同样执行那条命令,只需将 192.168.43.120 换成本机的 IP 即可;

第十步:重启 Redis 使配置生效

# /etc/init.d/redis_6379 restart

第十一步:检查
redis-cluster-01:

# netstat -lntp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.120:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.120:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5617/sshd 
tcp 0 0 127.0.0.1:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.120:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:16380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.120:16380 0.0.0.0:* LISTEN 9495/redis-server 1

redis-cluster-02:

# netstat -lntp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.121:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.121:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5617/sshd 
tcp 0 0 127.0.0.1:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.121:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:16380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.121:16380 0.0.0.0:* LISTEN 9495/redis-server 1

redis-cluster-03:

# netstat -lntp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.122:6379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.122:6380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5617/sshd 
tcp 0 0 127.0.0.1:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 192.168.43.122:16379 0.0.0.0:* LISTEN 9485/redis-server 1 
tcp 0 0 127.0.0.1:16380 0.0.0.0:* LISTEN 9495/redis-server 1 
tcp 0 0 192.168.43.122:16380 0.0.0.0:* LISTEN 9495/redis-server 1

第十二步:Redis 优化
在我们启动 Redis 的时候,查看 Redis 的启动日志,官方很友好的将一些需要优化的都给我们明显的标出来了,我们只需要按照那个修改即可,如有别的需求可以自行查看官方相关参数进行修改;如下即是 Redis 启动时的优化提示:

9375:M 15 May 11:14:28.574 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 
9375:M 15 May 11:14:28.574 # Server initialized 
9375:M 15 May 11:14:28.574 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 
9375:M 15 May 11:14:28.574 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
# echo 1024 > /proc/sys/net/core/somaxconn 
# echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf 
# sysctl -p 
# echo never > /sys/kernel/mm/transparent_hugepage/enabled 
# echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >>/etc/rc.local

另外两台机器同样执行上面的操作。
第十三步:安装 gem

# yum -y install ruby ruby-devel rubygems rpm-build 
# gem install -l redis-3.0.0.gem 
Successfully installed redis-3.0.0 
Parsing documentation for redis-3.0.0 
Installing ri documentation for redis-3.0.0 
1 gem installed

上面的 gem 文件我已上传到百度云网盘

链接:https://pan.baidu.com/s/1B-Zk1KAPjUrJzCpvAZaU_w  
密码:1kbv

第十四步:创建集群

# redis-trib.rb create --replicas 1 192.168.43.120:6379 192.168.43.121:6379 192.168.43.122:6379 192.168.43.120:6380 192.168.43.121:6380 192.168.43.122:6380
>>> Creating cluster 
auses ArgumentError in the next release 
warning: this causes ArgumentError in the next release 
>>> Performing hash slots allocation on 6 nodes... 
Using 3 masters: 
192.168.43.120:6379 
192.168.43.121:6379 
192.168.43.122:6379 
Adding replica 192.168.43.121:6380 to 192.168.43.120:6379 
Adding replica 192.168.43.122:6380 to 192.168.43.121:6379 
Adding replica 192.168.43.120:6380 to 192.168.43.122:6379 
M: 79e82a8357f67ac623479cc76575b39c9f7b8b39 192.168.43.120:6379 slots:0-5460 (5461 slots) master 
M: 234af44758281d646f81ee482edd23a0f6c97237 192.168.43.121:6379 slots:5461-10922 (5462 slots) master 
M: 99d4866d25028faae3b03367a39871ab642704ab 192.168.43.122:6379 slots:10923-16383 (5461 slots) master 
S: 19773196edde889421ef4d124ee1b60c2a02d5d5 192.168.43.120:6380 replicates 99d4866d25028faae3b03367a39871ab642704ab 
S: 4dde88648d44c87ff646b134b0e024043eecda40 192.168.43.121:6380 replicates 79e82a8357f67ac623479cc76575b39c9f7b8b39 
S: 686cf842893bdf6e79e10bba28fcc9388848f14f 192.168.43.122:6380 replicates 234af44758281d646f81ee482edd23a0f6c97237 
Can I set the above configuration? (type 'yes' to accept): yes 
>>> Nodes configuration updated 
>>> Assign a different config epoch to each node 
>>> Sending CLUSTER MEET messages to join the cluster 
Waiting for the cluster to join........... 
>>> Performing Cluster Check (using node 192.168.43.120:6379) 
M: 79e82a8357f67ac623479cc76575b39c9f7b8b39 192.168.43.120:6379 slots:0-5460 (5461 slots) master 1 additional replica(s) 
S: 4dde88648d44c87ff646b134b0e024043eecda40 192.168.43.121:6380 slots: (0 slots) slave replicates 79e82a8357f67ac623479cc76575b39c9f7b8b39 
M: 234af44758281d646f81ee482edd23a0f6c97237 192.168.43.121:6379 slots:5461-10922 (5462 slots) master 1 additional replica(s) 
S: 686cf842893bdf6e79e10bba28fcc9388848f14f 192.168.43.122:6380 slots: (0 slots) slave replicates 234af44758281d646f81ee482edd23a0f6c97237 
S: 19773196edde889421ef4d124ee1b60c2a02d5d5 192.168.43.120:6380 slots: (0 slots) slave replicates 99d4866d25028faae3b03367a39871ab642704ab 
M: 99d4866d25028faae3b03367a39871ab642704ab 192.168.43.122:6379 slots:10923-16383 (5461 slots) master 
1 additional replica(s) 
[OK] All nodes agree about slots configuration. 
>>> Check for open slots... 
>>> Check slots coverage... 
[OK] All 16384 slots covered.

当出现两个 OK 就是集群已经创建完毕。
第十五步:Redis 集群设置密码(按照生产需要自行决定)

# redis-cli -h 192.168.43.120 -p 6379 -c --raw 
192.168.43.120:6379> config set requirepass Tnobn?dju89U 
OK 
192.168.43.120:6379> auth Tnobn?dju89U 
OK 
192.168.43.120:6379> exit 
# redis-cli -h 192.168.43.120 -p 6379 -c --raw 
192.168.43.120:6379> config get requirepass 
NOAUTH Authentication required. 
192.168.43.120:6379> auth Tnobn?dju89U 
OK 
192.168.43.120:6379> config get requirepass 
requirepass Tnobn?dju89U 
192.168.43.120:6379> exit 
config set requirepass gnjRg54ish 
auth gnjRg54ish 
config set masterauth gnjRg54ish

上面的配置只是临时的,一旦 Redis 重启就会失效;永久修改只需要在 redis.conf 中添加如下配置,重启即可。

masterauth 密码 
requirepass 密码

Redis 配置文件释义:

Redis的配置
  daemonize:如需要在后台运行,把该项的值改为yes
  pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
  bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项
  port:监听端口,默认为6379
  timeout:设置客户端连接时的超时时间,单位为秒
  loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice
  logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上
  database:设置数据库的个数,默认使用的数据库是0
  save:设置redis进行数据库镜像的频率
  rdbcompression:在进行镜像备份时,是否进行压缩
  dbfilename:镜像备份文件的文件名
  dir:数据库镜像备份的文件放置的路径
  slaveof:设置该数据库为其他数据库的从数据库
  masterauth:当主数据库连接需要密码验证时,在这里设定
  requirepass:设置客户端连接后进行任何其他指定前需要使用的密码
  maxclients:限制同时连接的客户端数
  maxmemory:设置redis能够使用的最大内存
  appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态
  appendfsync:设置appendonly.aof文件进行同步的频率
  vm_enabled:是否开启虚拟内存支持
  vm_swap_file:设置虚拟内存的交换文件的路径
  vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0
  vm_page_size:设置虚拟内存页的大小
  vm_pages:设置交换文件的总的page数量
  vm_max_thrrads:设置vm IO同时使用的线程数量
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 45 关注
  • 集群
    29 引用 • 65 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 10 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 635 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 161 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    34 引用 • 148 回帖 • 2 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 3 关注
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    7 引用 • 40 回帖
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 54 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 226 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 5 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 76 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 372 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 669 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 221 关注
  • 安全

    安全永远都不是一个小问题。

    200 引用 • 816 回帖 • 1 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    126 引用 • 169 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 31 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 651 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 7 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 51 关注