三主三备redis集群与基于sentinel(哨兵)实现redis三节点选举机制的集群

哨兵模式redis集群:

一、环境配置要求

1、操作系统CentOS release 6.5

2、redis-3.2.4

二、Sentinel简介

2.1、内容简介

Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。

2.2、功能介绍

1、实时地监控redis是否按照预期良好地运行;

2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);

3、能够基于选举制进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。

三、搭建redis主备

3.1、安装单机版redis

将redis-3.2.4.tar.gz解压并编译。

tar -zxvf redis-3.2.4.tar.gz

cd redis-3.2.4

make

cd src

./redis-server redis.conf

ps aux | grep redis

启动单点版redis并查看状态

3.2、搭建一主两备redis

分别在三台服务器上搭建单点版redis服务。

示例 单台服务器基于端口模拟三台:

10.10.10.102:7000

10.10.10.102:7001

10.10.10.102:7002

修改redis.conf配置文件

vim redis.conf

修改参数如下:红色为需要修改 黑色为默认

protected-mode no   #关闭保护模式,不用密码即可连接

port 6379

tcp-backlog 511

timeout 0

tcp-keeplive 300

daemonize yes  #开始后台启动

supervised no

pidfile /var/run/redis.pid  #redis单点唯一标识 保证路径可访问并有此文件

loglevel notice

logfile /home/redis/redis.log  #存放redis日志的位置

database 16

save 900 1

save 300 10

save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename "dump.rdb"

dir "/home/redis"   #此路径为一个文件夹 用于存放dump.rdb文件

slaveof  <masterip>  <masterport>  #此参数只需在两个备节点中配置主节点不用配置

slave-serve-stale-data yes

slave-read-only yes

repl-diskless-sync no

repl-diskless-sync-delay 5

repl-disable-tcp-nodelay no

slave-priority 100

#此参数表示访问时密码 如果当前参数配置上,则需要修改protected-mode为yes

requirepass password   

appendonly yes

appendfilename "appendonly.aof"

appendfsync everysec

 

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

lua-time-limit 5000

cluster-enabled no   #目前是单点主备无需开启集群模式  一下关于cluster的参数可不配置

cluster-config-file "nodes-7000.conf"

cluster-node-timeout 15000

slowlog-log-slower-than 10000

slowlog-max-len 128nnnn

latency-monitor-threshold 0

notify-keyspace-events ""

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

activerehashing yes

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

hz 10

aof-rewrite-incremental-fsync yes

配置文件说明如上:

分别修改三台redis并在其中两台redis中的配置文件中添加slaveof参数并指向master ip port

分别重启三台redis服务

重启redis服务后,通过./redis-cli进入命令行模式

输入 info Replication 命令查看redis一主两备服务状态

查看信息如上图,即证明一主两备redis服务搭建成功。

四、搭建哨兵集群

3.1、修改配置文件

分别修改三台redis-3.2.4目录下的sentinel.conf文件中的内容:

修改内容如下:

sentinel monitor mymaster 10.10.10.102 7000 2

sentinel down-after-milliseconds mymaster 60000

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs mymaster 1

daemonize yes

logfile “path/sentinel.log”

protected-mode no

3.2、配置内容详解

1、sentinel monitor mymaster 10.10.10.102 7000 2

这一行代表sentinel监控的master的名字叫做mymaster,地址为10.10.10.102 7000,行尾最后的一个2代表什么意思呢?我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,当sentinel集群式,解决这个问题的方法就变得很简单,只需要多个sentinel互相沟通来确认某个master是否真的死了,这个2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。(sentinel集群中各个sentinel也有互相通信,通过gossip协议)。

2、down-after-milliseconds

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectively down, 也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,单位是毫秒。

3、failover-timeout

如果sentinel A推荐sentinel B去执行failover,B会等待一段时间后,自行再次去对同一个master执行failover,这个等待的时间是通过failover-timeout配置项去配置的

4、parallel-syncs

在发生failover主备切换时,这个选项指定了最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。

5、daemonize

是否后台启动

6、logfile “path/sentinel.log”

配置日志文件的绝对路径

7、protected-mode no

关闭sentinel的保护模式,实现没有密码下的连接

五、Sentinel启动命令

./redis-sentinel /path/to/sentinel.conf

一定要指定sentinel的配置文件路径

分别启动三台redis下集成的sentinel

在sentinel中查看哨兵启动状态:

 

六、查看运行状态

ps -aux | grep redis

会有如下信息

 

三节点三哨兵监控搭建成功。

七、验证哨兵集群监控状态

手动kill掉一个redis服务,再通过redis-cli客户端通过info Replication命令查看集群状态,集群状态会自动切换到其它两台备机中选择一台作为主机。

在sentinel.log中会打印出集群的修改状态,与主备机切换的信息。

八、Redis 安装

拷贝 redis-3.2.9.tar.gz 到 /usr/local/src

