Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路

前言

  • 一、准备VM虚拟机
    • 1.克隆虚拟机后注意事项
    • 2.更改虚拟机IP为固定IP
      • ①查看NAT模式下虚拟机网络配置
      • ②更改虚拟机IP
      • ③通过其他方式更改虚拟机IP
  • 二、安装redis6.0.9
    • 1.传输安装包
    • 2.解压、编译、安装
      • ①安装初尝试
      • ②填坑
      • ③编译安装
      • ④启动redis服务
      • ⑤停掉redis服务
  • 三、主从复制
    • 1.在同一机器上进行注册复制
      • ①准备从redis
      • ②修改配置文件
      • ③分别启动和登录主从
    • 2.在两台不同的机器上进行主从配置
      • ①将上一步的虚拟机克隆一份
      • ②修改一主三从的配置文件
      • ③打开主的端口
      • ④分别启动一主三从
  • 四、哨兵模式
    • 1.配置准备
      • ①主的redis.confi文件更改如下
      • ②从的redis.conf文件更改如下
      • ③哨兵的配置文件sentinel.conf
      • ④打开相关端口
    • 2.启动主从和哨兵
    • 3.注意事项
  • 五、Redis集群搭建
    • 1.配置准备
    • 2.启动redis服务
    • 3.启动集群
    • 4.注意事项
    • 5.登录验证

本人在安装6.0.9的时候,遇到了很多问题,但是网上的资料都是只解决一部分问题,所以安装过程中搜索各类资料耗费了大量时间,现在把安装过程中遇到的各种问题整理一下,以笔记行事记录一下并分享给大家,希望对大家有所帮助,能够节约大家的时间。本次环境redis-6.0.9.tar.gz、linux cent0s6.5

一、准备VM虚拟机

工欲善其事必先利其器,本次虚拟机采用NAT模式联网,已经准备好的同学可以忽略此步骤

1.克隆虚拟机后注意事项

点击编辑虚拟机设置—>网络适配—>高级—>生成新的mac地址,此步骤是为了防止两台虚拟机互联时网不通,
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第1张图片

2.更改虚拟机IP为固定IP

①查看NAT模式下虚拟机网络配置

点击编辑—>虚拟网络编辑器,查看NAT模式下,虚拟主机的相关配置
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第2张图片

②更改虚拟机IP

vim /etc/sysconfig/network-scripts/ifcfg-eth0

打开后的文件

DEVICE="eth0"		#网卡接口名称	
BOOTPROTO="dhcp"	#启用地址协议-static静态 -bootp协议 -dhcp动态协议 -none不指定协议
HWADDR="00:0C:29:0F:FE:1A" #网卡设备MCA地址
IPV6INIT="yes"		#ipv6启用 yes|no
NM_CONTROLLED="yes"	#network mamager的参数,实时生效,不需要重启
ONBOOT="yes"		#系统启用时是否激活该网卡 yes|no
TYPE="Ethernet"		#网卡类型
UUID="b62da89b-8095-425b-a50d-e4a339c54d58"		#虚拟机UUID

修改后

DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:50:56:26:ED:E3"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="b62da89b-8095-425b-a50d-e4a339c54d58"
IPADDR=192.168.140.142
NETMASK=255.255.255.0
GATEWAY=192.168.140.2
DNS1=192.168.140.2

保存后退出,uuid可重新生成

uuidgen ifcfg-eth0

保存后退出,执行如下命令,重启网络

service network restart

显示如下
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第3张图片
只需System eh0重启成功即可。此时虚拟机NAT上网模式配置完毕。

③通过其他方式更改虚拟机IP

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第4张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第5张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第6张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第7张图片
也可以不配置虚拟机,此配置是为了解决像我这样有强迫症的同学的问题。(非要让虚拟机上网QAQ)

二、安装redis6.0.9

现在回到本文正题,开始安装reids

1.传输安装包

