第一部分:安装redis
1、获取redis压缩包
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
解压文件,因为没有-C指定文件夹,在那个文件夹下tar就在那个文件下
tar -zxvf redis-4.0.6.tar.gz
2、编译安装
yum install gcc #安装编译环境
cd redis-4.0.6/src #进入解压的src文件夹中
make && make install #编译安装
第二部分:搭建redis集群,实现一主二从,哨兵检测模式
搭建redis集群不用安装多个redis,只需要复制配置文件,修改配置文件即可;
1、搭建redis-master
第一步: 进入redis-4.0.6目录,创建redis_master文件夹,将src下的redis-cli,redis-server,redis.conf复制到新建的redis_master文件夹中
cd redis-4.0.6
mkdir redis_master
cp src/redis-cli ./redis_master/
cp src/redis-server ./redis_master/
cp src/redis.conf ./redis_master/
第二步: 修改redis_master中的redis.conf配置文件,修改内容如下:
# 守护进程模式
daemonize yes
#注解掉 bind 127.0.0.1
#protected-mode yes 改为no
protected-mode no
# 监听端口
port 6379
# pidfile 修改pidfile指向路径
pidfile 根据自己的位置/redis_master/redis_master.pid
# 指明日志文件名
logfile "./redis7001.log"
# 持久化数据库的文件名
dbfilename dump-master.rdb
# 工作目录
dir 根据自己的位置/redis-4.0.6/redis_master/
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
# 密码验证
requirepass testmaster123
# redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略
maxmemory 3gb
# volatile-lru -> 根据LRU算法删除带有过期时间的key。
maxmemory-policy volatile-lru
# 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。
no-appendfsync-on-rewrite yes
第三步: 启动并测试
在新建的redis_master中启动并测试
#启动master
redis-server ./redis.conf
#查看下redis进程
ps -aux |grep redis
#使用客户端连接测试
redis-cli -p 6379 -a testmaster123
#插入一条数据
set name lisi
#查询数据
get name
"lisi"
#退出
quit
redis_master搭建完毕,并且能正常读写
2、搭建redis_slave
第一步: 进入redis-4.0.6文件,创建redis_slave文件夹,将src下的redis-cli,redis-server,redis.conf复制到新建的redis_slave文件夹中
cd redis-4.0.6
mkdir redis_slave
cp src/redis-cli ./redis_slave/
cp src/redis-server ./redis_slave/
cp src/redis.conf ./redis_slave/
第二步: 修改redis_slave中的redis.conf配置文件,修改内容如下:
#守护线程
daemonize yes
#注解掉 bind 127.0.0.1
#protected-mode yes 改为no
protected-mode no
# pidfile
pidfile 根据自己的位置/redis-4.0.6/redis_slave/redis_slave.pid
# 监听端口
port 7002
# 指明日志文件名
logfile "./redis7002.log"
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 自己服务的ip地址 7001
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
# 密码验证
requirepass testmaster123
#(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)
slave-read-only yes
第三步: 启动并测试
在新建的redis_slave中启动并测试
#启动redis slave
redis-server ./redis.conf
#连接redis slave
redis-cli -p 7002 -a testmaster123
#查询数据
get name
"zhangsan"
master中信息已经同步了
3、搭建redis_slave2
搭建redis_slave2和搭建redis_slave步骤一样,首先,需要创建文件->复制src下的redis-cli,redis-server,redis.conf->修改配置文件->启动测试。
修改配置文件内容如下:
a: 监听端口
b: 开启守护线程
c: 修改自己的pidfile文件位置
d: 日志文件位置
e: master服务器的ip地址和端口
f: 密码设置
g: 注解掉 bind 127.0.0.1
h: protected-mode yes 改为no
#守护线程
daemonize yes
#注解掉 bind 127.0.0.1
#protected-mode yes 改为no
protected-mode no
# pidfile
pidfile 根据自己的位置/redis-4.0.6/redis_slave/redis_slave.pid
# 监听端口
port 7003
# 指明日志文件名
logfile "./redis7003.log"
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof 127.0.0.1 7001
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth testmaster123
#(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)
slave-read-only yes
4、搭建哨兵
第一步: 进入redis-4.0.6文件,创建redis_sentinel文件夹,将src下的redis-cli,redis-server,redis_sentinel复制到新建的redis_sentinel文件夹中,在redis_sentinel文件夹中新建sentinel1.conf
cd redis-4.0.6
mkdir redis_sentinel
cp src/redis-cli ./redis_sentinel/
cp src/redis-server ./redis_sentinel/
cp src/redis_sentinel ./redis_sentinel/
touch sentinel1.conf
第二步: 修改配置文件:哨兵发现redis的ip地址,尽量不要使用127.0.0.1使用自己的服务地址
# port <sentinel-port>
port 8001
# 守护进程模式
daemonize yes
# 指明日志文件名
logfile "./sentinel1.log"
# 工作路径,sentinel一般指定/tmp比较简单
dir ./
# 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
# (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
# slaves是自动发现,所以你没必要明确指定slaves。
# 当前Sentinel节点监控 127.0.0.1 7001 这个主节点
# 2代表判断主节点失败至少需要2个Sentinel节点节点同意
# mymaster是主节点的别名
sentinel monitor MyMaster 自己服务的ip地址 7001 2
#当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs MyMaster 1
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
# 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds MyMaster 1500
# 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout MyMaster 10000
# 设置master和slaves验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass MyMaster testmaster123
sentinel config-epoch MyMaster 15
#除了当前哨兵, 还有哪些在监控这个master的哨兵,不用配置,启动后自动发现
#自动出现以下信息,一定要注意这里!!!!
sentinel known-sentinel MyMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel MyMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862
第三步: 多个哨兵配置
其他哨兵只需要复制sentinel1.conf配置文件,重命名以后,需要如下改变如下配置即可:
# port <sentinel-port>
port 8002
# 指明日志文件名
logfile "./sentinel2.log"
第四步: 启动哨兵
启动哨兵:redis.sentinel ./sentinel1.conf 或使用 redis.server ./sentinel1.conf --sentinel
redis.sentinel ./sentinel2.conf
redis.sentinel ./sentinel3.conf
第三步:进行整体测试
连接哨兵:redis-cli -p 8001
成功连接以后:
查看master:sentinel masters
查看当前mastrer :SENTINEL get-master-addr-by-name TestMaster
若oldmaster宕机后,master会改变成newmaster,oldmaster再次上线时,只能是slave,不会在是master
查看端口:ps -ef | grep redis
杀死进程:kill -9 进程号
本篇搭建了一主二从,并且加入了三个哨兵,任何一个节点挂掉都不影响正常使用,实现了高可用。
存在的问题:
一主二从每个节点都存储着数据,随着业务庞大,数据量在某天会超过节点容量,即便是redis可以配置清理策略,但是也有极限,于是需要搭建redis集群,将数据分别存储到不同的redis上,并且可以横向扩展。