Redis 的主从复制、高可用(sentinel哨兵)

主机环境:rhel7.3 selinux and firewalld disabled

主机名 ip 服务
server1 172.25.254.1 redis
server2 172.25.254.2 redis
server3 172.25.254.3 redis

一、基础概念

1.什么是Redis?

redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 key-value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。

Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 appendonly file(aof)里面(这称为“全持久化模式”)。

二、Redis主从复制搭建步骤:

1.获得资源包,解压,安装(redis可以不用编译,直接make)
在这里插入图片描述

[root@server1 redis]# tar zxf redis-5.0.3.tar.gz
[root@server1 redis]# cd redis-5.0.3
[root@server1 redis-5.0.3]# yum install gcc -y
[root@server1 redis-5.0.3]# make        #redis里将编译安装放一起
[root@server1 redis-5.0.3]# make install        #生成路径

在这里插入图片描述
server2、server3操作相同,此处将make好的目录发送过去,在执行make install
[root@server1 redis]# scp -r redis-5.0.3 server2:/root
[root@server1 redis]# scp -r redis-5.0.3 server3:/root

2.在主redis上进行初始化,并且修改配置文件

[root@server1 utils]# pwd
/root/redis/redis-5.0.3/utils
[root@server1 utils]# ./install_server.sh	##安装redis,安装完会自动启动

在这里插入图片描述

[root@server1 utils]# netstat -tnlp	##可以看到redis默认是开启127.0.0.16379端口,这样只能本地访问,需要配置所有接口都能访问

在这里插入图片描述
对配置文件进行修改,设置端口的绑定

[root@server1 redis]# pwd
/etc/redis
[root@server1 redis]# vim 6379.conf
70 bind 0.0.0.0
[root@server1 redis]# /etc/init.d/redis_6379 restart	##重启服务,也可以用systemctl restart redis_6379,但是重启好像不生效,可以开启服务

[root@server1 redis]# netstat -tnlp
在这里插入图片描述

在数据库里进行信息添加

[root@server1 redis]# redis-cli
127.0.0.1:6379> set name dd
OK
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> exit

3.在从库上进行安装,设置,并进行测试查看

【server2】:
[root@server2 ~]# ls
redis-5.0.3
[root@server2 ~]# cd redis-5.0.3/
[root@server2 redis-5.0.3]# make install
在这里插入图片描述

[root@server2 utils]# pwd
/root/redis-5.0.3/utils
[root@server2 utils]# ./install_server.sh
[root@server2 redis]# pwd
/etc/redis
[root@server2 redis]# vim 6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
[root@server2 redis]# /etc/init.d/redis_6379 restart
[root@server2 redis]# netstat -antlup
[root@server2 redis]# redis-cli
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> set age 18
(error) READONLY You can't write against a read only replica.

【server3】:

[root@server3 redis-5.0.3]# make install
[root@server3 redis-5.0.3]# cd utils/
[root@server3 utils]# ./install_server.sh
[root@server3 utils]# cd /etc/redis/
[root@server3 redis]# vim 6379.conf
70 bind 0.0.0.0
1379 slaveof 172.25.254.1 6379
[root@server3 redis]# /etc/init.d/redis_6379 restart
[root@server3 redis]# netstat -antlup
[root@server3 redis]# redis-cli
127.0.0.1:6379> get name
"dd"
127.0.0.1:6379> set age 18      #从不能写
(error) READONLY You can't write against a read only replica.

三、Redis 高可用(哨兵机制)

Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。

搭建步骤:

1.将哨兵配置文件发送到redis的配置目录下,修改哨兵配置文件

[root@server1 redis-5.0.3]# pwd
/root/redis/redis-5.0.3
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf  sentinel.conf
[root@server1 redis]# vim sentinel.conf
17 protected-mode no	##关闭保护模式
84 sentinel monitor mymaster 172.25.254.1 6379 2	##配置master信息,后面的2表示投票机制,至少有2个节点认为master挂了,才会切换
113 sentinel down-after-milliseconds mymaster 10000	##改为10s,表示master挂后10s会切换

在server2和server3上同样要开启(将server1的哨兵配置文件scp一份#注意先发送再在1上打开)

[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/

2.主从上都开启哨兵

[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server2 redis]# redis-server /etc/redis/sentinel.conf --sentinel
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel

在这里插入图片描述

测试:

另ssh连上server1查看端口发现哨兵26379进程开启
[root@server1 ~]# netstat -antlup
在这里插入图片描述

[root@server1 ~]# redis-cli 
127.0.0.1:6379> info	#查看状态信息,此时server1是master

在这里插入图片描述
查看sentinel信息

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

在这里插入图片描述
注意:此时显示主是server1,sentinels=3表示成功

测试1:挂掉server1的redis ------->会随机选择一个slave作master

[root@server1 ~]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected> exit

sentinel哨兵也能看到信息,看此时谁是master(此时显示是server2)

在这里插入图片描述
此时ssh连上server2,查看状态信息

[root@server2 ~]# redis-cli
在这里插入图片描述
在主上写入信息,在从上查看(server3)
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
“18”

在这里插入图片描述

注意,此时可以连上server1,/etc/init.d/redis_6379 start(此时将server1变slave);哨兵的配置文件会自动生成内容
在这里插入图片描述
[root@server1 redis]# cat sentinel.conf
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44209804/article/details/89605026