Redis 安装,主从配置及Sentinel配置自动Failover
1、安装redis
首页地址:http://redis.io/
下载地址:http://download.redis.io/ 下载最新的源码包
tar -zxvf redis-stable.tar.gz -C /apps/product/ cd /apps/product/redis-stable/ make MALLOC=libc make install
2、运行
加载配置文件并后台运行
redis-server /apps/product/redis-stable/redis.conf &
#redis-cli (命令行工具)
3、测试
# redis-benchmark --help 获取帮助信息,其中包含压力测试命令样例
实际测试举例
[root@localhost~]# redis-benchmark -t set -c 20 -n 1000000 -r 100000000 ====== SET ====== 1000000 requests completed in 8.92 seconds 20 parallel clients 3 bytes payload keep alive: 1 100.00% <= 0 milliseconds 112095.06 requests per second
4、主从配置及测试:
主 | gc-redis1 | 10.10.10.15 | 6379 |
从 | gc-redis2 | 10.10.10.16 | 6379 |
从 | gc-redis3 | 10.10.10.17 | 6379 |
#主服务器(10.15)上做如下配置,其他默认即可:
[root@gc-redis1 redis-stable]# vim /apps/product/redis-stable/redis.conf masterauth "xxoo" requirepass "xxoo"
#从服务器上(10.16,10.17)做如下配置,其他默认即可:
[root@gc-redis2 redis-stable]# vim /apps/product/redis-stable/redis.conf slaveof 10.10.10.15 6379 masterauth "xxoo" requirepass "xxoo" [root@gc-redis3 redis-stable]# vim /apps/product/redis-stable/redis.conf slaveof 10.10.10.15 6379 masterauth "xxoo" requirepass "xxoo"
#启动主、从redis服务:
redis-server /apps/product/redis-stable/redis.conf &
#主服务器显示信息:
[13997] 03 Nov 09:57:21.045 * Slave ask for synchronization [13997] 03 Nov 09:57:21.045 * Starting BGSAVE for SYNC [13997] 03 Nov 09:57:21.046 * Background saving started by pid 14002 [14002] 03 Nov 09:57:21.058 * DB saved on disk [14002] 03 Nov 09:57:21.059 * RDB: 0 MB of memory used by copy-on-write [13997] 03 Nov 09:57:21.070 * Background saving terminated with success [13997] 03 Nov 09:57:21.070 * Synchronization with slave succeeded
#从服务器显示信息:
[3496] 03 Nov 09:56:41.953 * Connecting to MASTER... [3496] 03 Nov 09:56:41.953 * MASTER <-> SLAVE sync started [3496] 03 Nov 09:56:41.954 * Non blocking connect for SYNC fired the event. [3496] 03 Nov 09:56:41.954 * Master replied to PING, replication can continue... [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: receiving 18 bytes from master [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: Loading DB in memory [3496] 03 Nov 09:56:42.055 * MASTER <-> SLAVE sync: Finished with success [3499] 03 Nov 09:56:42.056 * SYNC append only file rewrite performed [3499] 03 Nov 09:56:42.057 * AOF rewrite: 0 MB of memory used by copy-on-write [3496] 03 Nov 09:56:42.057 * Background append only file rewriting started by pid 3499 [3496] 03 Nov 09:56:42.154 * Background AOF rewrite terminated with success [3496] 03 Nov 09:56:42.154 * Parent diff successfully flushed to the rewritten AOF (0 bytes) [3496] 03 Nov 09:56:42.154 * Background AOF rewrite finished successfully
#主服务器查看主从信息
[root@gc-redis1 ~]# redis-cli -h 127.0.0.1 -a xxoo info replication # Replication role:master connected_slaves:2 slave0:ip=10.10.10.16,port=6379,state=online,offset=168812144,lag=1 slave1:ip=10.10.10.17,port=6379,state=online,offset=168812144,lag=0 master_repl_offset:168812281 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:167763706 repl_backlog_histlen:1048576
#从服务器查看主从信息
[root@gc-redis2 ~]# redis-cli -h 127.0.0.1 -a xxoo info replication # Replication role:slave master_host:10.10.10.15 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:168809239 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
#写同步测试
#主服务器
[root@gc-redis1 ~]# redis-cli -h 127.0.0.1 -a redispass redis 127.0.0.1:6379> set a 123 OK redis 127.0.0.1:6379> get a "123"
#从服务器
[root@gc-redis2~]# redis-cli -h 127.0.0.1 -a xxoo redis 127.0.0.1:6379> get a "123" [root@gc-redis3~]# redis-cli -h 127.0.0.1 -a xxoo redis 127.0.0.1:6379> get a "123" redis 127.0.0.1:6379> set b 234 (error) READONLY You can't write against a read only slave. (开起了只读模式,所以从将不能写入数据,可以保证数据只从主服务器同步至从服务器)
#故障测试
#从服务器宕机将自动从主服务器的主从关系中解除
#主服务器宕机,从服务器显示,并且不能自动切换
[15932] 03 Nov 09:46:25.465 * Connecting to MASTER... [15932] 03 Nov 09:46:25.465 * MASTER <-> SLAVE sync started [15932] 03 Nov 09:46:25.466 # Error condition on socket for SYNC: Connection refused
5、Redis sentinel配置
主页地址:http://redis.io/topics/sentinel
sentinel主要功能就是为Redis M-S(master,slaves)集群提供了
1)master存活检测
2)集群中M-S服务监控
3) 自动故障转移,M-S角色转换等能力,从一个方面说是提高了redis集群的可用性.
#添加并编辑配置文件/etc/sentinel.conf,新增内容如下,也可在安装文件中负责sentinel配置文件并作适当修改:
[root@gc-redis1 ~]# vim /apps/product/redis-stable/sentinel.conf port 26379 sentinel monitor mymaster 10.10.10.15 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 20000 sentinel auth-pass mymaster xxoo sentinel config-epoch mymaster 2 sentinel leader-epoch mymaster 2 ----------------------------------------------------------------------------------------------- [root@gc-redis2 ~]# vim /apps/product/redis-stable/sentinel.conf port 26380 sentinel monitor mymaster 10.10.10.15 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 20000 sentinel auth-pass mymaster xxoo sentinel config-epoch mymaster 2 sentinel leader-epoch mymaster 2 ---------------------------------------------------------------------------------------------- [root@gc-redis3 ~]# vim /apps/product/redis-stable/sentinel.conf port 26381 sentinel monitor mymaster 10.10.10.15 6379 2 sentinel down-after-milliseconds mymaster 3000 sentinel failover-timeout mymaster 20000 sentinel auth-pass mymaster xxoo sentinel config-epoch mymaster 2 sentinel leader-epoch mymaster 2
#在三个服务器中以sentinel模式启动redis-server
启动sentinel [root@gc-redis1 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel & [root@gc-redis2 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel & [root@gc-redis3 ~]#redis-server /apps/product/redis-stable/sentinel.conf --sentinel &
#三台服务器sentinel输出:(注意每个机器输出对应的都是另外两台机器的IP)
#关掉主gc-redis1的redis-server服务
#将重新选举主服务器并重新配置连接到新的主服务器:
#查看主从关系:(gc-redis2为主,gc-redis3为从,如果gc-redis1重新启动,也将为从服务器加入到新的集群)
启动redis redis-server /usr/local/redis-stable/redis.conf & 停止redis redis-cli -a xxoo shutdown 启动sentinel redis-server /usr/local/redis-stable/sentinel.conf --sentinel & 查看主备信息: redis-cli -h 127.0.0.1 -p 6379 -a xxoo info replication
.