工欲善其事必先利其器,本次虚拟机采用NAT模式联网,已经准备好的同学可以忽略此步骤
点击编辑虚拟机设置—>网络适配—>高级—>生成新的mac地址,此步骤是为了防止两台虚拟机互联时网不通,
点击编辑—>虚拟网络编辑器,查看NAT模式下,虚拟主机的相关配置
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
显示如下
只需System eh0重启成功即可。此时虚拟机NAT上网模式配置完毕。
也可以不配置虚拟机,此配置是为了解决像我这样有强迫症的同学的问题。(非要让虚拟机上网QAQ)
现在回到本文正题,开始安装reids
虚拟机的话可直接将下载好的安装包从windows丢到xshell上,或者使用rz -E指令,或者点击xftp图标,用xftp进行传输
本人安装在/home目录下
tar -zxvf redis-6.0.9.tar.gz
cd redis-6.0.9
make
执行以上命令后,尴尬的发现报错了
经排查,原因是CentOs6.5系统gcc默认版本是4.4.7,版本过低导致。
需要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
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
下面继续安装我们的redis
在redis解压目录下执行make指令
如出现下图,则代表安装成功
此外,执行完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-server
vim redis.conf
redis6.0.9中第224行daemonize改为yes,保存后退出
在redis安装目录下执行
redis-server redis.conf
**注意:**如果直接输入 redis-server ,默认是以 /usr/local/redis.conf配置文件来启动的
执行 redis-cli (redis客户端命令),测试redis是否能够正常使用,输入指令:ping 如果回应 pong,则成功,退出redis-cli ,执行:exit
考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。正确停止Redis的方式应该是向Redis发送SHUTDOWN命令
执行:redis-cli SHUTDOWN
当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成退出。
此外,Redis可以妥善处理SIGTERM信号,所以使用“kill Redis进程的PID”也可以正常结束Redis,效果与发送SHUTDOWN命令一样。
在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
redis-cli -p 6380
info replication
然后点击 下一步—>克隆自虚拟机的当前状态—>创建克隆链接,虚拟机克隆完毕后,参考 一、准备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命令查看
在上客户端执行
set name tony
在从上客户端执行
get name
哨兵模式下,主和从的密码要保持一致。
masterauth "123456" #394行,因为主挂掉后可能变为从,就需要验证密码了
# bind 127.0.0.1 #第68行,将其注释,哨兵要对每台实例进行监控,如不注释,则哨兵ping不同从,就会显示sdwon
requirepass 123456 #789行 主挂掉后,从可能转化为主,由于其余从都设置了验主密,所以此处也要设置
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 #查看配置
先启动主从,再启动哨兵,启动哨兵命令
redis-sentinel sentinel.conf
已重新选举主,新的主为192.168.140.142:6380
再重新启动原来的主
观察原来主的redis.conf配置文件
观察sentinel.conf配置文件变化
至此,哨兵模式已讲解完毕
1.哨兵配置过程中,注意把虚拟机端口打开,并把redis.conf的bind注释掉,否则哨兵启动后,会出现sdown
2.本人在观察master挂掉后,哨兵自动选举主并切换的情况时,发现不能切换,百度了好多,有的说是把bind改为0.0.0.0,有的说是把protected-mode改为no,但是本人试过都不行。最后发现是本次讲解4.1.3中的最后两行配置,因为默认情况下,主观down为30秒,客观down为3分钟,有的小伙伴在测试时可能等不了这么长时间,就错过了,所以把这两个配置的值改一下即可。
①在/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
①运行刚才写好的start-all.sh脚本,显示如下:
②查看redis占用端口
netstat -tlnp | grep redis
③开放端口对外访问权限
在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 #查看配置
①在二、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
①保护模式下,需要设置密码,此例中密码都设为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
①连接集群节点,连接任意一个即可
redis-cli -p 7001 -c
注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图所示
我们分别set值
可以看到key为hello和str的两个值分别落在不同的主上,查询时也可以自动切换,说明集群运作正常。
②查看集群节点信息
cluster info #查看当前集群信息
cluster nodes #查看集群里有多少个节点
至此,本篇博客结束,谢谢大家观看,如有不足,希望指出。。。。