安装包:
redis-5.0.3.tar.gz
实验环境:
server1 172.25.66.1 master
server2 172.25.66.2 slave
server3 172.25.66.3 slave
1.redis主从复制
配置主结点:(server1)
1.下载redis并解压
#1.在官网上下载redis
[root@server1 ~]# ls
redis-5.0.3.tar.gz
#2.解压
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz
[root@server1 ~]# ls
redis-5.0.3 redis-5.0.3.tar.gz
2.源码编译
[root@server1 ~]# cd redis-5.0.3
#1.安装依赖包
[root@server1 redis-5.0.3]# yum install -y gcc
#2.编译与安装
[root@server1 redis-5.0.3]# make && make install
3.执行脚本启动redis
[root@server1 redis-5.0.3]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@server1 redis-5.0.3]# cd utils/
#直接回车即可
[root@server1 utils]# ./install_server.sh
#查看端口
[root@server1 utils]# netstat -antlp
4.更改配置文件
[root@server1 utils]# vim /etc/redis/6379.conf
#####################
bind 0.0.0.0
protected-mode no #是否开启保护模式,默认开启,最好设置为关闭
5.重启redis
[root@server1 ~]# systemctl restart redis_6379
配置从结点:
在server2上:
1.下载并解压redis
[root@server2 ~]# ls
redis-5.0.3.tar.gz
[root@server2 ~]# tar zxf redis-5.0.3.tar.gz
[root@server2 ~]# ls
redis-5.0.3 redis-5.0.3.tar.gz
2.源码编译
[root@server2 ~]# cd redis-5.0.3
[root@server2 redis-5.0.3]# yum install -y gcc
[root@server2 redis-5.0.3]# make && make install
3.执行脚本启动redis
[root@server2 redis-5.0.3]# cd utils/
[root@server2 utils]# ./install_server.sh
#查看端口
[root@server2 utils]# netstat -antlp
4.更改配置文件
[root@server2 utils]# vim /etc/redis/6379.conf
#####################
bind 0.0.0.0
protected-mode no
slaveof 172.25.66.1 6379 #master端的ip
5.重启redis
[root@server2~]# systemctl restart redis_6379
在server3上:(操作完全同server2结点)
1.下载并解压redis
[root@server3 ~]# ls
redis-5.0.3.tar.gz
[root@server3 ~]# tar zxf redis-5.0.3.tar.gz
[root@server3 ~]# ls
redis-5.0.3 redis-5.0.3.tar.gz
2.源码编译
[root@server3 ~]# cd redis-5.0.3
[root@server3 redis-5.0.3]# yum install -y gcc
[root@server3 redis-5.0.3]# make && make install
3.执行脚本启动redis
[root@server3 utils]# ./install_server.sh
4.更改配置文件
[root@server3 utils]# vim /etc/redis/6379.conf
#####################
bind 0.0.0.0
protected-mode no
slaveof 172.25.66.1 6379 #master端的ip
5.重启redis
[root@server3 ~]# systemctl restart redis_6379
测试:
在master端插入数据
[root@server1 ~]# redis-cli
127.0.0.1:6379> set name westos
OK
在slave端查看数据,发现数据同步
[root@server2 ~]# redis-cli
127.0.0.1:6379> get name
"westos"
[root@server3 ~]# redis-cli
127.0.0.1:6379> get name
"westos"
2.redis故障切换
1.更改配置文件
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf sentinel.conf
[root@server1 redis]# vim sentinel.conf
#####################
protected-mode no
sentinel monitor mymaster 172.25.66.1 6379 2
[root@server1 redis]# scp sentinel.conf server2:/etc/redis
[root@server1 redis]# scp sentinel.conf server3:/etc/redis
2.监控
#监控;一直连接不断开
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel
测试:
再连接一个server1结点,查看结点信息
[root@server1 ~]# redis-cli
#查看信息;发现此时master是server1结点,slave是server2和server3结点
127.0.0.1:6379> info
模拟server1结点(master)宕机:
[root@server1 ~]# redis-cli
127.0.0.1:6379> shutdown
监控发现,当server1结点(master)宕机后,server3接管master
#监控
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel
在server3上:查看结点信息,发现确实是server3切换为master,此时只有一个slave,即server2结点。
[root@server3 ~]# redis-cli
#查看信息
127.0.0.1:6379> info
重新启动server1结点的redis:
[root@server1 ~]# systemctl start redis_6379
[root@server1 ~]# systemctl restart redis_6379
#状态必须为running视为开启成功
[root@server1 ~]# systemctl status redis_6379
发现此时server1结点切换为slave
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
此时查看配置文件,发现文件内容发生了变更
[root@server1 redis]# vim sentinel.conf