一 redis集群的目的node
在 Web 服务器中,高可用 是指服务器能够 正常访问 的时间,衡量的标准是在 多长时间 内能够提供正常服务(99.9%、99.99%、99.999% 等等)。在 Redis 层面,高可用 的含义要宽泛一些,除了保证提供 正常服务(如 主从分离、快速容灾技术 等),还须要考虑 数据容量扩展、数据安全 等等。 在 Redis 中,实现 高可用 的技术主要包括 持久化、复制、哨兵 和 集群,下面简单说明它们的做用,以及解决了什么样的问题: 1 持久化:持久化是 最简单的 高可用方法。它的主要做用是 数据备份,即将数据存储在 硬盘,保证数据不会因进程退出而丢失。 2 复制:复制是高可用 Redis 的基础,哨兵 和 集群 都是在 复制基础 上实现高可用的。复制主要实现了数据的多机备份以及对于读操做的负载均衡和简单的故障恢复。缺陷是故障恢复没法自动化、写操做没法负载均衡、存储能力受到单机的限制。 3 哨兵:在复制的基础上,哨兵实现了 自动化 的 故障恢复。缺陷是 写操做 没法 负载均衡,存储能力 受到 单机 的限制。 4 集群:经过集群,Redis 解决了 写操做 没法 负载均衡 以及 存储能力 受到 单机限制 的问题,实现了较为 完善 的 高可用方案。 #####################**0 主从,哨兵,集群三者的区别* 1.主从模式:读写分离,备份,一个Master能够有多个Slaves。 2.哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中从新选举一个主服务器。 3.集群:为了解决单机Redis容量有限的问题,将数据按必定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。
二 安装redisredis
1. 须要注意的是:必需要3个或以上的主节点,不然在建立集群时会失败,而且当存活的主节点数小于总节点数的一半时,整个集群就没法提供服务了。 2. 环境准备: redis版本5.0.3 两台centos7系统,三主三从,ip为192.168.10.227和192.168.6.220 3. 安装redis 解压,make&&make install
三 配置redis集群centos
1 建立多个redis目录安全
#两台机器上面都须要建立这个目录,端口最好不要同样 mkdir -p /home/yx/server/ redis_cluster{16379/log,16380/log,16381/log} 拷贝redis配置文件到各个目录下 ├── 16379 │ ├── log │ │ └── redis.log │ └── redis.conf ├── 16380 │ ├── log │ │ └── redis.log │ └── redis.conf └── 16381 ├── log │ └── redis.log ├── nodes-16381.conf └── redis.conf
2 修改redis配置文件ruby
port 16379 #//端口16379,16380,16381 bind 本机ip #/默认ip为127.0.0.1 须要改成其余节点机器可访问的ip 不然建立集群时没法访问对应的端口,没法建立集群 daemonize yes #redis后台运行 pidfile /var/run/redis_16379.pid #pidfile文件对应16379,16380,16381 cluster-enabled yes #开启集群 把注释#去掉 cluster-config-file nodes_16379.conf #集群的配置 配置文件首次启动自动生成 7000,7001,7002 cluster-node-timeout 15000 #请求超时 默认15秒,可自行设置 appendonly yes #aof日志开启 有须要就开启,它会每次写操做都记录一条日志 logfile "/home/yx/server/redis_cluster/16379/log/redis.log" #默认是空,设置日志存放目录
3 启动redis服务器
# 10.227 redis-server redis_cluster/16379/redis.conf redis-server redis_cluster/16380/redis.conf redis-server redis_cluster/16381/redis.conf #6.220 redis-server redis_cluster/16382/redis.conf redis-server redis_cluster/16383/redis.conf redis-server redis_cluster/16384/redis.conf
四 建立集群app
# 旧版建立集群,还须要安装ruby环境 redis-trib.rb create --replicas 1 192.168.10.227:16379 192.168.10.227:16380 192.168.10.227:16381 192.168.6.220:16382 192.168.6.220:16383 192.168.6.220:16384 # 新版 redis-cli --cluster create 192.168.10.227:16379 192.168.10.227:16380 192.168.10.227:16381 192.168.6.220:16382 192.168.6.220:16383 192.168.6.220:16384 --cluster-replicas 1
运行上面的命令以下图所示:
输入yes便可
出现下面信息即表明成功
五 验证集群负载均衡
# 在10.227上面随便登录一个redis redis-cli -h 192.168.10.227 -c -p 16379 # 登录集群用-c 192.168.10.227:16379> set hello world OK 192.168.10.227:16379> keys * 1) "hello" 192.168.10.227:16379> keys (error) ERR wrong number of arguments for 'keys' command 192.168.10.227:16379> get hello "world" ###而后在另外一台机器上面登录一个redis,一样查询 [yx@localhost server]$ redis-cli -h 192.168.6.220 -c -p 16383 192.168.6.220:16383> get hello -> Redirected to slot [866] located at 192.168.10.227:16379 "world"
六 查看集群状况分布式
###########查看全部主从的状况 [yx@localhost redis_cluster]$ redis-cli -h 192.168.10.227 -c -p 16379 192.168.10.227:16379> CLUSTER nodes dff73da0e9071afe5a13998ff24a03442386085c 192.168.6.220:16384@26384 slave 963cef978b20d22b4d3aef3baa598720a5869918 0 1561360856000 6 connected 943a534c273f6a75bab7154ac17a48066c3cee74 192.168.6.220:16382@26382 master - 0 1561360855855 4 connected 5461-10922 895f9058248c277909d9c337fd5cad180838e5e9 192.168.10.227:16381@26381 slave 943a534c273f6a75bab7154ac17a48066c3cee74 0 1561360857862 4 connected 963cef978b20d22b4d3aef3baa598720a5869918 192.168.10.227:16380@26380 master - 0 1561360857000 2 connected 10923-16383 d80910232150a3e64445393aeb8ae0eaca8632bf 192.168.6.220:16383@26383 slave 578b57a2cae8931c55da9f2cfa7762b0f2e7c0bb 0 1561360854853 5 connected 578b57a2cae8931c55da9f2cfa7762b0f2e7c0bb 192.168.10.227:16379@26379 myself,master - 0 1561360857000 1 connected 0-5460 ############################集群信息 192.168.10.227:16379> info replication # Replication role:master connected_slaves:1 slave0:ip=192.168.6.220,port=16383,state=online,offset=2284,lag=1 master_replid:7e91dbdb27f711da30d410f21ca9bb20fadf7ed3 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:2284 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:2284
七 故障测试ide
1 故意停掉一个master
redis-cli -h 192.168.10.227 -p 16380 debug segfault
停掉以前,主从状况
停掉以后,发现6.220上的16384变为mater了
而后从新启动那个16380,它如今变成slave了