环境准备
操作系统:CentOS7_x86_64
IP: 192.168.1.224
1.下载redis-4.0.9.tar.gz
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
2.安装redis
$ tar -zxf redis-4.0.9.tar.gz $ cd redis-4.0.9 $ make && make install
3. redis配置
配置服务启动脚本及相关参数
$ cp utils/redisinitscript /etc/init.d/redis_6379 $ mkdir /etc/redis $ cp redis.conf /etc/redis/6379.conf $ mkdir -p /var/redis/6379 #配置持久化文件的目录 $ mkdir -p /var/log/redis #redis日志文件存放目录
redis.conf 配置参数调整如下
# port 6379 -- 默认端口号 # daemonize yes -- 后台运行,默认为no # bind 127.0.0.1 192.168.1.224 -- 192.168.1.224为本机地址 # pidfile /var/run/redis_6379.pid -- pid文件 # logfile /var/log/redis/6379.log -- 日志文件 # dir /var/redis/6379 -- 工作目录 # cluster-enabled yes -- 默认为注释掉 # cluster-config-file nodes-6379.conf -- 该配置文件首次启动自动生成 # cluster-node-timeout 15000 # appendonly yes -- aof日志开启,有需要就开启,它会每次写操作都记录一条日志
设置开机自启动
$ vim /etc/init.d/redis_6379 在#!/bin/bash 之后添加如下信息 # chkconfig: 2345 10 90
$ chkconfig --add redis_6379
其中2345是默认启动级别,级别有0-6共7个级别。 等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络连接的多用户命令行模式 等级3表示:有网络连接的多用户命令行模式 等级4表示:不可用 等级5表示:带图形界面的多用户模式 等级6表示:重新启动 10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低
创建其他节点
# 配置文件复制 cp redis.conf /etc/redis/6380.conf cp redis.conf /etc/redis/6381.conf cp redis.conf /etc/redis/6382.conf cp redis.conf /etc/redis/6383.conf cp redis.conf /etc/redis/6384.conf # 工作目录复制 mkdir -p /var/redis/6380 mkdir -p /var/redis/6381 mkdir -p /var/redis/6382 mkdir -p /var/redis/6383 mkdir -p /var/redis/6384 # 复制自启脚本 cd /etc/init.d cp redis6379 redis6380 cp redis6379 redis6381 cp redis6379 redis6382 cp redis6379 redis6383 cp redis6379 redis6384
安装Ruby环境 1.下载ruby-2.4.4.tar.gz
wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.4.tar.gz
2.安装ruby
yum install zlib zlib-devel openssl openssl-devel rubygems
$ tar -zxf ruby-2.4.4.tar.gz
$ cd ruby-2.4.4
$ ./configure --prefix=/Data/servers/ruby
$ make && make install
$ ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby
$ ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby
更新国内gem源 http://ruby.taobao.org
$ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
$ gem install redis # 安装redis依赖
编译安装zlib
$ cd /Data/servers/ruby-2.4.4/ext/zlib
$ ruby extconf.rb
错误:make: *** No rule to make target /include/ruby.h', needed by
zlib.o'. Stop
#修改Makefile
zlib.o: ${top_srcdir}/include/ruby.h
zlib.o: ../../include/ruby.h
错误:Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources yum install openssl openssl-devel #修改Makefile $ 1,$s/${top_srcdir}\/include\/ruby.h/..\/..\/include/ruby.h/g $ make && make install
3.创建集群
./redis-trib.rb create --replicas 1 192.168.1.224:6379 192.168.1.224:6380 192.168.1.224:6381 192.168.1.224:6382 192.168.1.224:6383 192.168.1.224:6384 出现提示输入框是输入:yes
输出结果如下
[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.1.224:6379 192.168.1.224:6380 192.168.1.224:6381 192.168.1.224:6382 192.168.1.224:6383 192.168.1.224:6384 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.1.224:6379 192.168.1.224:6380 192.168.1.224:6381 Adding replica 192.168.1.224:6383 to 192.168.1.224:6379 Adding replica 192.168.1.224:6384 to 192.168.1.224:6380 Adding replica 192.168.1.224:6382 to 192.168.1.224:6381 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 0a538f5d015ce5a109771c2002d0201e8e567549 192.168.1.224:6379 slots:0-5460 (5461 slots) master M: 21e03e4d6ea0957df8917c335216d9e7e14497ac 192.168.1.224:6380 slots:5461-10922 (5462 slots) master M: 203f7d8d06b3adc5271247ca8175331564b30487 192.168.1.224:6381 slots:10923-16383 (5461 slots) master S: e086bc41c0410256ce339f8d90a154765aa347e1 192.168.1.224:6382 replicates 203f7d8d06b3adc5271247ca8175331564b30487 S: 5447e331f1a44f776cbddf82eb4b74772d95738f 192.168.1.224:6383 replicates 0a538f5d015ce5a109771c2002d0201e8e567549 S: 85d27b84e855d57724ef3c13bd2ff94809f4c043 192.168.1.224:6384 replicates 21e03e4d6ea0957df8917c335216d9e7e14497ac 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.1.224:6379) M: 0a538f5d015ce5a109771c2002d0201e8e567549 192.168.1.224:6379 slots:0-5460 (5461 slots) master 1 additional replica(s) S: 85d27b84e855d57724ef3c13bd2ff94809f4c043 127.0.0.1:6384 slots: (0 slots) slave replicates 21e03e4d6ea0957df8917c335216d9e7e14497ac M: 203f7d8d06b3adc5271247ca8175331564b30487 127.0.0.1:6381 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 21e03e4d6ea0957df8917c335216d9e7e14497ac 127.0.0.1:6380 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: e086bc41c0410256ce339f8d90a154765aa347e1 127.0.0.1:6382 slots: (0 slots) slave replicates 203f7d8d06b3adc5271247ca8175331564b30487 S: 5447e331f1a44f776cbddf82eb4b74772d95738f 127.0.0.1:6383 slots: (0 slots) slave replicates 0a538f5d015ce5a109771c2002d0201e8e567549 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
4.管理常用命令
$ pkill redis #快速关闭集群 $ ./redis-trib.rb check 192.168.1.224:6379 #检查集群状态
5.集群常用命令
$ redis-cli $ cluster nodes #列出集群所有节点 $ cluster info #显示集群的信息
节点
cluster meet #将 ip 和 port 所指定的节点添加到集群当中 cluster forget <node_id style="-webkit-print-color-adjust: exact;"> #从集群中移除 nodeid 节点。 cluster replicate <nodeid> #将当前节点设置为 nodeid 节点的从节点。 cluster saveconfig #将节点的配置文件保存到硬盘
槽(slot)
cluster addslots id> #将槽 slot 指派给 nodeid 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 cluster setslot id> #将本节点的槽 slot 迁移到 nodeid 指定的节点中。 cluster setslot id> #从 node_id 指定的节点中导入槽 slot 到本节点。 cluster setslot
键
cluster keyslot #计算键 key 应该被放置在哪个槽上。 cluster countkeysinslot