虚拟机的话可直接将下载好的安装包从windows丢到xshell上,或者使用rz -E指令,或者点击xftp图标,用xftp进行传输
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第8张图片

2.解压、编译、安装

①安装初尝试

本人安装在/home目录下

tar -zxvf redis-6.0.9.tar.gz
cd redis-6.0.9
make

②填坑

执行以上命令后,尴尬的发现报错了
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第9张图片
经排查,原因是CentOs6.5系统gcc默认版本是4.4.7,版本过低导致。
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第10张图片

需要gcc5.3以上版本,本次安装的gcc版本为10.2.0,gcc安装教程,在网上找的一遍不错的博客,传送门https://blog.csdn.net/wulinncom/article/details/107773145,在安装过程中,也会遇到一些问题,现在把坑填一下,填坑链接传送门https://blog.csdn.net/aomeishangpin/article/details/93373882

自己的填坑之路

cd /home/gcc-10.2.0 && ./contrib/download_prerequisites

在执行这一步的时候国内可能由于网络原因,会导致下载不下来,我们打开download_prerequisites文件可知道需要的插件版本,gmp-6.1.0.tar.bz2,
mpfr-3.1.4.tar.bz2,mpc-1.0.3.tar.gz,isl-0.18.tar.bz2
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第11张图片

tar -xjf gmp-6.1.0.tar.bz2 || exit 1
ln -sf gmp-6.1.0.tar.bz2 gmp  || exit 1
tar -xjf mpfr-3.1.4.tar.bz2 || exit 1
ln -sf mpfr-3.1.4.tar.bz2 mpfr|| exit 1
tar -xjf mpc-1.0.3.tar.gz || exit 1
ln -sf mpc-1.0.3.tar.gz mpc|| exit 1
tar -xjf isl-0.18.tar.bz2 || exit 1
ln -sf isl-0.18.tar.bz2 isl || exit 1

网上很多教程这一步确实,导致gcc无法编译安装,gcc安装后,记得切换高版本

alternatives --config gcc

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第12张图片

③编译安装

下面继续安装我们的redis
在redis解压目录下执行make指令
在这里插入图片描述
如出现下图,则代表安装成功
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第13张图片

此外,执行完make指令之后,会在src目录下生成5个可执行文件,
分别是:
redis-server Redis服务器
redis-cli Redis命令行客户端
redis-benchmark Redis性能测试工具
redis-check-aof aof文件修复工具
redis-check-dump RDB文件检查工具

我们最常用的是redis-server(用于启动redis服务) 和 redis-cli(用于进入redis命令行客户端)。

如果后续要启动redis服务,需要进入到src目录,执行:redsi-server,但是这样做比较麻烦,如果我们想在任意目录都以操作redis指令,需要再执行

make install 

这个指令的作用是将redis的指令程序复制到Linux的 /usr/local/bin目录下,这样,在任意目录下都可以执行Redis指令了
在这里插入图片描述

④启动redis服务

执行命令,服务正常启动

redis-server

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第14张图片
修改配置文件,让redis以后台线程方式启动

vim redis.conf 

redis6.0.9中第224行daemonize改为yes,保存后退出
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第15张图片
在redis安装目录下执行

redis-server redis.conf 

**注意:**如果直接输入 redis-server ,默认是以 /usr/local/redis.conf配置文件来启动的

在这里插入图片描述
执行 redis-cli (redis客户端命令),测试redis是否能够正常使用,输入指令:ping 如果回应 pong,则成功,退出redis-cli ,执行:exit
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第16张图片

⑤停掉redis服务

考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。正确停止Redis的方式应该是向Redis发送SHUTDOWN命令
执行:redis-cli SHUTDOWN
当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。

此外,Redis可以妥善处理SIGTERM信号,所以使用“kill Redis进程的PID”也可以正常结束Redis,效果与发送SHUTDOWN命令一样。

三、主从复制

1.在同一机器上进行注册复制

①准备从redis

在redis安装目录直接复制redis.conf文件,更改相关配置即可

