集群:实现主从复制、读写分离、高可用
我们如何在一台机器上模拟出集群的效果,就是部署三台机器,一台设置为主redis,另外两台是从redis。
环境:
系统 ubuntu18.04
redis 4.0.9
一、配置redis的配置文件redis.conf
位置:/etc/redis/redis.conf
#将redis.conf 复制三份
cd /ect/redis
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
进入文件中,如何快速查找到对应的配置项
/或? 关键字(要找的配置) +回车
通过n 往下找搜到的配置
通过N 往上找搜到的配置
主redis的配置文件修改:假设以端口6379为主redis
cd /etc/redis
sudo vi redis6379.conf
#修改的配置如下
port 6379
daemonize yes #开启保护进程
pidfile /var/run/redis/redis-server6379.pid
logfile /var/log/redis/redis-server6379.log
dbfilename dump6379.rdb
protected-mode no # 进行主从复制。bind 192.168.137.140 #绑定的IP
requirepass Huawei@123#设置密码,主从密码设置一样
从redis的配置文件修改:两个从redis,根据端口号,设置不同
cd /etc/redis
sudo vi redis6380.conf
#修改的配置如下
port 6380
daemonize yes #开启保护进程
pidfile /var/run/redis/redis-server6380.pid
logfile /var/log/redis/redis-server6380.log
dbfilename dump6380.rdb
protected-mode no # 进行主从复制。bind 192.168.137.140 #绑定的IP
requirepass Huawei@123#设置密码,主从密码设置一样
#
#从redis要多配置
masterauth Huawei@123 #主redis的密码
slaveof 192.168.137.140 6379 #主IP 主端口
二、启动redis服务,启动客户端
启动redis服务器
ubuntu开放端口:
sudo ufw allow 6379
sudo ufw allow 6380
sudo ufw allow 6381#启动三个redis服务
cd /etc/redis
#启动 6379端口的redis服务
sudo redis-server ./redis6379.conf
#启动 6380端口的redis服务
sudo redis-server ./redis6380.conf
#启动 6381端口的redis服务
sudo redis-server ./redis6381.conf
很明显,一个配置文件就启动一台redis服务,以不同的端口号启动,就可以模拟部署多台。
开启三个终端,启动三个客户端使用redis数据库:
redis-cli -h 192.168.137.140 -p 6379
redis-cli -h 192.168.137.140 -p 6380
redis-cli -h 192.168.137.140 -p 6381
三、练习
主redis:192.168.137.140:6379这台
6379> auth Huawei@123 #先登录
6379> set name lhz
6379> get name
"lhz"
#在主redis中,主redis可以set也可以get
从redis:192.168.137.140:6380/6381
6380> auth Huawei@123 #先登录
6380> get name
"lhz"
6381> auth Huawei@123 #先登录
6381> get name
"lhz"
6380> set age 18
(error) READONLY You can't write against a read only slave.
6381> set age 18
(error) READONLY You can't write against a read only slave.
#对于从redis,只能进行get操作,不能set数据,这就是读写分离了
#set name lhz 是在6379中完成的,但是可以从6380/6381中get name,这是主从复制了
如何查看主从信息:
6379> info replication
role:master #角色,是主服务器
connected_slaves:2 #连接的从服务器数
slave0:ip=192.168.137.140,port=6380,state=online,offset=318500,lag=1slave1:ip=192.168.137.140,port=6381,state=online,offset=318500,lag=1
如果主redis故障了,目前只能通过手动的方式去将从redis切换成主
#我们将6379这个主的redisshutdown,模拟主故障
6379> shutdown
#我们手动将6380切换成主redis
6380> slaveof no one
#这样6380就变成主redis了
这种方式不适合真正的业务场景,业务上使用的是哨兵模式来实现主从切换的。