Redis 单机集群搭建步骤(五)

5 篇文章 1 订阅
5 篇文章 0 订阅

一、 安装环境信息

Linux 操作系统: centos 6.1

Redis版本:redis-4.0.6.tar.gz

本案例使用到时一台服务器搭建3主3从到redis集群服务

二、redis 集群配置说明:
1、redis安装前面的章节已经讲过,这就不在说明,不懂可以看前面到章节

2、在/usr/local 目录下创建redis-cluster目录

# 创建redis-cluster目录存放redis集群到配置信息

 [root@zero local]# mkdir redis-cluster

#在redis-cluster下创建6个文件夹,为区分用端口命名

[root@zero local]# cd redis-cluster/
[root@zero redis-cluster]# cd 6380 6381 6382 6383 6384 6385

#拷贝redis下到redis.conf 配置文件到6380目录下

[root@zero local]# cp redis/redis.conf  redis-cluster/6380/

#修改6380配置文件信息

[root@zero local]# vi redis-cluster/6380/redis.conf
#修改以下配置信息
port 6380                      #端口6380,6381,6382,6383,6384,6385
daemonize yes                   #redis后台运行
protected-model  no	       #redis 2.8版本以后需要修改成no 不受保护
cluster-enabled yes             #开启集群
cluster-config-file node-6380.conf  #集群配置信息,开启集群后自动生成
cluster-node-timeout 5000       #请求超时时长 
appendonly yes                        #开启aof日志,它会每次写操作都记录一条日志
bind 192.168.2.173                #默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群  
pidfile  /opt/module/redis-cluster/6380/redis_6380.pid     #pidfile文件对应6380,6381,6382,6383,6384,6385
dir  /usr/local/redis-cluster/6380/    #数据文件存放位置对应6380,6381,6382,6383,6384,6385

3、拷贝6380节点下到redis.conf配置文件到相应到6381,6382,6383,6384,6385目录下

#拷贝配置文件
[root@zero local]# cp redis-cluster/6380/redis.conf  redis-cluster/6381/
#在使用全局复制命令,将端口修改成相应到端口号
[root@zero local]# vi redis-cluster/6381/redis.conf 
#在修改到配置文件末尾

:%s/6380/6381/g 
# 即可替换6380端口为6381端口   最后:wq保存文件

重复3步骤将剩下到配置文件配置完成即可
4、启动redis节点服务

#启动节点服务

[root@zero local]# ./redis/src/redis-server  redis-cluster/6381/redis.conf && ./redis/src/redis-server  redis-cluster/6382/redis.conf && ./redis/src/redis-server  redis-cluster/6383/redis.conf  && ./redis/src/redis-server  redis-cluster/6384/redis.conf  && ./redis/src/redis-server  redis-cluster/6385/redis.conf  && ./redis/src/redis-server  redis-cluster/6380/redis.conf
510:C 10 Jul 10:52:46.802 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
510:C 10 Jul 10:52:46.802 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=510, just started
510:C 10 Jul 10:52:46.802 # Configuration loaded
512:C 10 Jul 10:52:46.813 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
512:C 10 Jul 10:52:46.813 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=512, just started
512:C 10 Jul 10:52:46.813 # Configuration loaded
514:C 10 Jul 10:52:46.864 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
514:C 10 Jul 10:52:46.864 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=514, just started
514:C 10 Jul 10:52:46.864 # Configuration loaded
522:C 10 Jul 10:52:46.945 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
522:C 10 Jul 10:52:46.945 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=522, just started
522:C 10 Jul 10:52:46.945 # Configuration loaded
530:C 10 Jul 10:52:46.998 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
530:C 10 Jul 10:52:46.998 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=530, just started
530:C 10 Jul 10:52:46.998 # Configuration loaded
532:C 10 Jul 10:52:47.014 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
532:C 10 Jul 10:52:47.014 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=532, just started
532:C 10 Jul 10:52:47.015 # Configuration loaded

#查看节点服务启动情况

[root@zero local]# ps -ef|grep redis
root       511     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6381 [cluster]             
root       513     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6382 [cluster]             
root       521     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6383 [cluster]             
root       523     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6384 [cluster]             
root       531     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6385 [cluster]             
root       533     1  0 10:52 ?        00:00:00 ./redis/src/redis-server *:6380 [cluster]             
root       541  3739  0 10:52 pts/0    00:00:00 grep redis

可以看出reids节点服务已经全部启动

5、创建集群