cp redis.conf redis6380.conf

其中以redis.conf作为主的配置文件,以redis6380作为从的配置文件。
主的配置如下

②修改配置文件

主的配置如下

protected-mode yes  #87行 若改为no,主从复制时,第790行主可不必设置密码
daemonize yes	#224行 no改为yes
pidfile /var/run/redis_6379.pid   #247行,主如图所示不变
logfile "/var/log/redis/redis-master.log"  #260行
dbfilename dump.rdb #342行
replica-read-only yes #默认yes,大多数情况下,从只读
requirepass 123456 #790行 defalut用户的登录密码

从的配置如下

port 6380	#91行
daemonize yes	#224行 no改为yes,
pidfile /var/run/redis_6380.pid   #247行,从改为
logfile "/var/log/redis/redis-slave1.log"  #260行
dbfilename dump6380.rdb #342行
replicaof 127.0.0.1 6379  #388行 redis5.0以后由slaveof改为了replicaof,replicaof  
masterauth 123456  #395行 主的验证密码,如果主的requirepass不设置,此处可不用设置 masterauth 
# masteruser  由于主用的是default用户,所以此处继续注释即可,redis6.0新特性可以设置用户,有兴趣的同学可以百度redis acl了解一下,如果主设置了用户,此处的配置就有用了

③分别启动和登录主从

启动主从(小坑)

mkdir /var/log/redis  #log下无此目录,而刚才配置了logfile在此目录,所以要先创建目录,否则启动会报错
redis-server redis.conf
redis-server redis6380.conf
ps -ef|grep redis

在这里插入图片描述
登录主查看

redis-cli -p 6379
auth 123456
info replication

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第17张图片
登录从查看

redis-cli -p 6380
info replication

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第18张图片

2.在两台不同的机器上进行主从配置

①将上一步的虚拟机克隆一份

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第19张图片
然后点击 下一步—>克隆自虚拟机的当前状态—>创建克隆链接,虚拟机克隆完毕后,参考 一、准备VM虚拟机 的相关步骤,修改ip和mac地址

②修改一主三从的配置文件

第一台一主一从,第二台两从
第一台主在3.1配置文件的基础上修改如下

# bind 127.0.0.1 #第68行,将其注释,或者指定本机ip和第二台从ip

第一台从1在3.1配置文件的基础上修改如下

replicaof 192.168.140.142 6379  #388行 redis5.0以后由slaveof改为了

第二台从2的配置

port 6379	#91行
daemonize yes	#224行 no改为yes,
pidfile /var/run/redis_6379.pid   #247行
logfile "/var/log/redis/redis-slave2.log"  #260行
dbfilename dump.rdb #342行
replicaof 192.168.140.142 6379  #388行 redis5.0以后由slaveof改为了replicaof,replicaof  
masterauth 123456  #395行 主的验证密码

第二台从3的配置

port 6380	#91行
daemonize yes	#224行 no改为yes,
pidfile /var/run/redis_6380.pid   #247行,从改为
logfile "/var/log/redis/redis-slave3.log"  #260行
dbfilename dump6380.rdb #342行
replicaof 192.168.140.142 6379  #388行 redis5.0以后由slaveof改为了replicaof,replicaof  
masterauth 123456  #395行 主的验证密码,

③打开主的端口

小坑

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT #开放6379端口
/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#查看配置

④分别启动一主三从

先在新的虚拟机上创建日志目录

mkdir /var/log/redis

分别启动redis的一主三从服务,分别登陆客户端,用info replication命令查看
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第20张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第21张图片

在上客户端执行

set name tony

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第22张图片

在从上客户端执行

get name

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第23张图片
至此,两台机器上的主从配置完毕。。。。

四、哨兵模式

1.配置准备

哨兵模式下,主和从的密码要保持一致。

①主的redis.confi文件更改如下

masterauth "123456"  #394行,因为主挂掉后可能变为从,就需要验证密码了

