目录
主从复制
1、配从(服务器)不配主(服务器)
2、 一主两从
3、 复制原理
4、 薪火相传
5、反客为主
集群
1、redis集群介绍
2、 启动哨兵
3、 集群搭建 (重点)
下面用五种方式介绍主从关系。
步骤
示例
新建一个文件 redis6379.conf
(1) include /root/myredis/redis.conf => /root/myredis/redis.conf 是主配置文件
(2) 在主文件中开启daemonize => 在/root/myredis/redis.conf 中设置daemonize yes
(3) 继续添加内容 => pidfile /var/run/redis_6379.pid
(4) 继续添加内容 => port 6379
(5) 继续添加内容 => dbfilename dump6379.rdb
同理redis6380.conf、redis6381.conf也如此,替换快捷命令 => :%s/6379/6380
(1) redis-cli -p 6380 => 进入到端口为6380的redis客户端
(2) 进入redis-cli后,调用命令 info replication 查看主从复制相关配置信息
(3) slaveof
主机死了后,从机不会篡位,主机活了后,仍是主机!!
但是如果从机死了后,活了时,不再是从机,而是主机,得重新配置!!!
(1)每次从机联通后,都会给主机发送sync指令
(2)主机立刻进行存盘操作,发送RDB文件给从机
(3)从机收到RDB文件后,进行全盘加载
(4)之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令
上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为链条中下一个的master,可以有效减轻master的写压力,去中心化降低风险。
用slaveof
中途变更转向:会清除之前的数据,重新建立拷贝最新的
风险是一旦某个slave宕机,后面的slave都没法备份
当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。
用slaveof no one 将从机变为主机
redis集群实现了对redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点储存总数据的1/N。
redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。
redis-sentinel /myredis/sentinel.conf
(1) 安装ruby环境
然后下载redis-3.2.0.gem文件,并运行命令gem install redis-3.2.0.gem
(2) 制作6个实例
新建一个文件 redis6379.conf
(1) include /root/myredis/redis.conf => /root/myredis/redis.conf 是主配置文件
(2) 在主文件中开启daemonize => 在/root/myredis/redis.conf 中设置daemonize yes
(3) 继续添加内容 => pidfile /var/run/redis_6379.pid
(4) 继续添加内容 => port 6379
(5) 继续添加内容 => dbfilename dump6379.rdb
(6) 继续添加内容 => cluster-enabled yes # 打开集群模式
(7) 继续添加内容 => cluster-config-file nodes-6379.conf #设定节点配置文件名
(8) 继续添加内容 => cluster-node-timeout 15000 # 设置节点失联时间,超过该时 间(毫秒),集群自动进行主从切换。
同理redis6380.conf、redis6381.conf、redis6389.conf、redis6390.conf、redis6391.conf也如此,替换快捷命令 => :%s/6379/6380
(3) 整合
./redis-cli --cluster create 10.211.55.5:6379 10.211.55.5:6380 10.211.55.5:6381 10.211.55.5:6389 10.211.55.5:6390 10.211.55.5:6391 --cluster-replicas 1
一个集群至少要有三个主节点
replicas是复制品的意思,1代表为集群中的每个主节点创建一个从节点
不要用127.0.0.1,要用真实IP地址!!!!
分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上
(4) 存数据
运行命令 redis-cli -c -p 6379
(5) 查看集群信息
进入redis-cli后,运行cluster nodes命令
(6) slots介绍
一个Redis集群包括16384个插槽(hash slot),数据库中的每个键都属于这16384个插槽的其中一个,集群使用公式CRC16(key) % 16384来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。
(7) 如果集群中的主从都宕机会怎样
主从都宕掉,意味着有一片数据,会变成真空,没法再访问了!
如果无法访问的数据,是连续的业务数据,我们需要停止集群,避免缺少此部分数据,造成整个业务异常,此时可以通过配置cluster-require-full-coverage为yes (不可以访问)
如果无法访问的数据,是相对独立的,对于其他业务的访问,并不影响,那么可以继续开启集群提供服务。此时,可以配置cluster-require-full-coverage为no。(可以访问)
(8) java开发