REDIS哨兵主从配置

  1. 环境描述
    操作系统:CentOS 5.10 x64
    硬件配置:阿里云8核8G100G硬盘。
    IP地址:10.253.2.32 【默认主】
    IP地址:10.253.5.158【默认从】
    版本号:redis-2.8
  2. 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/download2. 解压缩
$ 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

  1. Redis主从配置
    仅需要在slave node上修改配置:
    找到slaveof这行,参考下面的修改(填上master node的ip和端口就完事了)
    slaveof 10.253.2.332 8086 //哨兵主从配置,第一次必须人工定义好主从。后续哨兵记住了同一网络中存在的所有redis服务器,会自动删除掉此配置。
    另外注意下 slave-read-only yes 这行,这表示slave只读不写,也是推荐设置【在哨兵主从这个参数不需要配置,因为从机我们还需要提升为master】
  2. 哨兵的配置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"
  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"

  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

  1. 生产项目配置redis
    配置文件application.yml
    spring:
    redis:
    sentinel:
    master: mymaster
    nodes: 10.253.2.32:3306,10.253.5.158:3306


转载于:https://blog.51cto.com/nhylovezyh/2087337