前言:
RDBMS:即关系数据库管理系统(Relational Database Management System)
许多Web应用都将数据保存到 RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web等应用的速度、 提高可扩展性。
缓存服务器作用
加快访问速度 缓解数据库压力。
NOSQL(Not Only SQL)
为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。
以键值对的方式存储数据
缓存数据库
产品:
redis
memcached
mongoDB
redis简介:redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。
redis官网:redis.io
redis的特点: 丰富的数据结构、支持持久化、支持事务、支持主从。
事务是指“一个完整的动作,要么全部执行,要么什么也没有做”。
支持主从
部署过程:
三台主机:
ip:192.168.237.21 hostname:redis1
ip:192.168.237.22 hostname:redis2
ip:192.168.237.23 hostname:redis3
三台主机同时部署安装Redis.
1.获取tar包
# wget http://download.redis.io/releases/redis-4.0.9.tar.gz -O /redis-4.0.9.tar.gz
2.进入资源目录
# cd /
3.解压缩安装包
# tar xzf redis-4.0.9.tar.gz
4.进入安装包所在目录
# cd /redis-4.0.9/
5.下载编译器
# yum install gcc-c++ -y
6.编译安装
# make
7.设置开机启动
# mkdir /etc/redis
# cp /redis-4.0.9/redis.conf /etc/redis/6379.conf
# cp /redis-4.0.9/utils/redis_init_script /etc/init.d/redis
# vim /etc/init.d/redis
注意:只改其中的的5,6,8, 10, 22行的内容
# chmod 777 /etc/init.d/redis
增加开机启动设置
chkconfig --list
redis 0:关 1:关 2:开 3:开 4:开 5:开 6:关
# chkconfig --add redis
增加redis开机启动
# chkconfig redis on
重新加载自启动信息
# systemctl daemon-reload
启动redis
# systemctl start redis
8.测试:
[root@ergou redis-4.0.9]# /redis-4.0.9/src/redis-cli
127.0.0.1:6379> set name wiger
OK
127.0.0.1:6379> get name
"wiger"
另外两台安装如上8步操作配置即可。
Redis主从配置
切记:关闭三台服务器的firewall和Selinux
1.配置master 192.168.237.21
# vim /etc/redis/6379.conf
#bind 127.0.0.1
bind 0.0.0.0 #监听本机所有地址
#protected-mode yes
protected-mode no #关闭保护模式
# systemctl restart redis
2.配置slave1 192.168.237.22
# vim /etc/redis/6379.conf
slaveof 192.168.237.21 6379
bing 0.0.0.0
protected-mode no
# systemctl restart redis
3.配置slave3 192.168.237.23
# vim /etc/redis/6379.conf
slaveof 192.168.237.21 6379
bing 0.0.0.0
protected-mode no
# systemctl restart redis
测试:
数据一致性
master1记录键值对
slave1/2查询数据,验证数据一致性
master1:
slave1:
slave2:
Redis Sentinel
Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案。实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署。
作用:
1):Master状态检测
2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
工作方式:
1):每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
2):如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
3):如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4):当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
步骤,三台服务器都要做以下3步
- 每台机器上修改redis主配置文件设置:bind 0.0.0.0
- 每台机器上修改sentinel配置文件:添加如下配置
vim /redis-4.0.9/sentinel.conf
sentinel monitor mymaster 192.168.0.109 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 10000
protected-mode no
3.启动每台机器服务
# cd /redis-4.0.9
# ./src/redis-sentinel sentinel.conf
测试结果,如下表示服务正常
master:
slave1
slave2
主从转换
模拟主服务器master宕掉后,此时从服务器身份会发生改变:
# systemctl stop redis
此时,就会在两个slave中投票选举一个充当主服务器
可以看到,redis2的角色法发生转变
如果此时,将redis1服务器重新上线,那么角色就是从服务器,只有redis2扮演的主服务器宕机后,就又会投票选举合适的主服务器。
初来乍到,请多指教。