1 Redis主从复制
1.1搭建主从复制集群
建立主从复制关系有三种方式:
- 在redis.conf文件中配置
slaveof <masterip> <masterport>
选项,然后指定该配置文件启动Redis生效。 - 在
redis-server
启动命令后加上--slaveof <masterip> <masterport>
启动生效。 - 直接在从节点使用
slaveof <masterip> <masterport>
命令执行生效。
重启三个redis服务,进入主节点redis客户端
./redis-cli
info replication
发现连接到主节点的从节点数为0
在从节点执行相同命令info replication
后,发现主节点状态为down,如下图:
出现该问题可能原因
- 防火墙没有关闭
# 查看防火墙状态
firewall-cmd --state
# 停止firewall
systemctl stop firewalld.service
- redis配置只允许本机客户端连接
#原本配置中有如下一行
bind 127.0.0.1
# 将其修改为
bind 0.0.0.0
- redis配置中加了连接密码
配置了验证密码,需要在主从都配置
masterauth 123456
检查以上配置无误后重启三台redis服务,主从连接正常
然后在主节点进行写操作,成功后就可以同步到从节点。从节点不能进行写操作。
1.2 脱离主从复制集群
在从节点上执行
slaveof no one
会断开与主节点连接,不再从主节点复制数据。
1.2 主从复制原理
2 哨兵集群搭建
2.1 新增配置
#在redis安装目录/bin下新增 sentinel.conf,在三个redis服务bin目录下执行相同操作
bin>mkdir sentinel-tmp
bin>vim sentinel.conf
#内容如下
daemonize yes
port 26379
protected-mode no
dir "/usr/local/redis/bin/sentinel-tmp"
sentinel myid 0b8debb01e9f03b79640fd88e2baec93581a5935
sentinel deny-scripts-reconfig yes
# 配置主节点ip和端口,最后的2表示当2个sentinel发现主节点异常时则重新选举主节点
sentinel monitor redis-master 192.168.152.7 6379 2
sentinel config-epoch redis-master 1
演示效果如下:
- 启动三台机器redis服务
- 然后将主节点redis宕机后
可以看到主节点宕机后,重新选举了一个从节点为主节点。
3 单机安装Redis Cluster
3.1 进入到/usr/local/redis目录下,执行如下操作
我的redis源文件目录在:/usr/soft/redis-4.0.12
redis集群安装目录:/usr/local/redis/redis-cluster/
#进入/usr/local/redis/目录下
mkdir redis-cluster
cd redis-cluster
mkdir 7291 7292 7293 7294 7295 7296
3.2 准备配置文件
#复制配置文件
7291>cp /usr/soft/redis-4.0.12/redis.conf /usr/local/redis01/redis-cluster/9291
#修改redis.conf配置文件
port 7291
dir /usr/local/redis/redis-cluster/7291/
cluster-enabled yes
cluster-config-file nodes-7291.conf
cluster-node-timeout 5000
appendonly yes
pidfile /var/run/redis_7291.pid
bind 127.0.0.1
#复制7291的redis.conf文件到其他文件夹下
7291>cp redis.conf ../7292
7291>cp redis.conf ../7293
......
#批量替换内容
sed -i 's/7291/7292/g' 7292/redis.conf
sed -i 's/7291/7293/g' 7293/redis.conf
......
3.3 安装依赖
接着安装ruby依赖、rubygems依赖、gem-redis依赖
#确保可以联网
yum install ruby -y
yum install rubygems -y
#这一步需要耐心等待下,可能我的网络笔记慢吧
gem install redis -v 3.0.7
如图安装成功!
3.4 创建集群
在/usr/local/redis
下
#一个个启动很麻烦,可以写个脚本把6个redis服务都启动下
redis>./bin/redis-server redis-cluster/7291/redis.conf
redis>...
redis>ps -ef|grep redis
#进入redis源文件目录下
redis> cd /usr/soft/redis-4.0.12/src
src>./redis-trib.rb create --replicas 1 192.168.152.6:7291 192.168.152.6:7292 192.168.152.6:7293 192.168.152.6:7294 192.168.152.6:7295 192.168.152.6:7296
如图创建集群成功,分配槽位solt完成。
3.5 操作集群
#进入/usr/local/redis目录
redis>./bin/redis-cli -h 192.168.152.6 -p 7291
#查看集群信息
192.168.152.6:7291>cluster info
根据对key运算发现该key的槽位不在这台redis服务管理返回内,会报错,提示需要到那台执行操作。