一、环境准备
三台以上的机器,或者虚拟机,配置好的虚拟机的ip(centOS7.0)
虚拟机 | ip |
---|---|
A | 192.168.52.137 |
B | 192.168.52.136 |
C | 192.168.52.135 |
二、开始安装(单机版)
首先下载redis,然后解压继而得到解压后的Redis目录,执行编译命令。
但是在这里可能会遇到一些错误
- wget没有安装,那么你需要通过yum去安装一下wget,这个比较简单。
$ yum install wget
- 执行make命令提示没有安装gcc,那么仅仅需要安装一下gcc就可以。
- 执行make命令可能出现jemalloc/jemalloc.h错误(操作系统内核的错误),使用 $ make MALLOC=libc 进行编译
安装步骤:
以下步骤可通过xshell连接三个虚拟机进行同步操作,在输入框中输入一个命令,则在其他的连接框中也同样执行。
## 通过wget下载redis安装包
1. $ wget http://download.redis.io/releases/redis-5.0.7.tar.gz 下载安装包 、
## 查看安装包下载的地址,并移动到自己想要放置的文件夹下
2. $ cp redis-5.0.7.tar.gz /root/usr/redis/
## 解压
3. $ tar xzf redis-5.0.7.tar.gz
## 将加压的文件放到新建的文件目录的下(放不放随你自己)
4. $ mv redis-5.0.7 /root/usr/redis/snipe
## 编译 进入到 redis-5.0.7目录下,编译
5. $ cd redis-5.0.7
6. $ make
## 安装 进入到src 目录下安装
7. $ cd src
8. $ make install
## 启动redis
9. ll 查看目录下的命令启动即可
说明
- make之后出现以下图片表示编译成功。
- make install 之后出现以下图片表示安装成功。
三、将常用的redis命令放置在自己的目录下
如果不想每次都到redis的安装目录下的,可以将一些常用的命令放置在自己新建的文件目录下,方便自己启动和修改配置。
建立两个文件夹分别用来的存放redis的基本命令和配置文件,redis的配置文件redis.conf,常用的命令有:
mkreleasedr.sh redis-benchmark redis-check-aof redis-cli redis-server
步骤:
- 创建文件夹,并移动对应的的命令到创建的文件夹下
把redis配置文件复制到etc目录,注意redis的配置文件在安装的根目录下面$ mkdir -p /目录地址/etc $ mkdir/目录地址/bin $ mv redis-server redis-cli redis-check-aof /目录地址(命令)(redis下的src目录下)
$ cp redis.conf /目录地址(redis目录下,redis.5.0.7下)
- 启动
## bin目录位置和etc目录配置文件地址 $ /root/usr/redis/snipe/bin/redis-server /root/usr/redis/snipe/etc/redis.conf
- 此时启动后的redis不能再操作界面做任何操作,所以需要修改配置,找到daemonize 将no修改为yes
$ vim redis.conf
- 重新启动后,进入客户端测试
$ /root/usr/redis/snipe/bin/redis-cli
说明:
-
创建/bin文件夹,并将命令redis-server redis-cli redis-check-aof 移动到bin文件夹下
-
创建/etc文件夹,并将redis.conf复制到etc文件夹下
-
在vim模式下打开的文件,输入 /搜索的字符 按下enter键即可在文件中查找对应的搜索字符,按下n为向下翻看,输入 :noh 为取消高亮显示
(以上简单的单机配置版基本完成)
java API连接不上redis的配置说明
一、查看防火墙的状态
## 查看防火墙的状态
$ firewall-cmd --zone=public --list-port
## 关闭防火墙
$ systemctl stop firewalld
二、当前配置绑定的窗口只允许本地连接
## 查看配置 修改的 bind 127.0.0.1 将其注释掉允许所有ip连接
$ vim redis.conf
## 重启redis
$ pkill -9 redis
$ /root/usr/redis/snipe/bin/redis-server /root/usr/redis/snipe/etc/redis.conf
$ ps -ef |grep redis
## 不使用密码连接 需要修改 protected-mode yes 改为no
$ protected-mode yes
四、集群搭建(cluster集群)
图片为3主6从的集群,集群redis,以下图为例,一台机器上部署一个master和两个slave,一个客户client登陆到的redis cluster其中的一个客户端时,进行数据的set (存储),则redis集群通过一定的算法,将数据进行计算,然后分配到指定的redis slot 进行选择master存储。每个master的salve并不一定是在同一台机器上的,如下图,左边的master的两个salve分别在不同的机器上,这样做的好处在于如果mater的机器挂掉了之后他的salve仍然可以运行,并且晋升为主服务,不至于数据全部宕掉。
该模式的相比于哨兵模式的集群来说:哨兵模式,当主slave挂掉的时候,这时候所有集群需要重新选举master,此时会出现空档期,如果数据量过大,则选举恢复数据需要的时间比较长的,造成在这段时间内服务不可用。如果是商城模式下的出现这种问题,损失会很大。而cluster集群模式,由于存储的根据一定规则分片存储,比如存储进来1000条数据,进行一定规则分配存储,例:A机器上存储500条,B机器存储200条,C机器存储300条。当A挂掉之后,只会造成的少部分数据不可用,而且,在此期间,A的slave在不同的机器上,进行选择新的master,从而进行数据的恢复,这部分所用的时间相对来说会比较短。
准备工作(由于机器限制,本文搭建的是三主三从的集群)
按照单机版的操作,将 二、三、将常用的redis命令放置在自己的目录下 的步骤在另外两台机器上操作一遍,操作完成后如下
具体操作如下
-
(机器ip192.168.52.137)在snipe文件夹下创建一个cluster文件夹(用于存放两个redis实例),然后在cluster目录下创建的两个文件夹。对应关系为 7001 7004为同一个cluster文件夹下,7002 7005为同一个cluster文件夹下,7003 7006为同一个cluster文件夹下。
-
复制redis.conf文件到创建的700X目录下
$ cp /root/usr/redis/snipe/etc/redis.conf /root/usr/redis/snipe/cluster/7001 $ cp /root/usr/redis/snipe/etc/redis.conf /root/usr/redis/snipe/cluster/7004
-
修改copy过来的redis.conf 配置文件,需要修改配置如下
daemonize yes 后台模式运行 port 端口(修改成对应的端口号,本文设置7001 7002 7003 7004 7005 7006) bind 绑定的ip,注释掉则表示所有ip pidfile /var/run/redis_7001.pid dir /root/usr/redis/snipe/cluster/7001/ redis数据文件存放位置(路径) cluster-enable yes 开启集群模式 cluster-config-file 集群配置文件的位置 cluster-node-timeout 超时设置(可不设置) appendonly yes 持久化 protected-mode no 保护模式 requirepass snipe(redis密码,自行设置) masterauth snipe(集群通信密码,自行设置)
-
当我们修改完第一个文件的时候(7001,7004同一台机器),为了避免重复修改7004下的文件,可以将7001下的文件copy一份到7004下,然后将配置文件中的数据7001替换成7004即可。
$ cp ../7001/redis.conf /root/usr/redis/snipe/cluster/7004 $ vim redis.conf ## 进入到redis.conf文件后 :%s/source/target/g linux替换字符串命令 例如: %s/7001/7004/g
-
(机器IP:192.168.52.136、192.168.52.135)另外两台机器的cluster文件夹下的redis.conf 可通过远程scp命令copy到对应的文件夹下
## scp root@主机ip:/copy文件目录 copy到的目录地址 $ scp root@192.168.52.137:/root/usr/redis/snipe/cluster/7004/redis.conf /root/usr/redis/snipe/cluster/7002 $ scp root@192.168.52.137:/root/usr/redis/snipe/cluster/7004/redis.conf /root/usr/redis/snipe/cluster/7005
-
在(机器IP:192.168.52.136、192.168.52.135)机器中进入到相应的文件夹下修改redis.conf
## 进入到7002目录下 $ vim redis.conf ## 进入到redis.conf文件后 :%s/source/target/g linux替换字符串命令 例如: %s/7004/7002/g ## 进入到7005目录下 $ vim redis.conf ## 进入到redis.conf文件后 :%s/source/target/g linux替换字符串命令 例如: %s/7004/7005/g
-
至此,三台的redis配置已完成,启动服务(192.168.52.137)
## 查看各个机器是否有redis启动如果有则关闭其他redis服务 $ ps -ef |grep redis $ pkill -9 redis ## 启动每台机器的redis $ /root/usr/redis/snipe/bin/redis-server /root/usr/redis/snipe/cluster/7001/redis.conf $ /root/usr/redis/snipe/bin/redis-server /root/usr/redis/snipe/cluster/7004/redis.conf
-
查看Redis状态,变成cluster
-
其他机器同理,启动服务(192.168.52.136,192.168.52.135)
-
最后一步,集群的主从配置。
## redis-cli -a snipe --cluster create --cluster-replicas 1 各个实例的ip:端口 ## snipe 为配置的集群密码 ## 1 表示有多少从实例,这里的1表示1个master有一个slave redis-cli -a snipe --cluster create --cluster-replicas 1 192.168.52.137:7001 192.168.52.136:7002 192.168.52.135:7003 192.168.52.137:7004 192.168.52.136:7005 192.168.52.135:7006
-
如果配置集群不成功,可能原因是因为防火墙没有关闭。关闭防火墙,再次执行步骤10
解决:关闭防火墙。$ systemctl stop firewalld $ sudo iptables -F
-
接下来就是测试连接集群,做一些简单的操作
## 客户端 redis-cli 启动 $ /root/usr/redis/snipe/bin/redis-cli -a snipe -c -h 192.168.52.135 -p 7003
-
以上,搞定。