最近发现redis的内存空间不够实用了,发现是服务器太旧了导致乱七八糟的都占了不少存储和内存。而且服务器的性能也比较差。但是服务器还是蛮多的(5台左右),如果说换新的又可惜。所以找了一种redis集群的搭建方式来部署redis高可用集群环境。以下就是搭建的过程。给自己做一个总结和笔记。
准备环境
1.redis-6.0.5
2.三台服务器 10.172.246.231、10.172.246.232、10.172.246.233 (231、232、233)
一、下载redis到服务器
可以自行去官网下载redis然后上传的服务器中,如果服务器可以连接外网则可以直接使用官方提供的链接来下载
wget http://download.redis.io/releases/redis-6.0.5.tar.gz
本人使用的是redis的最新版本 6.0.5
并解压到指定目录
tar xzf redis-6.0.5.tar.gz
二、在各个服务器上安装解压后的redis
官网上说明的是直接在压缩后的文件夹中使用make
$ wget http://download.redis.io/releases/redis-6.0.5.tar.gz
$ tar xzf redis-6.0.5.tar.gz
$ cd redis-6.0.5
$ make
但是我本地并没有安装gcc和tcl所以先进行安装后再make
使gcc 9 作为长久运行版本
$ yum install tcl
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
$ cd redis-6.0.5
$ make
$ make install
三、在每台服务器上拷贝两个实例,然后修改配置文件
服务器 | 主备关系 | 端口 |
---|---|---|
231 | 主 | 33331 |
232 | 主 | 33332 |
233 | 主 | 33333 |
231 | 备 --> 232.33332 | 33334 |
232 | 备 --> 233.33333 | 33335 |
233 | 备 --> 231.33331 | 33336 |
Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽
所以通常的redis集群在某一个节点挂掉后都会导致集群不可用。而这样三台服务器做集群时就可以保证在任意一台服务器挂了的情况下redis集群都可以正常运行(因为备节点和主节点不在同一台服务器上)。
1.新建对应文件夹,放入redis-server和redis.conf文件
$ mkdir reids01 redis04
$ cp redis-6.0.5/src/redis-server /redis01
$ cp redis-6.0.5/src/redis-server /redis04
$ cp redis-6.0.5/redis.conf /redis01
$ cp redis-6.0.5/redis.conf /redis04
2.修改各自的配置文件(只展示需要修改的部分)
$ vim redis01/redis.conf
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。
protected-mode no
#redis监听的端口号
port 33331
#是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes
#redis的进程文件
pidfile /var/run/redis_33331.pid
# 指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile /usr/local/redis/redis01/redis33331.log
# 指定本地数据库文件名,一般采用默认的 dump.rdb
dbfilename dump33331.rdb
# 数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir ./
# 集群
cluster-enabled yes
# 生成的node文件,不过不指定名称则直接为nodes.conf。在同一台服务器上启动第二个实列的时候就会报错。因为nodes.conf文件发生冲突
cluster-config-file nodes33331.conf
修改的配置名称需要自行灵活修改 如:端口为33332则上文中33331的地方均需要改为33332
也可以根据自己的需要来进行修改但是需要注意的是
同一台服务器上的cluster-config-file、dbfilename 名称不能一致、IP端口也不能一致
再修改完后启动各个服务器上的实列
四、创建集群
根据网上说的使用Ruby
创建集群时 在6.0.5里面会给你提示,让你使用redis-cli
创建集群,并会提示给你使用的语句使其和redis-trib.rb
达到一致的效果(可以不用再单独的安装Ruby)
原本使用redis-trib.rb
的语句
$ ./redis-trib.rb create --replicas 1 10.172.246.231:33331 \
10.172.246.232:33332 \
10.172.246.233:33333 \
10.172.246.232:33335 \
10.172.246.233:33336 \
10.172.246.231:33334
提示使用的redis-cli
语句(最好自己打 ,因为我是自己打的。到时候少空格或符号别bb ~~)
$ ./redis-cli --cluster create 10.172.246.231:33331 \
10.172.246.232:33332 \
10.172.246.233:33333 \
10.172.246.232:33335 \
10.172.246.233:33336 \
10.172.246.231:33334 \
--cluster-replicas 1
可以看出两个语句都差不多,而且语句意思也差不多
--cluster-replicas
表示主备的比例关系 1 表示一个主节点对应一个备节点
前三个 ip:port 默认表示主节点,后面的依次为前三个主节点的备份节点
(敲黑板)(敲黑板)(敲黑板)注意 :
我这里第4个节点写的时232:33335而不是231:33334因为 第四个节点是第一个节点的备节点,为了保证高可用(在任意一台服务器挂了的情况下都不影响redis集群的使用)所以主备节点不可以在同一台服务器上(如果主备节点在同一台服务器上则备节点也没有太大的意义了)。所以要错开对应。
如:在231服务器挂了的情况下 231:33331的备节点为233:33336。这时备节点充当主节点继续工作。可以使redis集群正常运行。
它会罗列出集群的对应关系来让你确定。输入 yes完成集群创建。
五、测试
可以看到放入的哈希槽为 [12182]也属于233:33333所管控的节点,所以就直接跳转到233:33333来获取刚才放入的数据