Redis集群和Redis搭建集群环境
- **中国加油,武汉加油!**
- 篇幅较长,配合目录观看
- 案例准备
- 1. 状态
- 1.1 有状态
- 1.2 无状态
- 2. 主从复制
- 2.1 主要步骤
- 2.2 全量复制
- 2.2 增量复制
- 3. 读写分离
- 4. 哨兵模式
- 5. Redis集群环境搭建(一主两从三哨兵)
- 5.1 修改Master的redis.conf
- 5.2 修改Slave1和Slave2的redis.conf
- 5.3 编写脚本启动主从服务器
- 5.4 进入主服务器的客户端
- 5.5 搭建哨兵
- 5.6 修改配置文件
- 5.7 启动哨兵服务器
- 5.8 编写脚本文件启动哨兵服务器
- 5.9 演示
中国加油,武汉加油!
篇幅较长,配合目录观看
案例准备
- 本案例基于liunx篇】 十二. Redis简介及安装 一
1. 状态
1.1 有状态
- 每次方法的状态都在变化,类似redis集群
1.2 无状态
- 每次访问都是同一个值,类似首页模块集群
2. 主从复制
- 主从复制是一种数据备份的方案。
- 简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。
- 在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。
- redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障。
- redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,redis支持主从复制。
2.1 主要步骤
- 从节点保存主节点信息
- 主从建立socket连接
- 从节点发送ping命令,等待主节点回应
- 权限验证,比如密码校验
- 主从连接正常后,开始同步数据集,首次建立复制,是全量复制的方式
- 持续的主从复制,后续主节点发生数据变更,会继续给从节点发送命令,此处采用增量复制
2.2 全量复制
- 一般发生在从服务器初始化阶段,这时从服务器需要将主服务器上的所有数据都复制一份
- 从服务器启动,请求主服务器备份数据
- 主服务器执行bgsave,把快照文件发给从服务器
3.1 主服务器发送快照完毕后,向从服务器发送缓冲区中的写命令(增量复制) - 从服务器接受主服务器的快照文件
- 从服务器清空自己的数据
- 从服务器加载快照文件
- 从服务器完成对快照的加载,开始接收命令请求,并执行来自主服务器缓冲区的写命令(增量复制)
2.2 增量复制
- 从服务器初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
3. 读写分离
- 读写分离是一种让数据库更稳定的的使用数据库的方法。是在有主从数据库的情况下使用,将主数据库进行写操作,将查询的任务交给从数据库
4. 哨兵模式
- 哨兵机制是一种容灾方案。
- 哨兵:实则是一个在特殊模式下的redis服务器,里面存储的是自己本身的信息,主服务器的信息,从服务器的信息。
- 用一个或者多个哨兵来监视主服务器(也就是进行写操作的服务器)是否在正常执行任务,一旦哨兵发现主服务器不可用时,就找到一个合适的从服务器成为主服务器。
- 哨兵是对redis的系统的运行情况的监控,它是一个独立进程,功能有以下两点
4.1 监控主数据库和从数据库是否运行正常。
4.2 主数据出现故障后自动将从数据库转化为主数据库。
5. Redis集群环境搭建(一主两从三哨兵)
cd /usr/local/soft
mkdir redis-cluster
cd redis-cluster
mkdir master # 主服务器 6380
mkdir slave1 # 从服务器1 6381
mkdir slave2 # 从服务器2 6382
cd /usr/local/soft/redis-3.2.4
cp redis.conf ../redis-cluster/master/
cp redis.conf ../redis-cluster/slave1/
cp redis.conf ../redis-cluster/slave2/
5.1 修改Master的redis.conf
cd /usr/local/soft/redis-cluster/master/
vim redis.conf
# bind 127.0.0.1
port 6380 # 端口
protected-mode no # 关闭保护模式(保护模式:允不允许别人访问我)
daemonize yes # 后台运行
# 启动该Master服务器
cd /usr/local/redis3/bin
./redis-server /usr/local/soft/redis-cluster/master/redis.conf
5.2 修改Slave1和Slave2的redis.conf
cd /usr/local/soft/redis-cluster/slave/
vim redis.conf
# bind 127.0.0.1
port 6381 # slave1是6381 slave是6382
daemonize yes
slaveof 192.168.59.100 6380 # 配置主服务器的ip和端口
# 启动slave1和slave2服务器
cd /usr/local/redis3/bin
./redis-server /usr/local/soft/redis-cluster/slave1/redis.conf
./redis-server /usr/local/soft/redis-cluster/slave2/redis.conf
5.3 编写脚本启动主从服务器
cd /usr/local/redis3/bin
vim start_redis-cluster.sh
# 输入启动redis命令
./redis-server /usr/local/soft/redis-cluster/master/redis.conf
./redis-server /usr/local/soft/redis-cluster/slave1/redis.conf
./redis-server /usr/local/soft/redis-cluster/slave2/redis.conf
:wq
chmod 777 start_redis-cluster.sh
# 杀掉之前的启动的6380,6381,6382
5.4 进入主服务器的客户端
cd /usr/local/redis3/bin
./redis-cli -p 6380
info replication
5.5 搭建哨兵
cd /usr/local/soft/redis-cluster/
mkdir sentinel1 # 哨兵1 26379
mkdir sentinel2 # 哨兵2 26380
mkdir sentinel3 # 哨兵3 26381
cd /usr/local/soft/redis-3.2.4/
cp sentinel.conf ../redis-cluster/sentinel1/
cp sentinel.conf ../redis-cluster/sentinel2/
cp sentinel.conf ../redis-cluster/sentinel3/
5.6 修改配置文件
cd /usr/local/soft/redis-cluster/sentinel1/
vim sentinel.conf
protected-mode no
port 26379 # 26380,26381
daemonize yes # 自己添加
sentinel monitor mymaster 192.168.59.100 6380 2 #监控主服务器
5.7 启动哨兵服务器
cd /usr/local/redis3/bin
./redis-sentinel /usr/local/soft/redis-cluster/sentinel1/sentinel.conf
./redis-sentinel /usr/local/soft/redis-cluster/sentinel2/sentinel.conf
./redis-sentinel /usr/local/soft/redis-cluster/sentinel3/sentinel.conf
5.8 编写脚本文件启动哨兵服务器
cd /usr/local/redis3/bin
vim start_redis-sentinel.sh
# 输入启动redis命令
./redis-sentinel /usr/local/soft/redis-cluster/sentinel1/sentinel.conf
./redis-sentinel /usr/local/soft/redis-cluster/sentinel2/sentinel.conf
./redis-sentinel /usr/local/soft/redis-cluster/sentinel3/sentinel.conf
:wq
chmod 777 start_redis-sentinel.sh # 给脚本文件权限
./start_redis-sentinel.sh # 启动脚本文件
5.9 演示
进入主服务器 set name wpj
进入从服务器 get name
set name wpj 报错,丛服务器无法写,只能读
停止主服务器
进入2个从服务器 info replication
查看是否是主服务器