REDIS哨兵主从配置
- 环境描述
操作系统:CentOS 5.10 x64
硬件配置:阿里云8核8G100G硬盘。
IP地址:10.253.2.32 【默认主】
IP地址:10.253.5.158【默认从】
版本号:redis-2.8 - Redis安装部署
Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集.
(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。
Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全
久化模式”)。
安装 tcl
下载tcl 包 http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
--解压包
tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
--进入目录
cd /usr/local/tcl8.6.1/unix/
--安装前检查
./configure
--编译
make
--运行
make install
安装时间比较花时间
安装redis
1. 下载地址:
$ wget http://redis.io/download
2. 解压缩
$ tar xzf redis-2.8.19.tar.gz
3. 编译
$ cd redis-2.8.19
$ make
$make install
或者指定目录安装
$ make PREFIX=/home/redis/redis install
$cp redis.conf /etc/
参数介绍:
make install命令执行完成后,会在/usr/local/bin目录下生成个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof 、redis-check-dump,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在当前系统下的读写性能
redis-check-aof:数据修复
redis-check-dump:检查导出工具
4. 修改系统配置文件,执行命令
a) echo vm.overcommit_memory=1 >> /etc/sysctl.conf
b) sysctl vm.overcommit_memory=1 或执行echo vm.overcommit_memory=1 >>/proc/sys/vm/overcommit_memory
使用数字含义:
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
5. 修改redis配置文件
a) $ cd /etc/
b) vi redis.conf
c) 修改daemonize yes---目的使进程在后台运行
参数介绍:
daemonize:是否以后台daemon方式运行
pidfile:pid文件位置
port:监听的端口号
timeout:请求超时时间
loglevel:log信息级别
logfile:log文件位置
databases:开启数据库的数量
save :保存快照的频率,第一个表示多长时间,第三个表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
rdbcompression:是否使用压缩
dbfilename:数据快照文件名(只是文件名,不包括目录)
dir:数据快照的保存目录(这个是目录)
appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
6. 启动redis
a) $ cd /usr/local/bin
b) ./redis-server /etc/redis.conf
7. 检查是否启动成功
a) $ ps -ef | grep redis
b) redis-cli -p 8086
127.0.0.1:6379> set foo bat
OK
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379> get bat - Redis主从配置
仅需要在slave node上修改配置:
找到slaveof这行,参考下面的修改(填上master node的ip和端口就完事了)
slaveof 10.253.2.332 8086 //哨兵主从配置,第一次必须人工定义好主从。后续哨兵记住了同一网络中存在的所有redis服务器,会自动删除掉此配置。
另外注意下 slave-read-only yes 这行,这表示slave只读不写,也是推荐设置【在哨兵主从这个参数不需要配置,因为从机我们还需要提升为master】 - 哨兵的配置
redis提供了sentinel(哨兵)机制,通过sentinel模式启动redis后,自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决。每个sentinel会向其它sentinal、master、slave定时发送消息,以确认对方是否“活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称SDOWN)。
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master"彻底死亡"(即:客观上的真正down机,Objective Down,简称ODOWN),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
在2台redis服务器上分别创建sentinel.conf文件
安装redis之后,其安装目录为/usr/loca/bin/
在此目录下,创建conf文件夹,然后在conf文件夹创建sentinel.conf,内容如下:
port 7050 //哨兵监听的端口号
dir /usr/local/bin/ //redis的主目录
sentinel monitor mymaster 10.253.2.32 8086 1 //默认的主服务器。 1表示只要一个哨兵监听到主服务器ODOWN,就开始failover.
sentinel down-after-milliseconds mymaster 5000 //哨兵监听redis主服务器没有响应超过5秒,就认为是SDOWN了。
sentinel parallel-syncs mymaster 1 //新master启动之后,只允许同一时刻一台从服务器更新同步数据
sentinel failover-timeout mymaster 15000 //哨兵监听redis主服务器没有响应超过15秒,就开始进行failover,进行选举新的master。
启动redis
./redis-server /etc/redis.conf
启动哨兵
./redis-sentinel conf/sentinel.conf
确认主机
在2台机器上同时确认主机信息
./redis-cli -p 7050 sentinel masters
) 1) "name"
2) "mymaster"
3) "ip"
4) "10.253.2.32"
5) "port"
6) "8086"
7) "runid"
8) "3bad76dd51566847d8b0603865310b87584201f9"
9) "flags"
10) "master"
11) "pending-commands"
12) "0"
13) "last-ping-sent"
14) "0"
15) "last-ok-ping-reply"
16) "351"
17) "last-ping-reply"
18) "351"
19) "down-after-milliseconds"
20) "5000"
21) "info-refresh"
22) "8559"
23) "role-reported"
24) "master"
25) "role-reported-time"
26) "44678013"
27) "config-epoch"
28) "8"
29) "num-slaves"
30) "1"
31) "num-other-sentinels"
32) "1"
33) "quorum"
34) "1"
35) "failover-timeout"
36) "15000"
37) "parallel-syncs"
38) "1"
关闭掉主服务器
./redis-cli -p 8086 shutdown
再次确认主机信息
./redis-cli -p 7050 sentinel masters
) 1) "name"
2) "mymaster"
3) "ip"
4) "10.253.5.158"
5) "port"
6) "8086"
7) "runid"
8) "3bad76dd51566847d8b0603865310b87584201f9"
9) "flags"
10) "master"
11) "pending-commands"
12) "0"
13) "last-ping-sent"
14) "0"
15) "last-ok-ping-reply"
16) "351"
17) "last-ping-reply"
18) "351"
19) "down-after-milliseconds"
20) "5000"
21) "info-refresh"
22) "8559"
23) "role-reported"
24) "master"
25) "role-reported-time"
26) "44678013"
27) "config-epoch"
28) "8"
29) "num-slaves"
30) "1"
31) "num-other-sentinels"
32) "1"
33) "quorum"
34) "1"
35) "failover-timeout"
36) "15000"
37) "parallel-syncs"
38) "1"
查看哨兵的配置
port 7050
dir "/usr/local/bin"
sentinel monitor mymaster 10.253.2.32 8086 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
Generated by CONFIG REWRITE
sentinel config-epoch mymaster 8
sentinel leader-epoch mymaster 8
sentinel known-slave mymaster 10.253.5.158 8086
sentinel known-sentinel mymaster 10.253.5.158 3306 8f27d969797b27e89da6ed2156ba9f1cebfdc885 //哨兵记录了网络中存在的这台redis服务器,在10.253.2.32 down掉之后,通过选举把10.253.5.158定义为主服务器。同时,记录了这台redis服务器的信息在自己的配置文件中。2台服务器上的哨兵配置都会记录。
sentinel current-epoch 8 - 生产项目配置redis
配置文件application.yml
spring:
redis:
sentinel:
master: mymaster
nodes: 10.253.2.32:3306,10.253.5.158:3306
原文地址:http://blog.51cto.com/nhylovezyh/2087337