Redis cluster 部署

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

环境准备:
| 类别 | 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 赞助。

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 109 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 563 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    61 引用 • 29 回帖 • 11 关注
  • Outlook
    1 引用 • 5 回帖 • 2 关注
  • 996
    13 引用 • 200 回帖 • 1 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 3 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖 • 2 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 661 关注
  • Redis

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

    284 引用 • 248 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 799 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 143 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 9 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 533 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 446 关注
  • Follow
    4 引用 • 12 回帖 • 7 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • Notion

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

    10 引用 • 77 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 77 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 825 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    497 引用 • 934 回帖 • 1 关注
  • BAE

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

    19 引用 • 75 回帖 • 682 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    300 引用 • 768 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 8 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    100 引用 • 905 回帖