主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化:写操作无法负载均衡;存储能力受到单机的限制。
主机 | IP地址 | 软件包 |
---|---|---|
Master节点 | 192.168.153.10 | redis-5.0.7.tar.gz |
Slave1节点 | 192.168.153.20 | redis-5.0.7.tar.gz |
Slave2节点 | 192.168.153.30 | redis-5.0.7.tar.gz |
systemctl stop firewalld
setenforce 0
NoSQL之 Redis配置与优化
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/ log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
appendonly yes #700行,修改为yes开启AOF持久化功能
/etc/init.d/redis_6379 restart
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
replicaof 192.168.153.10 6379 #288行,指定要同步的Master节点IP和端口
appendonly yes #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart
在Master节点上看日志
tail -f /var/log/redis_6379.log
在Master节点上验证从节点
redis-cli info replication
哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所有节点上都需要部署哨兵模式,哨兵模式会监控所有的Redis工作节点是否正常,当Master出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个Master的确出现问题,然后会通知哨兵间,然后从Slaves中选取一个作为新的Master。
systemctl stop firewalld
setenforce 0
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,关闭保护模式
port 26379 #21行,Redis哨兵默认的监听端口
daemonize yes #26行,指定sentinel为后台启动
logfile "/var/1og/sentinel.log" #36行,指定日志存放路径
dir "/var/lib/redis/6379" #65行,指定数据库存放路径
sentinel monitor mymaster 192. 168.153.10 6379 2 #84行,修改,指定该哨兵节点监控192.168.153.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2
个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000 #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒 )
sentinel failover-timeout mymaster 180000 #146行,故障节点的最大超时时间为180000 (180秒)
先启master,再启slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
redis-cli -p 26379 info sentinel
查看redis-server进程号
ps -ef | grep redis
杀死Master节点上redis-server的进程号
kill -9 1952 #Master节点上redis-server的进程号
redis-cli -p 26379 info sentinel
一般来说,redis的集群需要6个节点,3主3从。
为方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:
3个主节点端口号:6000/6001/6002, 对应的从节点端口号:6003/6004/6005。
cd /etc/redis/
mkdir -p redis-cluster/redis600{
0..5}
for w in {
0..5}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$w
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$w
done
开启群集功能
其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
vim /etc/redis/redis-cluster/redis6000/redis.conf
#bind 127.0.0.1 #69行,注释掉bind项,默认监听所有网卡
protected-mode no #88行,修改,关闭保护模式
port 6000 #92行,修改,redis 监听端口,
daemonize yes #136行,开启守护进程,以独立进程启动
appendonly yes #700行,修改,开启AOF持久化
cluster -enabled yes #832行,取消注释,开启群集功能
cluster-config-file nodes-6379.conf #840行,取消注释,群集名称文件设置
cluster-node-timeout 15000 #846行,取消注释群集超时时间设置
启动redis节点
分别进入那六个文件夹,执行命令: redis-server redis.conf,来启动redis节点
cd /etc/redis/redis-cluster/redis6000
redis-server redis.conf
(或使用for循环来启动)
for i in {
0..5}
do
cd /etc/redis/redis-cluster/redis600$i
redis-server redis.conf
done
ps -ef | grep redis
启动集群
redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 --cluster-replicas 1
#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候需要输入yes才可以创建。
–replicas 1表示每个主节点有1个从节点。
redis-cli -p 6000 -c #加-c参数,节点之间就可以互相跳转
cluster slots #查看节点的哈希槽编号范围