一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 ,处理读请求。
a 在/usr/redis04下新建master_slaver文件夹
mkdir master_slaverb 在 /usr/redis04/master_slaver下新建 master夹
[root@redis01 master_slaver]# mkdir masterc 将单机版的redis.conf 复制到 master 目录下面
cp /usr/redis04/redis.conf master/修改以下内容
#端口号
port 8001
#绑定ip
bind 192.168.13.100
#保护模式改为no
protected-mode no
#redis 后台运行
daemonize yes
#记录当前redis服务进程的ID
pidfile /var/run/redis_8001.pidd 在master下启动redis master
[root@redis01 master]# pwd
/usr/redis04/master_slaver/master
[root@redis01 master]# /usr/redis04/bin/redis-server redis.conf e 验证 ps -ef |grep redis

a 在 /usr/redis04/master_slaver 新建slaver ,并且把 master/redis.conf 拷贝到slaver中
[root@redis01 master_slaver]# pwd
/usr/redis04/master_slaver
[root@redis01 master_slaver]# mkdir slaver
[root@redis01 master_slaver]# cp master/redis.conf slaver/
[root@redis01 master_slaver]# lsb 将 slaver中的redis.conf 中8001 修改为 8002,并且
slaveof 192.168.13.100 8001
#端口号
port 8002
#绑定ip
bind 192.168.13.100
#保护模式改为no
protected-mode no
#redis 后台运行
daemonize yes
#记录当前redis服务进程的ID
pidfile /var/run/redis_8002.pid可以在底行模式下使用替换命令快速实现
:%s/8001/8002/g c 在 /usr/redis04/master_slaver/slaver 启动slaver
[root@redis01 slaver]# pwd
/usr/redis04/master_slaver/slaver
[root@redis01 slaver]# /usr/redis04/bin/redis-server redis.conf d 验证

a 打开一个窗口,连接redis的master
[root@redis01 slaver]# /usr/redis04/bin/redis-cli -h redis01 -p 8001b 打开另一个窗口,连接redis的slaver,在slaver只可以读取到数据,不可以写入数据
[root@redis01 ~]# /usr/redis04/bin/redis-cli -h redis01 -p 8002
redis01:8002> get a
"1"
redis01:8002> set a 1
(error) READONLY You can't write against a read only replica.
主从复制,存在单点故障的问题。也就是说如果主机坏了,我们就不能往缓存服务器中写数据了。为了解决
主机的单点故障问题,我们可以创建redis 集群。可以同时启动多态redis 服务器 ,其中有一些服务器是主机,有
些服务器是备机,一旦主机出现故障,该主机的备机会自动升级成主机。
解决问题:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带
宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接
集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<-
>slot<->value
通俗的说,redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是
说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集
群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只
需要连接集群中的任意一个节点,就可以获取到其他节点的数据。
集群规划
a 新建/cluster/7001文件夹下
[root@redis01 redis04]# mkdir cluster
[root@redis01 redis04]# mkdir cluster/7001
[root@redis01 7001]# pwd
/usr/redis04/cluster/7001b 将修改一下内容
#端口号
port 7001
#绑定ip
bind 192.168.13.100
#保护模式改为no
protected-mode no
#redis 后台运行
daemonize yes
#记录当前redis服务进程的ID
pidfile /var/run/redis_7001.pid
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000c 在 /usr/redis04/cluster/7001下启动7001 服务器,并且检查server
[root@redis01 7001]# pwd
/usr/redis04/cluster/7001
[root@redis01 7001]# /usr/redis04/bin/redis-server redis.conf d 检查服务
ps -ef | grep redis
2.搭建剩余5个节点服务
a 在/usr/redis04/cluster 创建7002 7003 7004 7005 7006 文件夹
[root@redis01 cluster]# pwd
/usr/redis04/cluster
[root@redis01 cluster]# mkdir 7002 7003 7004 7005 7006b 将7001 中的配置文件复制到 7002 7003 7004 7005 7006 中
[root@redis01 cluster]# pwd
/usr/redis04/cluster
[root@redis01 cluster]# cp 7001/redis.conf 700
7001/ 7002/ 7003/ 7004/ 7005/ 7006/
[root@redis01 cluster]# cp 7001/redis.conf 7002/
[root@redis01 cluster]# cp 7001/redis.conf 7003/
[root@redis01 cluster]# cp 7001/redis.conf 7004/
[root@redis01 cluster]# cp 7001/redis.conf 7005/
[root@redis01 cluster]# cp 7001/redis.conf 7006/c 进入7002 修改配置文件中的应用信息,替换7001 为7002,并且保存退出
:%s/7001/7002/gd 启动7002服务,并检查进程
[root@redis01 7002]# pwd
/usr/redis04/cluster/7002
[root@redis01 7002]# /usr/redis04/bin/redis-server redis.conf 
e,按照 c d步骤启动剩余7003 7004 7005 7006 server
f 检查
ps -ef | grep redis--cluster-replicas 指定 master 与slaver的数量比例
/usr/redis04/bin/redis-cli --cluster create 192.168.13.100:7001 192.168.13.100:7002 192.168.13.100:7003 192.168.13.100:7004 192.168.13.100:7005 192.168.13.100:7006 --cluster-replicas 1创建成功

使用客户端链接集群 必须使用 -c 连接
/usr/redis04/bin/redis-cli -c -h 192.168.13.100 -p 7002/usr/redis04/bin/redis-cli --cluster help/usr/redis04/bin/redis-cli --cluster check 192.168.13.100:7002
再添加之前首先要像7001-6一样,修改配置文件,启动7007 服务
/usr/redis04/bin/redis-cli --cluster add-node 192.168.13.100:7007 192.168.13.100:7001
--cluster-master-id 为从节点对应主节点的id
/usr/redis04/bin/redis-cli --cluster add-node 192.168.13.100:7008 192.168.13.100:7001 --cluster-slave --cluster-master-id c66796c98b585c27d0f60f29ae40c6cc30753920添加的主节点还不能使用,因为没有分配slots,
/usr/redis04/bin/redis-cli --cluster reshard 192.168.13.100:7001


all 代表从所有有数据据节点进行迁移到目的节点,也可以选择 目标节点id回车,最后以done进行结束
done 代表结束
迁移成功之后会7007才可以接收数据

删除主节点需要先使用 reshard 把主节点的slots移到其他节点才可以
/usr/redis04/bin/redis-cli --cluster del-node 192.168.13.100:7002 bbfce86274f3bf34e07967f9b5928b96ca4069a8移除 slaver 节点(7005)就没有限制,可以直接删除
/usr/redis04/bin/redis-cli --cluster del-node 192.168.13.100:7005 acc711f3c252b89447e340c03180e23a1c192da2