1)redis安装目录src中redis-trib.rb完成集群创建,redis-trib.rb命令需要安装gem redis模块才能运行,gem redis需要Ruby环境
备注:直接使用yum install ruby 安装到版本是1.8.7.374-5.el6 ,在执行gem install redis时候提示[root
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.
需要当前版本或以上到版本才能使用
2) 需要提前安装gcc插件才能使用:yum -y install gcc
3)Ruby离线安装:官网下载:http://www.ruby-lang.org/en/downloads/ 最新的版本为ruby-2.3.8 版本
4)解压当前到ruby:tar -zxvf ruby-2.3.8.tar.gz

# 解压

 drwxr-xr-x. 25 1035 1035     4096 Oct 17  2018 ruby-2.3.8
-rwxrw-rw-.  1 root root 17858806 Jul  4 17:47 ruby-2.3.8.tar.gz

#安装

[root@zero tools]# cd ruby-2.3.8
[root@zero ruby-2.3.8]# ./configure

# 出现如下界面
checking whether wrapper for LD_LIBRARY_PATH is needed... no
checking for __builtin_setjmp... yes with cast ()
checking for setjmp type... __builtin_setjmp
checking for prefix of external symbols... NONE
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking if make is GNU make... yes
checking for nroff... /usr/bin/nroff
.ext/include/x86_64-linux/ruby/config.h updated
configure: ruby library version = 2.3.0
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating Makefile
config.status: creating ruby-2.3.pc

# 执行如下命令

[root@zero ruby-2.3.8]#  make && make install 

installing default gems:      /usr/local/lib/ruby/gems/2.3.0 (build_info, cache, doc, extensions, gems, specifications)
                              bigdecimal 1.2.8
                              io-console 0.4.5
                              json 1.8.3.1
                              psych 2.1.0.1
                              rdoc 4.2.1
installing bundle gems:       /usr/local/lib/ruby/gems/2.3.0 (build_info, cache, doc, extensions, gems, specifications)
                              rake 10.4.2
                              minitest 5.8.5
                              test-unit 3.1.5
                              did_you_mean 1.0.0
                              power_assert 0.2.6
                              net-telnet 0.1.1
installing rdoc:              /usr/local/share/ri/2.3.0/system
installing capi-docs:         /usr/local/share/doc/ruby

# 通过gem install  redis 搭建redis集群出现如下错误

[root@zero ruby-2.3.8]# gem install redis
ERROR:  Loading command: install (LoadError)
	cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

#解决方法
#首先安装zlib库   

[root@zero ruby-2.3.8]# yum install zlib-devel
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.cn99.com
 * updates: mirrors.163.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package zlib-devel.x86_64 0:1.2.3-29.el6 will be installed
--> Processing Dependency: zlib = 1.2.3-29.el6 for package: zlib-devel-1.2.3-29.el6.x86_64
--> Running transaction check
---> Package zlib.x86_64 0:1.2.3-25.el6 will be updated
---> Package zlib.x86_64 0:1.2.3-29.el6 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch            Version                Repository     Size
================================================================================
Installing:
 zlib-devel          x86_64          1.2.3-29.el6           base           44 k
Updating for dependencies:
 zlib                x86_64          1.2.3-29.el6           base           73 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       1 Package(s)

Total download size: 117 k
Is this ok [y/N]: y
Downloading Packages:
(1/2): zlib-1.2.3-29.el6.x86_64.rpm                      |  73 kB     00:00     
(2/2): zlib-devel-1.2.3-29.el6.x86_64.rpm                |  44 kB     00:00     
--------------------------------------------------------------------------------
Total                                           342 kB/s | 117 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating   : zlib-1.2.3-29.el6.x86_64                                     1/3 
  Installing : zlib-devel-1.2.3-29.el6.x86_64                               2/3 
  Cleanup    : zlib-1.2.3-25.el6.x86_64                                     3/3 

Installed:
  zlib-devel.x86_64 0:1.2.3-29.el6                                              

Dependency Updated:
  zlib.x86_64 0:1.2.3-29.el6                                                    

Complete!

集成zlib库到Ruby环境

# 进入到相关目录

[root@zero ruby-2.3.8]# cd ext/zlib/
[root@zero zlib]# ruby extconf.rb 
checking for deflateReset() in -lz... yes
checking for zlib.h... yes
checking for crc32_combine() in zlib.h... yes
checking for adler32_combine() in zlib.h... yes
checking for z_crc_t in zlib.h... no
creating Makefile
[root@zero zlib]# make
compiling zlib.c
linking shared-object zlib.so
[root@zero zlib]# make install
/usr/bin/install -c -m 0755 zlib.so /usr/local/lib/ruby/site_ruby/2.3.0/x86_64-linux
[root@zero zlib]# gem install redis
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
[root@zero zlib]# 

