一起重新开始学大数据-hadoop先导篇-Day43-Redis的主从复制和集群搭建 |
目录
主从复制 Replication
主从复制 Replication概述
特点:
- 一个Redis服务可以有多个该服务的复制品,这个Redis服务称为Master,其他复制品称为Slaves
- 只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步
- 只有Master可以执行写命令,Slaves只能执行读命令
特点(2)
从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANGE等等
客户端可以连接Slaves执行读请求,来降低Master的读压力
主从复制创建
redis-server --slaveof
,配置当前服务称为某Redis服务的Slave# redis-server --port 6380 --slaveof 127.0.0.1 6379
SLAVEOF host port命令,将当前服务器状态从Master修改为别的服务器的Slave
redis > SLAVEOF 192.168.10.10 6379,将服务器转换为Slave
redis > SLAVEOF NO ONE ,将服务器重新恢复到Master,不会丢弃已同步数据
配置方式:启动时,服务器读取配置文件,并自动成为指定服务器的从服务器 slaveof
slaveof 127.0.0.1 6379
主从复制具体步骤
1、将redis文件复制到其它节点
scp -r redis node1:`pwd`
2、在node1中启动从服务器
cd /usr/local/soft/redis/bin
./redis-server --port 6380 --slaveof master 6379
在已经启动成功之后也可以将主改成从
SLAVEOF master 6379
从改成主 -- 数据不会删除
SLAVEOF NO ONE
指定redis 密码
临时设置
redis 127.0.0.1:6379> config set requirepass test123
永久设置
vim redis.conf
requirepass 123456
带密码链接redis
redis-cli -a 123456
主从复制演示
redis-server --slaveof <master-ip> <master-port>
#redis-server --port 6380 --slaveof 127.0.0.1 6379
#redis-cli -p 6380 -n 0
测试Master和Slave的读写
主从复制注意
一个Master可以有多个Slaves
Slave下线,只是读请求的处理性能下降
Master下线,写请求无法执行
其中一台Slave使用SLAVEOF no one命令成为Master,其它Slaves执行SLAVEOF命令指向这个新的Master,从它这里同步数据
以上过程是手动的,能够实现自动,这就需要Sentinel哨兵,实现故障转移Failover操作
Redis集群
Redis集群概述
-
3.0版本支持
-
由多个Redis服务器组成的分布式网络服务集群 每一个Redis服务器称为节点Node,节点之间会互相通信。两两相连
-
Redis集群无中心节点
Redis集群节点复制
Redis集群的每个节点都有两种角色可选:主节点master node、从节点slave node。其中主节点用于存储数据,而从节点则是某个主节点的复制品
当用户需要处理更多读请求的时候,添加从节点可以扩展系统的读性能,因为Redis集群重用了单机Redis复制特性的代码,所以集群的复制行为和我们之前介绍的单机复制特性的行为是完全一样的
Redis集群故障转移(哨兵机制)
①Redis集群的主节点内置了类似Redis Sentinel的节点故障检测和自动故障转移功能,当集群中的某个主节点下线时,集群中的其他在线主节点会注意到这一点,并对已下线的主节点进行故障转移
②集群进行故障转移的方法和Redis Sentinel进行故障转移的方法基本一样,不同的是,在集群里面,故障转移是由集群中其他在线的主节点负责进行的,所以集群不必另外使用Redis Sentinel
Redis集群分片
①集群将整个数据库分为16384个槽位slot,所有key都数据这些slot中的一个,key的槽位计算公式为slot_number=crc16(key)%16384,其中crc16为16位的循环冗余校验和函数
②集群中的每个主节点都可以处理0个至16383个槽,当16384个槽都有某个节点在负责处理时,集群进入上线状态,并开始处理客户端发送的数据命令请求
举例
- 三个主节点7000、7001、7002平均分片16384个slot槽位
- 节点7000指派的槽位为0到5460
- 节点7001指派的槽位为5461到10922
- 节点7002指派的槽位为10923到16383
Redis集群Redirect转向
①由于Redis集群无中心节点,请求会发给任意主节点
②主节点只会处理自己负责槽位的命令请求,其它槽位的命令请求,该主节点会返回客户端一个转向错误
③客户端根据错误中包含的地址和端口重新向正确的负责的主节点发起命令请求
Redis集群搭建
①创建多个主节点
②为每一个节点指派slot,将多个节点连接起来,组成一个集群
③槽位分片完成后,集群进入上线状态
④6个节点:3个主节点,每一个主节点有一个从节点
集群搭建具体步骤:
1、创建安装目录 在
master ,node1 ,node2中分别创建
mkdir /usr/local/soft/redis-cluster
2、将redis 复制到redis-cluster 目录下修改名字为7000
cp -r /usr/local/soft/redis /usr/local/soft/redis-cluster
mv /usr/local/soft/redis-cluster/redis /usr/local/soft/redis-cluster/7000
删除单机版缓存文件
rm -rf appendonly.aof
rm -rf dump.rdb
3、修改配置文件 vim redis.conf
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000
port 7000 //端口7000
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 (全持久化)
4、复制7000
cp -r 7000 7001
cp -r 7000 7002
cp -r 7000 7003
cp -r 7000 7004
cp -r 7000 7005
5、修改每一个里面的配置
vim 7001/bin/redis.conf
把7000改成对应的端口号
pidfile /var/run/redis_7001.pid
port 7001
6、在7002 ,7003 复制到node1(执行完成后可以将master的7002,7003删除)
scp -r /usr/local/soft/redis-cluster/7002 node1:/usr/local/soft/redis-cluster/
scp -r /usr/local/soft/redis-cluster/7003 node1:/usr/local/soft/redis-cluster/
7、在7004 ,7005 复制到node2(执行完成后可以将master的7004,7005删除)
scp -r /usr/local/soft/redis-cluster/7004 node2:/usr/local/soft/redis-cluster/
scp -r /usr/local/soft/redis-cluster/7005 node2:/usr/local/soft/redis-cluster/
8、启动redis
1、在master中执行
cd /usr/local/soft/redis-cluster/7000/bin
./redis-server redis.conf
cd /usr/local/soft/redis-cluster/7001/bin
./redis-server redis.conf
2、在node1中执行
cd /usr/local/soft/redis-cluster/7002/bin ./redis-server redis.conf cd /usr/local/soft/redis-cluster/7003/bin ./redis-server redis.conf
3、在node2中执行
cd /usr/local/soft/redis-cluster/7004/bin
./redis-server redis.conf
cd /usr/local/soft/redis-cluster/7005/bin
./redis-server redis.conf
8、通过工具构建集群 在master中安装
安装工具
yum -y install ruby ruby-devel rubygems rpm-build
上传redis-3.0.0.gem
gem install -l redis-3.0.0.gem
放在/usr/local/bin/ 目录下的命令可以在任何一个位置运行
cp /usr/local/soft/redis-3.0.0/src/redis-trib.rb /usr/local/bin/redis-trib
9、启动集群 第一次使用 都免集群重启不需要使用
#replicas 每一个主节点的备份节点数量
redis-trib create --replicas 1 192.168.10.20:7000 192.168.10.20:7001 192.168.10.30:7002 192.168.10.30:7003 192.168.10.40:7004 192.168.10.40:7005
10、客户端访问reids集群
#-p 端口号 -h 节点ip -c 自动重定向
redis-cli -p 7000 -h master -c
查看集群信息
cluster info
查看节点信息
cluster nodes
集群模式不区分读写请求 如果想要在从节点进行查询需要在查询之前执行readonly
Redis集群总结
- Redis集群是一个由多个节点组成的分布式服务集群,它具有复制、高可用和分片特性
- Redis的集群没有中心节点,并且带有复制和故障转移特性,这可用避免单个节点成为性能瓶颈,或者因为某个节点下线而导致整个集群下线
- 集群中的主节点负责处理槽(储存数据),而从节点则是主节点的复制品
- Redis集群将整个数据库分为16384个槽,数据库中的每个键都属于16384个槽中的其中一个
- 集群中的每个主节点都可以负责0个至16384个槽,当16384个槽都有节点在负责时,集群进入上线状态,可以执行客户端发送的数据命令
- 主节点只会执行和自己负责的槽有关的命令,当节点接收到不属于自己处理的槽的命令时,它将会处理指定槽的节点的地址返回给客户端,而客户端会向正确的节点重新发送
|
|
|
|
上一章-hadoop先导篇-Day42-Redis的列表、散列、set集合、Sorted和Redis持久化
下一章-hadoop篇-Day44-Hadoop、hdfs概述架构简析,Hadoop集群搭建
|
|
|
|
|
听说长按大拇指👍会发生神奇的事情呢!好像是下面的画面,听说点过的人🧑一个月内就找到了对象的💑💑💑,并且还中了大奖💴$$$,考试直接拿满分💯,颜值突然就提升了😎,虽然对你好像也不需要,是吧,吴彦祖🤵! |