redis 是一种nosql数据库,常用作缓存,因为数据都是放在内存中的,所以速度快,但不宜过大,redis的一个键最大能存储512MB
redis特点如下:
1. 支持数据持久化,可将内存中的数据保存至硬盘,启动后再加载到内存使用
2. 不仅支持字符串,还支持 列表,集合、有序集合和hash等数据结构
3. 性能好,redis的读速度高达1o万次每秒,写的速度也高达8万次每秒
4. 原子性,redis所有的操作都是原子性的(原子性是指要么整条操作完成,只要有一个环节出粗则回滚)
redis如果开启vm机制,数据存放将按热点计算,命中率高的数据放在内存中,命中率较低的数据放在swap分区中。
redis.conf 常用配置文件各参数如下
开启后台守护进程方式运行,如果设置为no的话则在终端上启动,开启守护进程方式相应需要配置日志存放路径
daemonize yes
2.指定redis pid
pidfile /var/run/redis.pid
3.指定redis服务启用端口
port 6379
4.redis绑定的本机地址(此处绑定的主机地址为本机地址,如果需要搭建集群最好使用用来通信的IP,以防SLAVEOF切换不成功,或者将IP改成0.0.0.0 ,本机所有IP地址)
bind 127.0.0.1
5.设置客户端关闭连接的空闲时长
timeout 300
6.指定日志记录级别,redis共有4个级别,debug 所有redis产出信息,常用于调试、verbose 相对debug少一些信息、notice 同志消息、varning警告消息
loglevel verbose
7.日志记录方式。默认为标准输出,如果是后台运行的话标准输入无法执行则输出到/dev/null。生产环境最好配置日志存放路径
logfile /var/log/redis.log
8.设置数据库的数量,登录后默认使用数据库为0,可以通过select <database id>来选择使用哪个数据库
databases 16
9.指定多久时间多少次操作后将数据同步到数据库文件,常用于数据持久化,避免意外down机数据丢失,可以使用复合条件。格式为save <多少秒> <多少条>如:
save 60 1 save 240 10 save 600 100
该例表示:60秒内有1条数据更新或240秒内有10条数据更新或者600秒内有100条数据更新都将同步数据到数据文件
10.指定是否压缩数据存储到数据库文件,看需求更改,如果需要节省CPU消耗可以设置不压缩,如果希望数据文件增大不那么迅速可选择设置压缩
rdbcompression yes
11.指定数据库文件名称
dbfilename redis01.rdb
12.指定数据库存放路径
dir /usr/local/redis/data/
13.设置主从同步,当节点为slave时向master同步数据(该配置用于主从集群,单点无需配置)
slaveof <master ip> <master port>
14.设置slave连接master 的连接密码(该配置用于主从集群,且master配置了密码)
masterauth <password>
15.设置master连接密码(用于主从集群,为连接自己的从节点设置认证密码)
requirepass <master password>
16.设置同一时间最大客户端连接数,默认maxclients 0 表示不限制。
maxclients 1024
17.指定redis最大内存限制,内存中的数据达到最大限制数时将清除过期或即将到期的key。清理完成还超出最大内存时,将无法写入数据到redis,只能读
maxmemory 1024000
18.指定引用的配置文件,用于一个系统中存在多个redis,多个redis有共同配置部分。
include /etc/redis/redispublic.conf
安装部署redis 服务器,要求搭建主从服务器,当master故障,slave切换成master,master恢复后变成slave,实现高可用redis集群
master : 192.168.12.162
slave :192.168.12.163
vip : 192.168.12.165
备注1:实现redis高可用之前,先了解一个redis重要命令:SLAVEOF 和一个重要的配置文件bind
SLAVEOF <ip> <port> #断开已连接的主服务器,并将从主服务器同步过来的数据全部丢弃,重新与指定的新主服务器同步数据。
SLAVEOF NO ONE #先将自己作为从服务器同步主服务器的数据保存好,然后将自己本身作为主服务器。
bind :绑定本机redis使用的IP地址,默认使用127.0.0.1 ,单机无所谓,当作用于集群时,SLAVEOF跨操作系统切换,
可能无法检测到地址,导致无法连接的错误。可以使用网卡IP或0.0.0.0(绑定本机所有地址)
备注2:redis 需要依赖JDK
备注3:keepalived 默认有MASTER和BACKUP两种,如果master恢复则立即切换为主,提供服务,这对于有状态服务来说有时候容易出现大问题,所以该处两台keepalived都设置成BACKUP,并且把优先级最大的BACKUP 设置成不抢占IP的方式,就可以实现非故障不随意乱漂移提供服务IP保障业务稳定。
一、确认jdk安装完成
二、安装部署redis服务
2.1 在192.168.12.162 上部署如下:
wget http://download.redis.io/releases/redis-3.0.7.tar.gz -O /usr/local/redis-3.0.7.tar.gz tar xf /usr/local/redis-3.0.7.tar.gz -C /usr/local/ && rm -f /usr/local/redis-3.0.7.tar.gz cd /usr/local/redis-3.0.7 && make cd /usr/local/redis-3.0.7/src && make install mkdir -p /usr/local/redis/bin mkdir -p /usr/local/redis/etc cp /usr/local/redis-3.0.7/redis.conf /usr/local/redis/etc/ cd /usr/local/redis-3.0.7/src/ cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin/ rm -rf /usr/local/redis-3.0.7
2.2 将192.168.12.162的/usr/local/redis 目录拷贝到192.168.12.163的/usr/local目录下
2.3 将两台redis 服务器的/usr/local/redis/etc/redis.conf 文件修改如下三个配置,其余配置保持不变(此处设置两台redis密码一致是因为虚拟IP漂移客户端连接密码无需改变)
daemonize yes #以后台守护进程方式运行 logfile /var/log/redis.log #指定redis 生成的日志文件 bind 0.0.0.0 #绑定本机用于redis 服务的ip地址,127.0.0.1可能导致slaveof主从切换失败, #无法连接到跨操作系统的回环地址,也可使用本机网卡IP masterauth passwordredis #连接到的master服务器认证密码 requirepass passwordredis #当本机成为master时的认证密码,供其他客户端和slave连接
2.4 启动两台redis 并确认两台都为master,且slave连接数为0,保证两台服务器为独立redis主服务器
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf #启动redis服务 /usr/local/redis/bin/redis-cli -a passwordredis info replication
三、测试两台服务器主从切换是否可用
3.1 使192.168.12.162 作为主,163作为从服务器
在192.168.12.163执行切换命令: /usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.162 6379
在两台机器查看redis服务状态:/usr/local/redis/bin/redis-cli -a passwordredis info replication
3.2 使192.168.12.163 作为主,162作为从服务器
在192.168.12.162上执行切换命令:/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.163 6379 在192.168.12.163上执行切换命令:/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF NO ONE 在两台机器上查看redis服务状态,如果身份转换则说明切换成功:/usr/local/redis/bin/redis-cli -a passwordredis info replication
四、使用keepalived VRRP 协议 提供双机热备,高可用集群
4.1 在两台主机分别安装keepalived 服务
yum install keepalived -y
4.2 配置两台主机的keepalived服务,修改配置文件如下
192.168.12.162 /etc/keepalived/keepalived.conf 配置如下
vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" #指定健康检查的脚本,健康检查脚本返回值为0表示正常,返回值为1表示异常需进行切换 interval 10 #指定检测时间为每10秒一次 } vrrp_instance VI_1 { state BACKUP #指定默认状态的主服务器 interface ens160 #指定需要使用的网卡 virtual_router_id 51 #指定虚拟路由ID priority 101 #指定优先级,主大从小的规则 nopreempt #设置本机恢复后不抢占虚拟IP(设置在backup中优先级最高的那台上) authentication { auth_type PASS #指定keepalived认证方式 auth_pass passwordkeepalived #指定keepalived认证密码 } track_script { chk_redis #追踪检查脚本 } virtual_ipaddress { 192.168.12.165 #指定用于vrrp实现高可用的虚拟漂移IP } notify_master /etc/keepalived/scripts/redis_master.sh #指定切换为master时需要运行的脚本 notify_backup /etc/keepalived/scripts/redis_backup.sh #指定切换为slave时需要运行的脚本 }
192.168.12.163 /etc/keepalived/keepalived.conf 配置如下
vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" interval 10 } vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 51 priority 100 authentication { auth_type PASS auth_pass passwordkeepalived } track_script { chk_redis } virtual_ipaddress { 192.168.12.165 } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh }
4.3 创建keepalived健康检查脚本和切换身份脚本
mkdir -p /etc/keepalived/scripts #两台机器均创建存放脚本的目录
两台redis服务器 /etc/keepalived/scripts/redis_check.sh 配置一致,如下
#!/bin/bash ALIVE=`/usr/local/redis/bin/redis-cli -a passwordredis PING` LOGFILE="/var/log/keepalived-redis-state.log" echo "\[CHECK\]" >> ${LOGFILE} echo `date +"%Y-%m-%d %H:%M:%S"` >>${LOGFILE} if [ "${ALIVE}" == "PONG" ];then echo "Success!" >> ${LOGFILE} 2>&1 exit 0 else echo "Faild" >> ${LOGFILE} 2>&1 exit 1 fi
两台redis服务器 /etc/keepalived/scripts/redis_master.sh 配置一致,如下
#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log" echo "[MASTER]" >>${LOGFILE} echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE} echo "The Current Redis Becomes The MASTER......" >> ${LOGFILE} 2>&1 $REDISCLI -a passwordredis SLAVEOF NO ONE >>${LOGFILE} 2>&1
192.168.12.162 /etc/keepalived/scripts/redis_backup.sh 配置如下
#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log" echo "[BACKUP]" >>${LOGFILE} echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE} echo "The Current Redis Becomes The SLAVE......" >> $LOGFILE 2>&1 $REDISCLI -a passwordredis SLAVEOF 192.168.12.163 6379 >>${LOGFILE} 2>&1
192.168.12.163 /etc/keepalived/scripts/redis_backup.sh 配置如下
#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/var/log/keepalived-redis-state.log" echo "[BACKUP]" >>${LOGFILE} echo `date "+%Y-%m-%d %H-%m-%S"` >>${LOGFILE} echo "The Current Redis Becomes The SLAVE......" >> $LOGFILE 2>&1 $REDISCLI -a passwordredis SLAVEOF 192.168.12.162 6379 >>${LOGFILE} 2>&1
4.4 赋予各脚本执行权限,两台主机都执行如下命令
chmod a+x /etc/keepalived/scripts/*
4.5 启动keepalived
systemctl start keepalived
四、使keepalived.conf中配置的MASTER主机(192.168.12.162)率先成为主,最初保持主与漂移IP在一台主机上
192.168.12.162执行如下命令
/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF NO ONE
192.168.12.163执行如下命令
/usr/local/redis/bin/redis-cli -a passwordredis SLAVEOF 192.168.12.162 6379
五、测试redis集群高可用性,分别暂停两台主机的keepalived服务或redis服务,观察主和虚拟IP是否会迁移,恢复后是否为主从关系