哨兵模式redis集群:
1、操作系统CentOS release 6.5
2、redis-3.2.4
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。
1、实时地监控redis是否按照预期良好地运行;
2、如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端);
3、能够基于选举制进行自动切换。当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中的一个来作为新的master,其它的slave节点会将它所追随的master的地址改为被提升为master的slave的新地址。
将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并查看状态
分别在三台服务器上搭建单点版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
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服务搭建成功。
分别修改三台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
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的保护模式,实现没有密码下的连接
./redis-sentinel /path/to/sentinel.conf
一定要指定sentinel的配置文件路径
分别启动三台redis下集成的sentinel
在sentinel中查看哨兵启动状态:
ps -aux | grep redis
会有如下信息
三节点三哨兵监控搭建成功。
手动kill掉一个redis服务,再通过redis-cli客户端通过info Replication命令查看集群状态,集群状态会自动切换到其它两台备机中选择一台作为主机。
在sentinel.log中会打印出集群的修改状态,与主备机切换的信息。
拷贝 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
三主三备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