本文内容主要来自链接: https://stor.51cto.com/art/202004/614443.htm
以实际操作步骤记录本笔记(主要记录了笔记,详细内容的了解还是看上面的链接)
redis安装卸载的链接:https://www.cnblogs.com/zerotomax/p/7468833.html#uninstall
一、下载安装包并解压
1、在官网下载安装包:wget http://download.redis.io/releases/redis-5.0.7.tar.gz
2、解压安装包:tar -zxvf redis-5.0.7.tar.gz
3、将redis文件夹移动到/usr/local/redis下:mv redis-5.0.7 /usr/local/redis (因为搜到的各种安装,都是安装到该路径下,为了方便操作,我也使用相同目录)
4、切换到/usr/local/redis目录下:cd /usr/local/redis
二、编译及安装
1、yum安装gcc-c++:
yum install gcc-c++
2、执行make进行编译:
[root@localhost redis]# make cd src && make all make[1]: Entering directory `/usr/local/redis/src' CC Makefile.dep . . . . Hint: It's a good idea to run 'make test' ;) make[1]: Leaving directory `/usr/local/redis/src' [root@localhost redis]#
然后可以在src目录下看到,有这几个文件:
redis-server、 redis-sentinel、 redis-cli、 redis-benchmark、 redis-check-rdb、 redis-check-aof
3、编译成功后,进入 src 文件夹,执行 make install 进行 Redis 安装。
[root@localhost redis]# make install cd src && make install make[1]: Entering directory `/usr/local/redis/src' CC Makefile.dep make[1]: Leaving directory `/usr/local/redis/src' make[1]: Entering directory `/usr/local/redis/src' Hint: It's a good idea to run 'make test' ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install make[1]: Leaving directory `/usr/local/redis/src' [root@localhost redis]#
切换到/usr/local/bin目录下,查看,可看到第2步的几个文件已经在bin下了
[root@localhost bin]# ll 总用量 30908 -rwxr-xr-x. 1 root root 4985275 9月 3 10:16 redis-benchmark -rwxr-xr-x. 1 root root 7185836 9月 3 10:16 redis-check-aof -rwxr-xr-x. 1 root root 7185836 9月 3 10:16 redis-check-rdb -rwxr-xr-x. 1 root root 5092431 9月 3 10:16 redis-cli lrwxrwxrwx. 1 root root 12 9月 3 10:16 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 7185836 9月 3 10:16 redis-server [root@localhost local]#
4、由于 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理,如下:(本步骤不是必须执行的,直接使用原本路径下的redis.conf、mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel等文件也可以)
(1)新建 bin 和 etc 文件夹
切换到/usr/local/redis目录下:cd /usr/local/redis
新建bin目录:mkdir bin
新建etc目录:mkdir etc
(2)回到安装目录,将redis.conf复制到 etc文件夹下,如下:
切换到/usr/local/redis目录下:cd /usr/local/redis
复制redis.conf到etc目录下:cp redis.conf /usr/local/redis/etc
(3)进入 src 文件夹下,将mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel文件复制到 bin 文件夹,如下:
切换到/usr/local/redis/src目录下:cd /usr/local/redis/src
复制以上文件到bin目录下:
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin/
5、启动redis(若未执行第4步,则可使用/usr/local/redis/src路径下的redis-server进行启动)
切换到 bin 目录,使用./redis-server即可启动 redis 服务,但是这种方式没有指明配置文件,redis 将采用默认配置,所以我们需要让 redis 按照我们的配置文件来启动,如下,启动时指定刚才我们复制到 etc 文件夹下的redis.conf。
命令如下:
cd /usr/local/redis/bin ./redis-server /usr/local/redis/etc/redis.conf
启动成功会在最后一行显示ready to accept connections
-
测试redis服务是否成功启动:
(1)启动后查看redis的进程,6379端口就是我们运行的 redis 服务(配置文件中默认端口为6379)。
使用命令:ps -aux | grep redis 或者使用命令:ps -ef | grep redis
(2)使用redis-cli命令连接客户端,如下:
命令:redis-cli -p 6379
6、关闭redis服务
如果需要关闭redis服务,使用如下命令即可关闭。
命令:
redis-cli -p 6379
shutdown
或者使用kill -9 pid强制删除进程(实在没办法时使用kill -9命令)。
三、Redis 集群
使用以上步骤在另外两台服务器上安装好redis,即三台服务器redis均安装完成,再进行以下操作。
1、Redis 主从配置
(1)进入主机(三台服务器可任选一台作为主机)的/usr/local/redis/etc路径下,修改redis.conf配置文件:vi redis.conf
修改以下配置:
bind:0.0.0.0 #Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。 port:6379 #监听端口默认为6379,想改其他也行。 protected-mode:no #关闭保护模式,可以外部访问。 daemonize:yes #设置为后台启动。 logfile:./redis.log #redis 日志文件,生成后在 bin 目录下可找到。 requirepass:Passw0rd #设置 redis 连接密码。 masterauth:Passw0rd #slave 服务连接 master 的密码(从服务连接主服务的密码)。
注意:若不设置密码,则可将requirepass、masterauth两行注释掉。在前面加#即可。
(2)在从机修改如下配置(除主机之外的两台服务器均需修改):
bind:0.0.0.0 port:6379 protected-mode:no daemonize:yes logfile:./redis.log requirepass:Passw0rd masterauth:Passw0rd replicaof 192.168.231.130 6379 #指定当本机为 slave 服务时,设置 master 服务的IP地址及端口,在 redis 启动的时候会自动跟 master 进行数据同步,所以两台从机都这样配置即可。
注:由于我们搭建的集群需要自动容灾切换,主数据库可能会变成从数据库,所以三台机器上都需要同时设置 requirepass 和 masterauth 配置项。若不设置密码,则三台服务器都不设置,三台服务器都注释掉密码的设置
2、数据同步
上面我们主从节点的配置文件配置好后,重启 redis 服务,进入 bin 目录即可查看配置文件中指定的redis.log日志文件。
查看日志使用命令cat redis.log 或者tail -f redis.log 或者tail -n 30 redis.log(任意一个命令都可以,其中30这个数字可修改)
(1)设置防火墙
下面我们需要设置一下防火墙,否则主从机之间无法同步数据,命令如下,这里根据自己设置的端口进行更改。
firewall-cmd --add-port=6379/tcp --permanent --zone=public #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload
linux7防火墙重启命令:systemctl restart firewalld.service
(2)查看三台机器的信息
至此主从结构搭建完毕,不出意外主从机已经可以数据同步,下面我们分别查看三台机器的信息,如下:
连接redis命令:redis-cli -p 6379
使用命令:info replication
三台机器的情况分别如下:
主机:
从机:
(3)主从验证
接下来我们在主机(master)添加几条数据,看从机(slave)是否可以获取到,如果能获取,说明数据已经同步到了从机,主机添加数据,如下:
主机:
在主机执行:
set name test(test可换成其他任意字符)
get name
如下图所示:
两台从机均可获取到数据:
如上操作,两台从机已经获取到数据,证明主从搭建成功并可同步数据。
四、哨兵模式搭建
这里我们部署三个哨兵,每台服务器一个哨兵,配置方式相同,如下
(1)同样为了方便管理,首先将sentinel.conf复制到 etc 下
切换到redis安装路径下:cd /usr/local/redis/
复制文件至etc下:cp sentinel.conf /usr/local/redis/etc/
(2)编辑sentinel.conf
切换路径:cd /usr/local/redis/etc/
vi sentinel.conf
//端口默认为26379。 port:26379 //关闭保护模式,可以外部访问。 protected-mode:no //设置为后台启动。 daemonize:yes //日志文件。 logfile:./sentinel.log //指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。 sentinel monitor mymaster 192.168.231.130 6379 2 //当在Redis实例中开启了requirepass,这里就需要提供密码,若不设置密码,则注释掉。 sentinel auth-pass mymaster Passw0rd //这里设置了主机多少秒无响应,则认为挂了。 sentinel down-after-milliseconds mymaster 3000 //主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。 snetinel parallel-syncs mymaster 1 //故障转移的超时时间,这里设置为三分钟。 sentinel failover-timeout mymaster 180000
(3)防火墙设置
命令如下,这里根据自己设置的端口进行更改。
firewall-cmd --add-port=26379/tcp --permanent --zone=public #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload
(4)启动三个哨兵:
切换路径:cd /usr/local/redis/bin
启动哨兵:redis-sentinel /usr/local/redis/etc/sentinel.conf
三个哨兵都启动后,可使用如下命令查看哨兵信息:
redis-cli -p 26379
info sentinel
可以看到,哨兵已经监听到当前的主机IP端口和运行状态,并且有2台从机,3个哨兵。
五、容灾切换(验证主从哨兵模式是否成功部署)
1、模拟主机宕机
我们模拟主机宕机,将主机 redis 服务关闭,如下:
- 主机启动redis服务,命令:redis-server /usr/local/redis/etc/redis.conf
- 再查看redis的信息,命令:
redis-cli -p 6379
info replication
可以看到主机已经变成了从机。
使用相同的命令查看原从机,发现有一台从机已经变成了主机。
命令:redis-cli -p 6379
info replication
2、查看日志
需要注意的是,主从切换后配置文件已经被自动进行了更改,我们现在看一下新上位的主机 redis 日志,如下
可以看到,当主机挂了的时候,一直连接主机被拒绝,当哨兵选举它为主机后,它成功执行重写的配置文件,并且连接了其他从机。
至此,主从+哨兵的集群架构搭建完毕。
附:对redis主从及哨兵模式的理解
(1)redis主从
redis主从搭建完成后,若主机宕机,从机不会自动升级为主机,可手动更改配置,将从机升级为主机。但是新主机只有主机,没有从节点。
原主机重新启动后,从节点仍可连接到主节点。
(2)哨兵
哨兵模式就是为了解决redis主从仍需手动修改配置的问题的。
哨兵 Sentinel 可以不用人为干预而应对各种redis集群的故障。
哨兵Sentinel的作用:
- 监控所有redis主服务器、从服务器是否运行正常。
- 自动故障迁移,redis主服务器出故障时,可自动选择一台从服务器作为主服务器,其他从服务器也会成为新主服务器的从节点服务。原主机重启后,会成为新主机的从机。