Redis的安装及应用(主从复制,高可用)

一.Redis介绍

1.Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
2.Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

二.Redis的安装

环境:rhel7.3
设备:
server1:作为master
server2:作为slave
1.编译安装redis

在这里插入图片描述

yum install -y gcc
tar zxf redis-5.0.3.tar.gz    ##解压之后进入到安装目录中
cd /root/redis-5.0.3
make
make install
cd /root/redis-5.0.3/utils		
./install_server.sh			##安装redis,安装完会自动启动
Welcome to the redis service installer
This script will help you easily set up a running redis server
安装过程一直默认
Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
2.修改默认端口,重启服务
netstat -tnlp
可以看到redis默认是开启127.0.0.1的6379端口,这样只能本地访问,需要我们实验配置所有接口都能访问
vim /etc/redis/6379.conf	##修改端口
  70 bind 0.0.0.0
  [root@server1 redis]# /etc/init.d/redis_6379 restart	##重启服务
在server2上以同样的方法安装redis
  #把redis拷贝到server2上
[root@server1 ~]# scp -r redis-5.0.3 root@172.25.0.2:

#在server2上安装
[root@server2 redis-5.0.3]# make install

[root@server2 redis-5.0.3]# cd utils/

[root@server2 utils]# ./install_server.sh	#全部选默认

#修改默认端口
[root@server2 utils]# vim /etc/redis/6379.conf

bind 0.0.0.0

三.配置主从

1.修改配置文件
在server2上配置从
[root@server2 ~]# vim /etc/redis/6379.conf

slaveof 172.25.61.1 6379		##文件最后加master的ip及redis端口
/etc/init.d/redis_6379 restart		##重启服务
2.测试
在server1(主)上写入信息
[root@server1 ~]# redis-cli 
127.0.0.1:6379> set name Tangdou
OK
127.0.0.1:6379> get name 
"Tangdou"
127.0.0.1:6379> quit
在server2(从)上查看
[root@server2 utils]# redis-cli 
127.0.0.1:6379> get name
"Tangdou"
127.0.0.1:6379> set name
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> quit
注意在server1上存入的值,在server2上可以看到,但是在server2上不能写入
可以参考redis中文官网

http://www.redis.cn
http://www.redis.cn/documentation.html

#vim /etc/redis/6379.conf
219 save 900 1 ##这几行表示,有一个键值发生变化时,会过900s更新,下面依次类推,因为不停更新会耗费资源
220 save 300 10
221 save 60 10000

四.配置redis高可用

1.再开一台server3,配置redis

[root@server1 ~]# scp -r redis-5.0.3 root@172.25.61.3:

[root@server3 redis-5.0.3]# make install

[root@server3 utils]# ./install_server.sh

[root@server3 redis]# vim 6379.conf

70 bind 0.0.0.0
89 protected-mode no
1379 slaveof 172.25.0.1 6379 ##写在最后一行

[root@server3 redis]# /etc/init.d/redis_6379 restart

2.配置哨兵

[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/

在server1上(master)编辑配置文件
[root@server1 ~]# vim /etc/redis/sentinel.conf
17 protected-mode no ##关闭保护模式
84 sentinel monitor mymaster 172.25.61.1 6379 2 ##配置master信息,后面的2表示投票机制,至少有2个节点认为master挂了,才会切换
146 sentinel down-after-milliseconds mymaster 10000 ##延时时间为10s
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/ ##配置文件发给server2和server3
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/

3.开启哨兵模式

[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
在这里插入图片描述

测试

#在server1上查看信息

[root@server1 ~]# redis-cli 
127.0.0.1:6379> info

#Replication
role:master
connected_slaves:2
slave0:ip=172.25.61.2,port=6379,state=online,offset=95268,lag=0
slave1:ip=172.25.61.3,port=6379,state=online,offset=95133,lag=0

看到上面信息说明配置成功在这里插入图片描述

远程登陆server1,此时server1 2 3都开启了哨兵模式
[root@server1 ~]# redis-cli
127.0.0.1:6379> info
#Replication
role:master
connected_slaves:2
slave0:ip=172.25.61.3,port=6379,state=online,offset=6437,lag=0
slave1:ip=172.25.61.2,port=6379,state=online,offset=6163,lag=1
master_replid:3a70f634014e0f83878b2f47bdac8c9fde78f08c
server1为master,server2.server3为slave,此时停掉server1
[root@server1 ~]# redis-cli 
127.0.0.1:6379> SHUTDOWN
not connected> 

可以看到server1的6379端口挂掉
sentinel哨兵也能看到信息
sdown + odown

10595:X 13 May 2019 21:17:59.754 # +sdown master mymaster 172.25.61.1 6379
10595:X 13 May 2019 21:18:00.871 # +odown master mymaster 172.25.61.1 6379 #quorum 3/2
10595:X 13 May 2019 21:18:01.173 * +slave slave 172.25.61.3:6379 172.25.61.3 6379 @ mymaster 172.25.61.2 6379
10595:X 13 May 2019 21:18:01.173 * +slave slave 172.25.61.1:6379 172.25.61.1 6379 @ mymaster 172.25.61.2 6379
10595:X 13 May 2019 21:18:11.185 # +sdown slave 172.25.61.1:6379 172.25.61.1 6379 @ mymaster 172.25.61.2 6379
此时远程登陆到server2,发现server2成为master
[root@server2 ~]# redis-cli
127.0.0.1:6379> info
#Replication
role:master
connected_slaves:1
slave0:ip=172.25.61.3,port=6379,state=online,offset=19777,lag=0
master_replid:c98e4c6857238f07207b1bad6357a0fe67168a48
当server1挂掉之后,哨兵模式通过投票认为server1挂掉,然后选取server2或server3作为新的master,实现高可用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis高可用主要通过主从复制和读写分离来实现。 主从复制实验过程如下: 1. 准备两个Redis实例,一个作为主服务器,一个作为从服务器。 2. 在主服务器上配置开启主从复制功能,并设置合适的密码认证。 3. 在从服务器上配置连接主服务器的IP地址和端口,并设置密码认证。 4. 在主服务器上执行命令SLAVEOF NO ONE,将该服务器设置为主服务器。 5. 在主服务器上编辑和插入数据。 6. 在从服务器上使用命令SLAVEOF <主服务器IP> <主服务器端口>,将该服务器设置为从服务器。 7. 从服务器连接主服务器后,会自动将主服务器上的数据同步到从服务器上。 8. 在主服务器上修改或删除数据,观察从服务器是否同步执行相同的操作。 读写分离实验过程如下: 1. 准备两个Redis实例,一个作为主服务器,一个作为从服务器。 2. 在主服务器上配置开启主从复制功能,并设置合适的密码认证。 3. 在从服务器上配置连接主服务器的IP地址和端口,并设置密码认证。 4. 在主服务器上编辑和插入数据。 5. 在应用程序中设置读写分离规则,将写操作发送到主服务器,将读操作发送到从服务器。 6. 在应用程序中进行读写操作,观察数据的读写是否按照设定的规则执行。 通过以上实验过程,可以验证Redis主从复制和读写分离功能是否正常工作。主从复制可以实现数据的同步备份,提高系统的可用性和容灾能力;读写分离可以分担主服务器的读负载,提高系统的性能和吞吐量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值