-
Redis简介:
-
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
-
实验环境:
-
server1:172.25.68.1 master
-
server2:172.25.68.2 slave
-
server3:172.25.68.3 slave
一、redis的主从复制
1.下载一个redis的安装包并解压
[root@server1 ~]# tar zxf redis-5.0.3.tar.gz
2.切换到redis的安装包安装
(1)安装gcc依赖性
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# yum install -y gcc
(2)make
[root@server1 redis-5.0.3]# make
(3)make install
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# make install
(4)切换到utils目录执行安装脚本
[root@server1 redis-5.0.3]# cd utils/
[root@server1 utils]# ls
[root@server1 utils]# ./install_server.sh
3.可以看到6379端口已经打开
[root@server1 utils]# netstat -tnlp
4.编辑redis的配置文件
[root@server1 utils]# vim /etc/redis/6379.conf
70 bind 0.0.0.0 ##只修改一行
在配置文件中默认的bind接口是127.0.0.1,这样的话访问redis服务只能通过本机的客户端链接,无法通过远程连接,这样可以避免将redis服务暴露再危险的网络环境中,防止一些不安全的人随便远程连接到redis服务,如果将bind接口注释掉将会接受所有来自于可用网络接口的连接
[root@server1 utils]# /etc/init.d/redis_6379 restart
5.将编译好的安装目录发送给server2和server3
[root@server1 ~]# scp -r redis-5.0.3 server2:/root
[root@server1 ~]# scp -r redis-5.0.3 server3:/root
6.server2和server3
(1)切换到安装目录,直接make install即可
[root@server2 ~]# ls
[root@server2 redis-5.0.3]# make install
(2)执行安装脚本
[root@server2 redis-5.0.3]# cd utils/
[root@server2 utils]# ./install_server.sh
(3)编辑配置文件,修改一行,添加一行
[root@server2 utils]# vim /etc/redis/6379.conf
[root@server2 utils]# /etc/init.d/redis_6379 restart
70 bind 0.0.0.0
1380 slaveof 172.25.68.1 6379
- 测试:
server1查看节点信息状态,上传数据
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> set name yan
OK
127.0.0.1:6379> get name
"yan"
127.0.0.1:6379>
server1可以看到他是master,现在有两个slave,分别是172.25.68.2和172.25.68.3
server2
[root@server2 utils]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> get name
"yan"
127.0.0.1:6379>
server2可以看到他的master指向的是server1,可以查看到server1上传的数据
server3
[root@server3 utils]# redis-cli
127.0.0.1:6379> info
127.0.0.1:6379> get name
"yan"
server3和server2相同
二、redis的高可用
1.server1将安装目录中的sentinel.conf文件复制到/etc/redis/目录下
[root@server1 ~]# cd redis-5.0.3
[root@server1 redis-5.0.3]# ls
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]#
2.编辑sentinel.conf文件
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# vim sentinel.conf
17 protected-mode no ##关闭保护模式
84 sentinel monitor mymaster 172.25.68.1 6379 2
113 sentinel down-after-milliseconds mymaster 10000 ##连接超时时长,
至少多少时间连不上认为主机离线,单位是ms
3.将修改好的文件传给server2和server3
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
sentinel.conf 100% 9712 9.5KB/s 00:00
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
sentinel.conf 100% 9712 9.5KB/s 00:00
4.查看redis的状态信息
[root@server1 redis]# redis-cli
127.0.0.1:6379> info
- 测试:
1.每个节点都执行监控命令
[root@server1 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server2 ~]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server3 ~]# redis-server /etc/redis/sentinel.conf --sentinel
可以看到执行后有两行+slave,显示的是两个+slave的信息
2.重新打开一个shell,ssh连接server1,宕掉server1的redis
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
127.0.0.1:6379> shutdown
3.这时可以看到再server2上出现了一个
+switch-master mymaster 172.25.68.1 6379 172.25.68.2 6379
表示master从server1切换到了server2
4.新打开的shell退出server1的连接,连接server2,查看redis的状态信息
可以看到现在的master是server2
连接serever3可以看到master指向的是server2