1.环境准备
主机名 | ip | 角色 |
server51 | 192.168.88.51 | Redis节点 |
server52 | 192.168.88.52 | Redis节点 |
server53 | 192.168.88.53 | Redis节点 |
sentinel54 | 192.168.88.54 | Sentinel节点 |
sentinel55 | 192.168.88.55 | Sentinel节点 |
sentinel56 | 192.168.88.56 | Sentinel节点 |
2.主从复制原理
- 从节点向主节点发送SYNC命令,请求进行复制。
- 主节点收到请求后,执行BGSAVE命令生成RDB文件,并将该文件发送给从节点进行初步同步。
- 主节点将所有写命令记录到缓冲区中,等待同步给从节点。
- 从节点接收到主节点的RDB文件,并加载到自己的内存中,并通过与主节点的连接,获取缓冲区中的写命令。
- 从节点将缓冲区中的写命令应用到自己的数据集中,完成数据同步。
- 当新的写命令来到时,主节点会将这些写命令发送给所有连接的从节点,从节点再继续将新的写命令应用到自己的数据集中,完成数据同步。
- 在主从复制过程中,主节点通过RDB文件和AOF文件来实现数据的持久化,保证数据的可靠性和一致性。从节点可以通过主节点的缓冲区和AOF文件来获取最新的写命令,并实现与主节点的同步。同时,主节点和从节点之间采用了心跳机制来确保连接的稳定性和有效性
3.准备环境redis节点部署(安装redis)
#编译安装Redis
[root@server51 ~]# ls redis-4.0.8.tar.gz #将redis tar包上传
redis-4.0.8.tar.gz
[root@server51 ~]# yum -y install gcc
...
[root@server51 ~]# tar -xf redis-4.0.8.tar.gz
[root@server51 ~]# cd redis-4.0.8/
[root@server51 redis-4.0.8]# make && make install
[root@server51 redis-4.0.8]# ./utils/install_server.sh #一路回车
...
Installation successful!
#初始化Redis配置
[root@server51 redis-4.0.8]# vim /etc/redis/6379.conf
[root@server51 redis-4.0.8]# sed -rn '70p;89p' /etc/redis/6379.conf
bind 0.0.0.0 #监听所有网络
protected-mode no #关闭保护模式
[root@server51 redis-4.0.8]# vim /etc/init.d/redis_6379 #处理脚本bug
[root@server51 redis-4.0.8]# sed -rn '43,44p' /etc/init.d/redis_6379
#$CLIEXEC -p $REDISPORT shutdown
pkill redis-server
[root@server51 redis-4.0.8]# /etc/init.d/redis_6379 restart
[root@server51 redis-4.0.8]# ss -pantul | grep redis
tcp LISTEN 0 128 *:6379
#server52,server53做同样操作
4.redis的一主一从和主从从
#1.命令行设置主从结构
[root@server51 ~]# redis-cli info replication | grep role
role:master #默认为主角色
#将server52设为51的从(临时)
[root@server52 ~]# redis-cli slaveof 192.168.88.51 6379
OK
[root@server52 ~]# redis-cli info replication | grep role
role:slave
#主从从结构 将server53加入到52的从 (此时52的角色还是slave)
[root@server53 ~]# redis-cli slaveof 192.168.88.52 6379
OK
#Redis角色验证
[root@server53 ~]# redis-cli info replication #查看server53的Redis主从信息
# Replication
role:slave
master_host:192.168.88.52
master_port:6379
master_link_status:up
5.搭建一主多从‘
#还原各Redis节点为独立主节点
[root@server52 ~]# redis-cli slaveof no one #命令行还原
OK
[root@server53 ~]# /etc/init.d/redis_6379 restart #重启服务还原
#server51主节点配置
[root@server51 ~]# vim /etc/redis/6379.conf
[root@server51 ~]# sed -rn '501p' /etc/redis/6379.conf #设置访问密码
requirepass 123456
[root@server51 ~]# /etc/init.d/redis_6379 restart #重启使配置生效
[root@server51 ~]# redis-cli -a 123456 ping #测试密码连接
PONG
#server52配置为server51的从
[root@server52 ~]# vim /etc/redis/6379.conf
[root@server52 ~]# sed -rn '282p;289p' /etc/redis/6379.conf
slaveof 192.168.88.51 6379
masterauth 123456
[root@server52 ~]# /etc/init.d/redis_6379 restart
#server53配置为server51的从
[root@server53 ~]# vim /etc/redis/6379.conf
[root@server53 ~]# sed -rn '282p;289p' /etc/redis/6379.conf
slaveof 192.168.88.51 6379
masterauth 123456
[root@server53 ~]# /etc/init.d/redis_6379 restart
#最后查看各节点角色
6.Redis哨兵
#取消server51的密码配置
[root@server51 ~]# sed -rn '501p' /etc/redis/6379.conf
# requirepass 123456
[root@server52 ~]# sed -rn '289p' /etc/redis/6379.conf
# masterauth 123456
[root@server53 ~]# sed -rn '289p' /etc/redis/6379.conf
# masterauth 123456
#编译安装Redis(54,55,56同样操作)
[root@server54 ~]# ls redis-4.0.8.tar.gz
redis-4.0.8.tar.gz
[root@server54 ~]# yum -y install gcc
[root@server54 ~]# tar -xf redis-4.0.8.tar.gz
[root@server54 ~]# cd redis-4.0.8/
[root@server54 redis-4.0.8]# make && make install
7.编写哨兵主配置文件
[root@server54 ~]# vim /etc/sentinel.conf
[root@server54 ~]# cat /etc/sentinel.conf
bind 0.0.0.0
port 26379
daemonize yes
sentinel monitor mymaster 192.168.88.51 6379 2 #3个哨兵2个即可
dir "/var/lib/redis/"
logfile "/var/log/sentinel.log"
loglevel notice
[root@server54 ~]# mkdir /var/lib/redis
#启动哨兵服务
[root@server54 ~]# redis-sentinel /etc/sentinel.conf
[root@server54 ~]# ss -pantul | grep 26379
tcp LISTEN 0 128 *:26379 *:* users:(("redis-sentinel",pid=4323,fd=6))