#解决方案

[root@zero zlib]# yum install openssl-devel -y

#上一步执行完成,如下操作

[root@zero ext]# cd openssl/
[root@zero openssl]# ruby ./extconf.rb 

checking for CRYPTO_THREADID.ptr in openssl/crypto.h... yes
checking for EVP_CIPHER_CTX.flags in openssl/evp.h... yes
checking for EVP_CIPHER_CTX.engine in openssl/evp.h... yes
checking for X509_ATTRIBUTE.single in openssl/x509.h... yes
checking for OPENSSL_FIPS in openssl/opensslconf.h... yes
checking for EVP_CTRL_GCM_GET_TAG in openssl/evp.h... yes
creating extconf.h
creating Makefile

#编辑Makefile文件
[root@zero openssl]# vi Makefile 

#在最上边添加   top_srcdir = ../..    设置
# 执行make install

[root@zero openssl]# gem install redis
Fetching: redis-4.1.2.gem (100%)
Successfully installed redis-4.1.2
Parsing documentation for redis-4.1.2
Installing ri documentation for redis-4.1.2
Done installing documentation for redis after 1 seconds
1 gem installed

# 出现以上结果说明成功

集成redis

[root@zero local]# ./redis/src/redis-trib.rb  create --replicas 1 192.168.2.173:6380 192.168.2.173:6381 192.168.2.173:6382 192.168.2.173:6383 192.168.2.173:6384 192.168.2.173:6385
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.173:6380
192.168.2.173:6381
192.168.2.173:6382
Adding replica 192.168.2.173:6383 to 192.168.2.173:6380
Adding replica 192.168.2.173:6384 to 192.168.2.173:6381
Adding replica 192.168.2.173:6385 to 192.168.2.173:6382
M: 269e2d9e8fb646c5e8f5c63d29693a3614826ad5 192.168.2.173:6380
   slots:0-5460 (5461 slots) master
M: add3dc9c44ef41a9c194e92d91e1930443ddf001 192.168.2.173:6381
   slots:5461-10922 (5462 slots) master
M: 940b350d48605c515b6ec845e93af6ea0766163e 192.168.2.173:6382
   slots:10923-16383 (5461 slots) master
S: 742a925513303a4eb7259975dfdee2f5fdb319dc 192.168.2.173:6383
   replicates 269e2d9e8fb646c5e8f5c63d29693a3614826ad5
S: 33838395f6dc806cb9e204b4d0e03b72dbca4cd5 192.168.2.173:6384
   replicates add3dc9c44ef41a9c194e92d91e1930443ddf001
S: 0142a4e22483ccfb9b217c4af298c42861ac0a7c 192.168.2.173:6385
   replicates 940b350d48605c515b6ec845e93af6ea0766163e
Can I set the above configuration? (type 'yes' to accept): y
*** Aborting...
[root@zero local]# ./redis/src/redis-trib.rb  create --replicas 1 192.168.2.173:6380 192.168.2.173:6381 192.168.2.173:6382 192.168.2.173:6383 192.168.2.173:6384 192.168.2.173:6385>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.2.173:6380
192.168.2.173:6381
192.168.2.173:6382
Adding replica 192.168.2.173:6383 to 192.168.2.173:6380
Adding replica 192.168.2.173:6384 to 192.168.2.173:6381
Adding replica 192.168.2.173:6385 to 192.168.2.173:6382
M: 269e2d9e8fb646c5e8f5c63d29693a3614826ad5 192.168.2.173:6380
   slots:0-5460 (5461 slots) master
M: add3dc9c44ef41a9c194e92d91e1930443ddf001 192.168.2.173:6381
   slots:5461-10922 (5462 slots) master
M: 940b350d48605c515b6ec845e93af6ea0766163e 192.168.2.173:6382
   slots:10923-16383 (5461 slots) master
S: 742a925513303a4eb7259975dfdee2f5fdb319dc 192.168.2.173:6383
   replicates 269e2d9e8fb646c5e8f5c63d29693a3614826ad5
S: 33838395f6dc806cb9e204b4d0e03b72dbca4cd5 192.168.2.173:6384
   replicates add3dc9c44ef41a9c194e92d91e1930443ddf001
S: 0142a4e22483ccfb9b217c4af298c42861ac0a7c 192.168.2.173:6385
   replicates 940b350d48605c515b6ec845e93af6ea0766163e
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.2.173:6380)
M: 269e2d9e8fb646c5e8f5c63d29693a3614826ad5 192.168.2.173:6380
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: add3dc9c44ef41a9c194e92d91e1930443ddf001 192.168.2.173:6381
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 742a925513303a4eb7259975dfdee2f5fdb319dc 192.168.2.173:6383
   slots: (0 slots) slave
   replicates 269e2d9e8fb646c5e8f5c63d29693a3614826ad5
