一、redis主从搭建
Redis 下载地址:redis.io
Redis主从同步(7版本需要设置密码):
主从同步原理:
slave与master建立连接,发送sync同步命令,主服务器会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台完成保存后,就将此文件发送给从服务器,从服务器将此文件保存到磁盘上并读取到内存中。
1、主服务器给自己设置密码即可(局域网可加密可不加密,公网必须加密)
2、从服务器修改配置文件,用来连接主服务器
Redis 4 版本以前的版本
从:
slaveof <masterip> <msterport> #主服务器的IP和端口
masterauth <masterpass> #主服务器的密码(主服务器要设置好密码)
新版本redis 5.* 以上:
主:
找到 bind 127.0.0.1 注释掉,或者修改为本机的IP地址(重启)
从:
replicaof <masterip> <msterport> #主服务器的IP和端口
masterauth <masterpass> #主服务器的密码(主服务器要设置好密码)
注:redis7版本以上的不设置密码无法进行主从同步。
实验步骤:
1、下载redis源码包 (主从服务器都安装,打开同步执行开关)
2、tar -xf redis-7.2.2.tar.gz
3、yum -y install gcc
4、redis编译安装
make && make PREFIX=/usr/local/redis/ install
5、cd /sur/local/redis/
mkdir conf #创建配置文件存放目录
mkdir data #创建数据存放目录
mkdir logs #创建日志存放目录
cp -a /root/redis-7.2.2/redis.conf ./conf/
vim conf/redis.conf
- 增加监听本机的ip地址,否则别的从服务器连接不上。(主服务器上监听,从服务器可设可不设置)
- 在GENERAL下的daemonize 后面改为yes
- 在pidfile 后面填写redis进程文件保存位置,
pidfile "/usr/local/redis/redis.pid"
- 在logfile 后面填写日志文件的保存位置
logfile "/usr/local/redis/redis.log"
- dbfilename "redis.rdb" #rdb快照二进制文件名
- dir "/usr/local/redis/data/" #数据保存目录
- 取消replicaof 行的注释,后面填写链接主服务器的IP地址和端口号
- 取消requirepass 行的注释,后面填写密码(主服务器设置)
- 取消masterauth 行的注释,后面填写主服务器的密码(从服务器设置)
- 打开aof文件记录的开关 :appendonly yes
- appendfilename 后面填写aof持久化文件的文件名
- appenddirname 后面填写保存aof文件的相对目录,为数据保存目录的子目录
#7版本才有,用来单独保存aof文件的目录
6、ln -s /usr/local/redis/bin/* /usr/local/bin/
取消两台服务器同步操作开关
7、redis-server -a 123456 /usr/local/redis/conf/redis.conf #启动redis数据库
8、redis-cli info server #查看redis服务器的运行状态
redis-cli info replication #查看redis主从关系
9、登录主redis服务器
redis-cli -a 123456 #登录主redis数据库
set name zhangsan #创建键值对
save #手动同步数据到从服务器,因为自动触发机制有时间限制
10、退出数据库登录,在主服务器上查看数据是否写入
cd /use/local/redis/data
ls
11、从服务器关闭数据库,再重启
redis-cli shutdown
redis-server /usr/local/redis/conf/redis.conf
redis-cli info server #查看redis服务器的运行状态
redis-cli info replication #查看redis主从关系
12、登录从服务器验证是否同步成功
redis-cli
keys *
get name
持久化:核心技术就是数据存储在硬盘上,保证内存数据清空后仍然保存有完整的数据
复制:主从复制是整个高可用的基础,能实现多机备份、读写分离、负载均衡、但缺陷是无法自动完成故障解决
哨兵:在主从复制的基础上,实现了自动化的故障发现和故障转移方案,让高可用更加完善
集群:在主从复制的基础上能实现负载均衡,解决了写操作只有一个主节点的问题,更加完善redis的高可用。适合海量存储,高并发的请求
二、redis哨兵搭建实验
哨兵的作用:
监控功能:哨兵会自动完成对主节点和其他哨兵节点的运行监控(自主发现)
自动故障转移:哨兵在监控到主节点工作异常时,会自动开始故障转移,把其中一个主节点提升为新的主节点,并更改其他从节点的配置
配置提供者:通过哨兵为第三方客户提供主节点链接地址
消息通知:哨兵可以将故障及故障转移结果发送给第三方客户端
实验规划:
数据节点: 6379(模版)6380 6381 6382
哨兵节点: 26379(模版) 26380 26381 26382
实验步骤:
1、下载redis服务
2、安装redis
- tar -xf redis-6.2.3.tar.gz
- cd redis-6.2.3
- make && make PREFIX=/usr/local/redis install
- cd /usr/local/redis
- mkdir conf #创建配置文件目录
- mkdir data #创建数据文件保存目录
- mkdir logs #创建日志文件保存目录
- cp /root/redis-6.2.3/redis.conf sentinel.conf /usr/local/redis/conf/
#将配置文件复制到conf目录下
- ln -s /usr/local/redis/bin/* /usr/local/bin/
3、修改配置文件
- vim /usr/local/redis/conf/redis.conf
- 增加监听本机IP地址:
- 打开运行后台运行开关
- 修改pid文件的路径和文件名
- 修改日志文件的路径和文件名
- 修改rdb的数据文件名
修改数据文件的保存目录路径
- 打开生成aof文件的开关,并修改aof的文件名
4、复制生成主服务器和两个从服务器的配置文件
- cd /usr/local/redis/conf/
- cp -a redis.conf redis-6380.conf
- vim redis-6380.conf
- 末行模式:%s /6379/6380/c
- cp -a redis-6380.conf redis-6381.conf
- vim redis-6381.conf
- 取消replicaof行的注释,指向主服务器 IP和端口
- 末行模式:%s /6380/6381/g
- cp -a redis-6380.conf redis-6381.conf
- vim redis-6381.conf
- 取消replicaof行的注释,指向主服务器 IP和端口
- 末行模式:%s /6381/6382/g
5、启动redis主服务器和从服务器
- redis-server /usr/local/redis/conf/redis-6380.conf
- redis-server /usr/local/redis/conf/redis-6381.conf
- redis-server /usr/local/redis/conf/redis-6382.conf
- netstat -anpt |grep 638*
- redis-cli -p 6380 info replication
6、
redis-cli -p 6380 set name zhangsan #登录主服务器创建键值对
redis-cli -p 6381 get name #从服务器查看
7、告诉哨兵谁是主服务器
cd /usr/local/redis/conf/
vim sentinel.conf
修改后台进程运行为yes
修改pid文件和路径;修改日志文件的路径和文件名
修改指向主服务器的IP、端口、哨兵节点投票通过数量
cp -a sentinel.conf sentinel-26380.conf
vim sentinel-26380.conf
port 26380
pidfile "/usr/local/redis/logs/sentinel-26380.pid"
logfile "/usr/local/redis/logs/sentinel-26380.log"
cp -a sentinel-26380.conf sentinel-26381.conf
vim sentinel-26381.conf
末行模式:%s /26380/26381/
cp -a sentinel-26380.conf sentinel-26382.conf
vim sentinel-26382.conf
末行模式:%s /26380/26382/
8、启动哨兵节点进程。
redis-sentinel /usr/local/redis/conf/sentinel-26380.conf
或者redis-server /usr/lcoa/redia/conf/sentinel-26380.conf --sentinel
redis-sentinel /usr/local/redis/conf/sentinel-26381.conf
redis-sentinel /usr/local/redis/conf/sentinel-26382.conf
注:启动哨兵进程后,在配置文件最后会自动增加哨兵的信息等。
9、模拟主节点故障(故障判定转移时间为1.5倍故障认定时间)
netstat -anpt |grep LISTEN |grep : 63
kill 11631
redis-cli -p 6381 info replication #查看主从信息
redis-cli -p 6382 info replication #查看主从信息
redis-cli -p 26380 info sentinel #查看哨兵信息
cat /usr/local/redis/conf/sentinel-26380.conf
#配置文件最后面的主从信息也更新
10、修复模拟坏掉主服务器,修复后会变为从服务器
redis-server /usr/local/redis/conf/redis-6380.conf #启动服务器
redis-cli -p 6381 info replication #查看从服务器是否增加