②从的redis.conf文件更改如下

# bind 127.0.0.1 #第68行,将其注释,哨兵要对每台实例进行监控,如不注释,则哨兵ping不同从,就会显示sdwon
requirepass 123456  #789行 主挂掉后,从可能转化为主,由于其余从都设置了验主密,所以此处也要设置

③哨兵的配置文件sentinel.conf

daemonize yes  #26行 可先设置no,看一下控制台输出
logfile "/var/log/redis/redis-sentinel2.log" #36行 可先设置空 看一下控制台输出
sentinel monitor mymaster 192.168.140.142 6379 1  #84行 由于此次有两台虚拟机各一个哨兵,所以配置1
sentinel auth-pass mymaster 123456 #103行 设置密码
sentinel down-after-milliseconds mymaster 10000  #125行 多长时间ping不通,认为主观down
sentinel failover-timeout mymaster 10000 #166行 可简单理解为 多长时间master仍没活过来,则启动failover,认为客观down,从剩下的slave中选一个升级为master

④打开相关端口

两台机器都要打开

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT #开放6379端口
/sbin/iptables -I INPUT -p tcp --dport 6380 -j ACCEPT #开放6380端口
/sbin/iptables -I INPUT -p tcp --dport 26379 -j ACCEPT #开放26379端口
/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#查看配置

2.启动主从和哨兵

先启动主从,再启动哨兵,启动哨兵命令

redis-sentinel sentinel.conf

在这里插入图片描述
哨兵配置成功。。。。
把主的进程杀掉,观察:

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第24张图片
已重新选举主,新的主为192.168.140.142:6380
再重新启动原来的主
在这里插入图片描述
观察原来主的redis.conf配置文件
在这里插入图片描述
观察sentinel.conf配置文件变化
在这里插入图片描述
至此,哨兵模式已讲解完毕

3.注意事项

1.哨兵配置过程中,注意把虚拟机端口打开,并把redis.conf的bind注释掉,否则哨兵启动后,会出现sdown
2.本人在观察master挂掉后,哨兵自动选举主并切换的情况时,发现不能切换,百度了好多,有的说是把bind改为0.0.0.0,有的说是把protected-mode改为no,但是本人试过都不行。最后发现是本次讲解4.1.3中的最后两行配置,因为默认情况下,主观down为30秒,客观down为3分钟,有的小伙伴在测试时可能等不了这么长时间,就错过了,所以把这两个配置的值改一下即可。

五、Redis集群搭建

1.配置准备

①在/home目录下创建redis-cluster目录,用于存放集群节点

mkdir redis_cluster

在 redis_cluster 目录下,192.168.140.142下创建名为redis7001、redis7002、redis7003的目录,192.168.140.143下创建名为redis7004、redis7005、redis7006的目录,并将 redis.conf 拷贝到这六个目录中
在 redis_cluster 目录下执行

mkdir redis7001 redis7002 redis7003
cp /home/redis-6.0.9/redis.conf redis7001
cp /home/redis-6.0.9/redis.conf redis7002 
cp /home/redis-6.0.9/redis.conf redis7003

mkdir redis7004 redis7005 redis7006
cp /home/redis-6.0.9/redis.conf redis7004
cp /home/redis-6.0.9/redis.conf redis7005 
cp /home/redis-6.0.9/redis.conf redis7006

②分别修改这六个配置文件的内容

# bind  127.0.0.1           //默认ip为127.0.0.1 68行注释掉
port  7001             //端口分别改为7001,7002,7003,7004,7005,7006  91行
daemonize    yes                               //redis后台运行 224行
pidfile  /var/run/redis_7001.pid          //pidfile文件对应7001,7002,7003,7004,7005,7006 247行
logfile "/var/log/redis/redis-7001.log"	  //logfile对应7001,7002,7003,7004,7005,7006 260行
dir /home/redis-cluster/redis7001		  //设置rdb、aof及node等文件的工作目录 对应7001,7002,7003,7004,7005,7006 365行  
cluster-enabled  yes                      //开启集群  把注释#去掉 1222行
cluster-config-file  nodes_7001.conf   //集群的配置  配置文件首次启动自动生成 7001,7002,7003,7004,7005,7006  1230行
cluster-node-timeout  15000                //请求超时  默认15秒,可自行设置 1236行
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志 