M: 940b350d48605c515b6ec845e93af6ea0766163e 192.168.2.173:6382
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 33838395f6dc806cb9e204b4d0e03b72dbca4cd5 192.168.2.173:6384
   slots: (0 slots) slave
   replicates add3dc9c44ef41a9c194e92d91e1930443ddf001
S: 0142a4e22483ccfb9b217c4af298c42861ac0a7c 192.168.2.173:6385
   slots: (0 slots) slave
   replicates 940b350d48605c515b6ec845e93af6ea0766163e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@zero local]# 

集群测试

#  集群客户端连接方式 redis-cli  -c 

[root@zero local]# ./redis/src/redis-cli -c -p 6380
127.0.0.1:6380> set aaa avalue
-> Redirected to slot [10439] located at 192.168.2.173:6381
OK
192.168.2.173:6381> get aaa
"avalue"
192.168.2.173:6381> 

#切换客户端读取值

[root@zero local]# ./redis/src/redis-cli -c  -p 6383
127.0.0.1:6383> get aaa
-> Redirected to slot [10439] located at 192.168.2.173:6381
"avalue"
192.168.2.173:6381> 

不加-c会报错如下

[root@zero local]# ./redis/src/redis-cli  -p 6383
127.0.0.1:6383> get aaa
(error) MOVED 10439 192.168.2.173:6381
127.0.0.1:6383> 

查看当前集群主从关系

[root@zero local]#   redis/src/redis-cli  cluster nodes | grep master
Could not connect to Redis at 127.0.0.1:6379: Connection refused
[root@zero local]#   redis/src/redis-cli -p 6380 cluster nodes | grep master
add3dc9c44ef41a9c194e92d91e1930443ddf001 192.168.2.173:6381@16381 master - 0 1562749258000 2 connected 5461-10922
940b350d48605c515b6ec845e93af6ea0766163e 192.168.2.173:6382@16382 master - 0 1562749260621 3 connected 10923-16383
269e2d9e8fb646c5e8f5c63d29693a3614826ad5 192.168.2.173:6380@16380 myself,master - 0 1562749257000 1 connected 0-5460
[root@zero local]#   redis/src/redis-cli -p 6380 cluster nodes | grep slave
742a925513303a4eb7259975dfdee2f5fdb319dc 192.168.2.173:6383@16383 slave 269e2d9e8fb646c5e8f5c63d29693a3614826ad5 0 1562749303796 4 connected
33838395f6dc806cb9e204b4d0e03b72dbca4cd5 192.168.2.173:6384@16384 slave add3dc9c44ef41a9c194e92d91e1930443ddf001 0 1562749302795 5 connected
0142a4e22483ccfb9b217c4af298c42861ac0a7c 192.168.2.173:6385@16385 slave 940b350d48605c515b6ec845e93af6ea0766163e 0 1562749301791 6 connected

验证故障转移

# 杀掉6380 端口redis进程

