- 前言
- 一、工作原理
- 二、主从复制的作用
- 三、主从安装流程
- 3.0 架构
- 3.1 主服务器
- 3.2 从服务器
- 四、哨兵模式
- 4.1 构成
- 4.2 优劣
- 4.3 原理
- 4.4 故障转移优先规则
- 4.5 搭建哨兵模式
- 4.5.1 架构
- 4.5.2 流程
- 五、集群搭建
- 5.1 作用
- 5.2 数据分片原理
- 5.3 集群模式搭建
- 六、思维导图
- 七、结语
前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、工作原理
- slave服务器向master服务器发送请求连接命令
- master节点进行rdb持久化,同时of将新的修改命令缓存到数据文件中
- master给slave服务器发送数据文件,slave将数据保存到磁盘,加载到内存执行
- 注:slave节点故障后,只需要重新连接即可
二、主从复制的作用
三、主从安装流程 3.0 架构
- 数据冗余:实现数据热备份、提供数据冗余功能
- 故障切换:主节点故障,从节点变为主节点提供服务(缺点需要手动切换,哨兵/集群可解决该缺点)
- 哨兵模式:实现故障自动切换
- 集群高可用:实现读写分离,分摊服务器压力,且故障自动切换
| 作用 | IP地址 | 安装服务 |
|---|---|---|
| 主服务器 | 192.168.13.10 | redis |
| 从服务器 | 192.168.13.20 | redis |
systemctl stop firewalld.service setenforce 0 yum install gcc gcc-c++ make -y tar zxvf redis-5.0.7.tar.gz cd redis-5.0.7/ make -j 2 && make PREFIX=/usr/local/redis install cd utils/ ./install_server.sh 四次回车后。输入:/usr/local/redis/bin/redis-server回车 ln -s /usr/local/redis/bin/* /usr/local/bin/ vim /etc/redis/6379.conf 70行:bind 192.168.13.10 137行:daemonize yes 172行:logfile /var/log/redis_6379.log 264行:dir /var/lib/redis/6379 700行:appendonly yes /etc/init.d/redis_6379 restart
3.2 从服务器
systemctl stop firewalld.service setenforce 0 yum install gcc gcc-c++ make -y tar zxvf redis-5.0.7.tar.gz cd redis-5.0.7/ make -j 2 && make PREFIX=/usr/local/redis install cd utils/ ./install_server.sh 四次回车后。输入:/usr/local/redis/bin/redis-server回车 ln -s /usr/local/redis/bin/* /usr/local/bin/ vim /etc/redis/6379.conf 70行:bind 192.168.13.10 137行:daemonize yes 172行:logfile /var/log/redis_6379.log 264行:dir /var/lib/redis/6379 700行:appendonly yes 287行:replicaof 192.168.13.10 6379 /etc/init.d/redis_6379 restart #另外一台从服务器重复此操作即可
四、哨兵模式 4.1 构成
- 哨兵节点:端口号:26379;作用:监控、故障转移、通知用户故障转移
- 数据节点:端口号:6379;为客户端提供服务
4.2 优劣
- 优势:主故障时会自动进行故障切换
- 劣势:①写操作无法进行负载均衡;②存储能力受单机性能影响;③从节点故障无法自动故障切换
4.3 原理
- 哨兵节点定期监控主/从/其他哨兵节点(每秒发送心跳ping命令向其他主/从/哨兵进行心跳检查)
- 根据心跳命令的返回码进行主观判断(宕机:主观下线),超过指定数量或者半数认为主服务器主观下线时,则判定主节点为客观下线
- 哨兵节点通过raft算法,选出一个leader哨兵,用于负责故障转移
- 缺陷:从/哨兵节点故障,无法自动进行故障切换
4.4 故障转移优先规则
- 首先过滤掉不健康的从节点
- 选择配置文件中,故障转移优先级高的从节点
- 其次选择数据复制最全的从节点
- 判定条件:优先级、数据完整性
4.5 搭建哨兵模式
- 以主从复制为基础
| 作用 | IP地址 | 安装服务 |
|---|---|---|
| 主服务器 | 192.168.13.10 | redis |
| 从服务器1 | 192.168.13.20 | redis |
| 从服务器2 | 192.168.13.30 | redis |
vim /opt/redis-5.0.7/sentinel.conf 17行:protected-mode no 21行:port 26379 26行:daemonize yes 31行:pidfile /var/run/redis-sentinel.pid 36行:logfile "/var/log/sentinel.log" 65行:dir "/var/lib/redis/6379" 84行:sentinel monitor mymaster 192.168.13.10 6379 2 113行:sentinel down-after-milliseconds mymaster 30000 146行:sentinel failover-timeout mymaster 180000 scp sentinel.conf 192.168.13.20:`pwd` scp sentinel.conf 192.168.13.30:`pwd` cd /opt/redis-5.0.7 redis-sentinel sentinel.conf & #在另外两台从服务器启动哨兵服务,完成哨兵模式 redis-cli -p 26379 info sentinel #查看哨兵模式是否搭建成功,如下为成功 master0:name=mymaster,status=ok,address=192.168.13.10:6379,slaves=2,sentinels=3
五、集群搭建 5.1 作用
- 核心功能:将数据进行分片存储
- 其余功能:突破redis单机内存限制,故障自动切换,横向扩展服务器能力
5.2 数据分片原理
5.3 集群模式搭建
- 引用哈希槽概念,每组节点负责一部分哈希槽
- 对每组数据的key键通过crc16算法得出一个数字,决定对应的哈希槽
- 哈希槽总数:16384
- 以主从复制为基础
- 由于电脑性能有限,因此在一台服务器上模拟运行6个redis服务
systemctl stop firewalld.service
setenforce 0
yum install gcc gcc-c++ make -y
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 2 && make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
四次回车后。输入:/usr/local/redis/bin/redis-server回车
ln -s /usr/local/redis/bin/* /usr/local/bin/
/etc/init.d/redis_6379 restart
mkdir -p /etc/redis/redis-cluster/redis600{1..6}
for i in {1..6};do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done
vim /etc/redis/redis-cluster/redis6001/redis.conf
69行:#bind 127.0.0.1
88行:protected-mode no
92行:port 6001
832行:cluster-enabled yes
840行:cluster-config-file nodes-6001.conf
846行:cluster-node-timeout 15000
699行:appendonly yes
for i in {2..6};do
cp -f /etc/redis/redis-cluster/redis6001/redis.conf /etc/redis/redis-cluster/redis600$i/
done
for i in {2..6};do
sed -i "92c port 600$i" /etc/redis/redis-cluster/redis600$i/redis.conf
sed -i "840c cluster-config-file nodes-600${i}.conf" /etc/redis/redis-cluster/redis600$i/redis.conf
done
for i in {1..6};do
cd /etc/redis/redis-cluster/redis600$i
redis-server redis.conf
done
#集群搭建完毕
六、思维导图
七、结语
- 易错点:无,细心点就行,没啥难度