[root@localhost]# tar -xvv redis-3.2.9.tar.gz               

[root@localhost]# cd  /usr/local/src/ redis-3.2.9               

[root@localhost]# make               

[root@localhost]# cd  /usr/local/src/ redis-3.2.9/src               

[root@localhost]# make install PREFIX=/usr/local/redis               

[root@localhost]# cp /usr/local/src/redis-3.2.9/*.conf /usr/local/redis/bin  

[root@localhost]# ./redis-server ./redis.conf

 

客户端连接

/usr/local/redis/bin/redis-cli

  

停止redis实例

/usr/local/redis/bin/redis-cli shutdown

  或者

pkill redis-server

让redis开机自启

vim /etc/rc.local

  加入

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis-conf

 

/usr/local/redis/bin目录下的几个文件

redis-benchmark:redis性能测试工具

redis-check-aof:检查aof日志的工具

redis-check-dump:检查rdb日志的工具

redis-cli:连接用的客户端

redis-server:redis服务进程

 

Redis的配置

daemonize:如需要在后台运行,把该项的值改为yes

pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址

bind:指定redis只接收来自该IP的请求,如果不设置,那么将处理所有请求,在生产环节中最好设置该项

port:监听端口,默认为6379

timeout:设置客户端连接时的超时时间,单位为秒

loglevel:等级分为4级,debug,revbose,notice和warning。生产环境下一般开启notice

logfile:配置log文件地址,默认使用标准输出,即打印在命令行终端的端口上

database:设置数据库的个数,默认使用的数据库是0

save:设置redis进行数据库镜像的频率

rdbcompression:在进行镜像备份时,是否进行压缩

dbfilename:镜像备份文件的文件名

dir:数据库镜像备份的文件放置的路径

slaveof:设置该数据库为其他数据库的从数据库

masterauth:当主数据库连接需要密码验证时,在这里设定

requirepass:设置客户端连接后进行任何其他指定前需要使用的密码

maxclients:限制同时连接的客户端数量

maxmemory:设置redis能够使用的最大内存

appendonly:开启appendonly模式后,redis会把每一次所接收到的写操作都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态

appendfsync:设置appendonly.aof文件进行同步的频率

vm_enabled:是否开启虚拟内存支持

vm_swap_file:设置虚拟内存的交换文件的路径

vm_max_momery:设置开启虚拟内存后,redis将使用的最大物理内存的大小,默认为0

vm_page_size:设置虚拟内存页的大小

vm_pages:设置交换文件的总的page数量

vm_max_thrrads:设置vm IO同时使用的线程数量

 

详情请咨询开源网站:

 

https://segmentfault.com/a/1190000002680804

 

Java连接哨兵实现连接redis:

JedisSentinelPool jedisSentinelPool= new JedisSentinelPool(“clustername”,Set<HostAndPort>,GenericObjectPoolConfig,“password");

 

三主三备redis集群:

1、启动6台单机redis 2、修改配置文件启动集群模式 3、基于redis-trib.rb命令启动集群

三主三备集群搭建首先建立六台单机redis节点:

分别修改redis.conf配置文件:

修改配置文件中参数如下:

bind 0.0.0.0 表示可被任意ip访问

protected-mode no  关闭保护模式

port 端口号

daemonize yes 设置为后台启动

pidfile   每个节点设置一个pid文件

logfile 每个节点设置一个日志文件

appendonly yes

cluster-enabled yes   启动集群模式

cluster-config-file 设置集群配置文件位置

修改成功后分别启动。

直接拷贝如下内容也可:

daemonize yes
pidfile "/var/run/redis17080.pid"
port 17080
tcp-backlog 511  #tcp三次握手时的queue大小,与内核参数有关
timeout 0
tcp-keepalive 60
loglevel notice
logfile "/opt/redis/17080/log/redis.log"
databases 16
save ''
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/opt/redis/17080/data"
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
#rename-command FLUSHALL ""  禁止flushall命令
#rename-command FLUSHDB ""   禁止flushdb命令
maxmemory 8gb
maxmemory-policy volatile-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync always
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
cluster-enabled yes
cluster-config-file "nodes-17080.conf"
cluster-node-timeout 15000
cluster-require-full-coverage no
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

 

启动成功后执行如下命令:

使用redis-trib.rb命令需要具有ruby环境

./redis-trib.rb create --replicas 1 192.168.119.131:9001 192.168.119.131:9002 192.168.119.131:9003 192.168.119.131:9004 192.168.119.131:9005 192.168.119.131:9006

在redis5.0版本中,使用命令为 ./redis-cli --cluster create ...

如果不期望存在备节点 不适用--replicas参数即可。

如果想删除集群,删除dir配置的路径下的文件,然后再redis-cli中使用 cluster reset命令清除集群信息

动态新增删除新增节点:https://blog.csdn.net/shudaqi2010/article/details/53261761

进入redis-cli 集群时的命令  是 ./redis-cli -c -p 6379

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值