Redis—主从复制&高可用
1.部署redis
redis安装:
tar zxf redis-5.0.3.tar.gz
cd redis-5.0.3
yum install gcc -y
make
make install
执行redis安装脚本:
cd utils/
./install_server.sh #一路回车
netstat -antlp
修改端口使其他主机可访问:
vim /etc/redis/6379.conf
70 bind 0.0.0.0
/etc/init.d/redis_6379 restart #重启redis
netstat -antlp
在server1添加key-value值:
redis-cli
127.0.0.1:6379> set name nigar
OK
127.0.0.1:6379> get name
"nigar"
2.redis主从复制
server1---master
server2---slave
step1 在server2中安装redis:
scp redis-5.0.3 server2:/root #在server1中把解压好的目录发给server2
在server2中:
make install
step2 执行redis安装脚本:
cd utils/
./install_server.sh
netstat -antlp
step3 修改配置文件:
vim /etc/redis/6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
/etc/init.d/redis_6379 restart #重启redis
netstat -antlp
step4 测试:
在server2查看:
redis-cli
127.0.0.1:6379> get name #可以看到刚在server1中添加的信息
"nigar"
127.0.0.1:6379> set age 20 #无法添加信息
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379>
3.redis高可用
首先配置好server1和server3之间的主从复制:(和上一步骤相同)
server1---master
server3---slave
step1 在server2中安装redis:
scp redis-5.0.3 server3:/root #在server1中把解压好的目录发给server3
在server3中:
make install
step2 执行redis安装脚本:
cd utils/
./install_server.sh
netstat -antlp
step3 修改配置文件:
vim /etc/redis/6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
/etc/init.d/redis_6379 restart #重启redis
netstat -antlp
step4 测试:
在server3查看:
redis-cli
127.0.0.1:6379> get name
"nigar"
127.0.0.1:6379> set age 20
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379>
这样三台redis的主从复制就实现了
在master中写入切换策略:
cd redis-5.0.3
ls
cp sentinel.conf /etc/redis
cd /etc/redis/
vim sentinel.conf
修改如下内容:
17 protected-mode no #关闭保护模式
121 sentinel monitor mymaster 172.25.254.1 6379 2
#指定要监控的master,mymaster是定义的master名字,quorum为法定票数2,此处指的是sentinel的数, 只有指定的sentinel同意时才认为sentinel做的决策是有效的,一般大于sentinel数量的半数。可以有多个master,一组sentinel集群可以监控N个主从复制架构
146 sentinel down-after-milliseconds mymaster 10000
#至少多长时间连不上才认为master离线了。单位为ms,即连接超时时长(这里我设置为10秒)
修改完成后发送给两个slave节点:
scp sentinel.conf server2:/etc/redis
scp sentinel.conf server3:/etc/redis
测试:
在三个redis上分别开启监控:
redis-server /etc/redis/sentinel.conf --sentinel
再开启一个shell连接server1查看信息:
redis-cli
127.0.0.1:6379> info #可以看到此是sercer1为master
redis-cli -p 26379
127.0.0.1:26379> info #可以看到监控信息
手动宕掉master的redis:
redis-cli
127.0.0.1:6379> SHUTDOWN
等待10s后,在监控页面可以看到:server1宕掉,而server3变成新的master的信息
再开启一个shell连接server3查看信息:
redis-cli
127.0.0.1:6379> info #可以看到此时server3为master,而server2为slave
redis-cli #可以添加信息
127.0.0.1:6379> get name
"nigar"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> get age
"20"
4.解读6379.conf 文件中部分参数信息
vim 6379.conf
由下至上看:表示内存到磁盘刷新数据的频率
219 一个键发生变化时 900秒会更新
220 10个键发生变化时 300秒会更新
221 一万个键发生变化时 60秒会更新
每60s,先看有没有10000个键发生变化,如果有就更新;
如果没有,300秒后看有没有10个键发生变化,如果有就更新;
如果没有,900秒后看有没有1个键发生变化,如果有就更新