③接着启动所有redis节点,由于挨个启动太麻烦了,所以创建一个批量启动redis节点的脚本文件,命令为start-all.sh,文件内容如下:

redis-server redis7001/redis.conf
redis-server redis7002/redis.conf
redis-server redis7003/redis.conf
ps -ef|grep redis

④当然,过程中会遇到各种不顺,我们再创建一个批量停止redis节点的脚本文件,命名shutdwon-all.sh,文件内容如下:

redis-cli -p 7001 shutdown
redis-cli -p 7002 shutdown
redis-cli -p 7003 shutdwon
ps -ef|grep redis

⑤ 创建好启动停止脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:

chmod +x start-all.sh
chmod +x shutdown-all.sh

2.启动redis服务

①运行刚才写好的start-all.sh脚本,显示如下:
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第25张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第26张图片
②查看redis占用端口

netstat -tlnp | grep redis

Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第27张图片
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第28张图片
③开放端口对外访问权限
在192.168.140.142下执行如下命令

/sbin/iptables -I INPUT -p tcp --dport 7001 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 7002 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 7003 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17001 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17002 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17003 -j ACCEPT 
/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#查看配置

在192.168.140.143下执行如下命令

/sbin/iptables -I INPUT -p tcp --dport 7004 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 7005 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 7006 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17004 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17005 -j ACCEPT 
/sbin/iptables -I INPUT -p tcp --dport 17006 -j ACCEPT 
/etc/rc.d/init.d/iptables save		#修改生效
/etc/init.d/iptables status			#查看配置

3.启动集群

①在二、Redis安装基础上,在192.168.140.142与192.168.140.143两台虚拟机将 redis-trib.rb 复制到/usr/local/bin/ 目录下,在redis安装目录下执行

cp src/redis-trib.rb /usr/local/bin/

②执行如下命令启动集群

redis-trib.rb create --replicas  1  192.168.140.142:7001  192.168.140.142:7002 192.168.140.142:7003  192.168.140.143:7004  192.168.140.143:7005 192.168.140.143:7006

我们为1台主节点搭建一个从节点,发现报错,提示需要安装ruby环境
在这里插入图片描述
不用慌张,redis 从5.0开始已经内部集成ruby环境了, 可以直接用redis-cli命令创建集群了
执行如下命令

redis-cli --cluster create 192.168.140.142:7001  192.168.140.142:7002 192.168.140.142:7003  192.168.140.143:7004  192.168.140.143:7005 192.168.140.143:7006 --cluster-replicas 1

4.注意事项

①保护模式下,需要设置密码,此例中密码都设为123456

requirepass 123456     //790行

②执行启动集群命令时加上密码

redis-cli --cluster create 192.168.140.142:7001  192.168.140.142:7002 192.168.140.142:7003  192.168.140.143:7004  192.168.140.143:7005 192.168.140.143:7006 --cluster-replicas 1 -a 123456

启动成功显示如下
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第29张图片
在这里插入图片描述

5.登录验证

①连接集群节点,连接任意一个即可

redis-cli -p 7001 -c

注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图所示
在这里插入图片描述
我们分别set值
Redis6.0.9安装笔记(主从、哨兵和集群)及填坑之路_第30张图片
可以看到key为hello和str的两个值分别落在不同的主上,查询时也可以自动切换,说明集群运作正常。

②查看集群节点信息

cluster info      #查看当前集群信息
cluster nodes     #查看集群里有多少个节点

至此,本篇博客结束,谢谢大家观看,如有不足,希望指出。。。。

你可能感兴趣的:(redis,nosql,linux)