18479:S 10 Jul 17:21:56.961 # Connection with master lost.
18479:S 10 Jul 17:21:56.961 * Caching the disconnected master state.
18479:S 10 Jul 17:21:57.352 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:21:57.352 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:21:57.352 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:21:58.357 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:21:58.358 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:21:58.358 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:21:59.363 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:21:59.363 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:21:59.364 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:00.369 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:00.369 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:00.370 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:01.375 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:01.375 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:01.376 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:02.379 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:02.380 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:02.380 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:03.385 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:03.385 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:03.385 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:04.389 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:04.389 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:04.389 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:05.391 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:05.392 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:05.392 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:06.395 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:06.396 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:06.396 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:07.399 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:07.401 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:07.402 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:08.406 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:08.406 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:08.406 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:09.409 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:09.409 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:09.409 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:10.413 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:10.413 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:10.414 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:11.419 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:11.419 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:11.420 # Error condition on socket for SYNC: Connection refused
18472:M 10 Jul 17:22:12.266 * Marking node f787c39d0bf8e98278b276863524c93da9387363 as failing (quorum reached).
18472:M 10 Jul 17:22:12.267 # Cluster state changed: fail
18489:S 10 Jul 17:22:12.268 * FAIL message received from bbbe8f8d4a45cf0d7c99613932f667affa7867b9 about f787c39d0bf8e98278b276863524c93da9387363
18474:M 10 Jul 17:22:12.269 * Marking node f787c39d0bf8e98278b276863524c93da9387363 as failing (quorum reached).
18474:M 10 Jul 17:22:12.269 # Cluster state changed: fail
18489:S 10 Jul 17:22:12.269 # Cluster state changed: fail
18487:S 10 Jul 17:22:12.272 * FAIL message received from bbbe8f8d4a45cf0d7c99613932f667affa7867b9 about f787c39d0bf8e98278b276863524c93da9387363
18487:S 10 Jul 17:22:12.272 # Cluster state changed: fail
18479:S 10 Jul 17:22:12.274 * FAIL message received from 6a573e5464bb35c092e30045d9d9776eaf7a8757 about f787c39d0bf8e98278b276863524c93da9387363
18479:S 10 Jul 17:22:12.274 # Cluster state changed: fail
18479:S 10 Jul 17:22:12.324 # Start of election delayed for 531 milliseconds (rank #0, offset 252).
18479:S 10 Jul 17:22:12.425 * Connecting to MASTER 192.168.2.173:6380
18479:S 10 Jul 17:22:12.425 * MASTER <-> SLAVE sync started
18479:S 10 Jul 17:22:12.425 # Error condition on socket for SYNC: Connection refused
18479:S 10 Jul 17:22:12.928 # Starting a failover election for epoch 7.
18472:M 10 Jul 17:22:12.935 # Failover auth granted to afbf0d94658b127209ae9efbd8264266aa9be734 for epoch 7
18474:M 10 Jul 17:22:12.936 # Failover auth granted to afbf0d94658b127209ae9efbd8264266aa9be734 for epoch 7
18479:S 10 Jul 17:22:12.936 # Failover election won: I'm the new master.
18479:S 10 Jul 17:22:12.937 # configEpoch set to 7 after successful failover
18479:M 10 Jul 17:22:12.937 # Setting secondary replication ID to b76187f820013062bbff5373a457c3a077d52878, valid up to offset: 253. New replication ID is d4c7e518a47a412e5e28e7b39ce1b9dd21bfc687
18479:M 10 Jul 17:22:12.937 * Discarding previously cached master state.
18479:M 10 Jul 17:22:12.937 # Cluster state changed: ok
18487:S 10 Jul 17:22:12.976 # Cluster state changed: ok
18472:M 10 Jul 17:22:12.978 # Cluster state changed: ok
18489:S 10 Jul 17:22:12.979 # Cluster state changed: ok
18474:M 10 Jul 17:22:12.980 # Cluster state changed: ok
# 重新查看进程状态

[root@zero local]#   redis/src/redis-cli -p 6381 cluster nodes | grep master
f787c39d0bf8e98278b276863524c93da9387363 192.168.2.173:6380@16380 master,fail - 1562750517054 1562750514244 1 disconnected
6a573e5464bb35c092e30045d9d9776eaf7a8757 192.168.2.173:6382@16382 master - 0 1562750611658 3 connected 10923-16383
bbbe8f8d4a45cf0d7c99613932f667affa7867b9 192.168.2.173:6381@16381 myself,master - 0 1562750612000 2 connected 5461-10922
afbf0d94658b127209ae9efbd8264266aa9be734 192.168.2.173:6383@16383 master - 0 1562750613667 7 connected 0-5460
[root@zero local]#   redis/src/redis-cli -p 6381 cluster nodes | grep slave
86d0ef4b5fbceb783f3f75390bd395ee87e5cbb5 192.168.2.173:6385@16385 slave 6a573e5464bb35c092e30045d9d9776eaf7a8757 0 1562750645000 6 connected
70d733b907e8afb4f19f6155d073b5c3adce7ff9 192.168.2.173:6384@16384 slave bbbe8f8d4a45cf0d7c99613932f667affa7867b9 0 1562750644000 5 connected
[root@zero local]# 

#6383由原来到slave 升级为现在到master 

Redis配置说明

Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf,配置项说明如下:

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

    daemonize no

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

    pidfile /var/run/redis.pid

3. 指定Redis监听端口,默认端口为6379,

    port 6379

4. 绑定的主机地址

    bind 127.0.0.1

5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

    timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

    loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id

    databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save <seconds> <changes>

    Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

    rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

    dbfilename dump.rdb

12. 指定本地数据库存放目录

    dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    slaveof <masterip> <masterport>

14. 当master服务设置了密码保护时,slav服务连接master的密码

    masterauth <master-password>

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认关闭

    requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

    maxmemory <bytes>

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

     appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值: 
    no:表示等操作系统进行数据缓存同步到磁盘(快) 
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
    everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

     vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

     vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

     vm-max-memory 0

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

     vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

     vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

     vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

    glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

    activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

    include /path/to/local.conf
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值