Redis是什么:
Redis 是一个使用ANSI C编写的、完全开源的、遵守 BSD 协议、包含多种数据结构、支持网络、基于内存、可选持久性的、高性能的 key-value 数据库。是现在最受欢迎的 NoSQL 数据库之一,上面说的高并发导致宕机的问题,我们一般都会引入 Redis 来解决。
Redis的优势:
环境:
操作系统:CentOS8
Redis版本:6.0.9
IP:10.0.0.56 主节点端口:6001 从节点端口:6002
IP:10.0.0.57 主节点端口:6003 从节点端口:6004
IP:10.0.0.58 主节点端口:6005 从节点端口:6006
1.创建Redis目录(三台主机执行同样操作)
mkdir -p /data/redis6
cd /data/redis6
2.下载Redis(三台主机下载)
# 官网下载:
wget https://download.redis.io/releases/redis-6.0.9.tar.gz
# 华为镜像网站下载:
wget https://mirrors.huaweicloud.com/redis/redis-6.0.9.tar.gz
# 查看:
ll -h
总用量 2.2M
-rw-r--r--. 1 root root 2.2M 10月 27 2020 redis-6.0.9.tar.gz
3.解压并编译安装(三台主机执行)
# 解压:
tar -zxvf redis-6.0.9.tar.gz
# 进入解压后的目录编译安装
cd /data/redis6/redis-6.0.9/
# PREFIX的值:/usr/local/redis这个是安装目录,可以改成自己想要的安装目录。
make PREFIX=/usr/local/redis install
# 编译安装完成之后可以看到我们的安装目录(/usr/local/redis)下就有了bin这个目录
ll /usr/local/redis/
总用量 0
drwxr-xr-x. 2 root root 134 3月 17 10:59 bin
yum -y install gcc
make MALLOC=libc
make PREFIX=/usr/local/redis install
4.创建存放集群节点的目录
# 创建redis6-cluster目录
mkdir -p /usr/local/redis6-cluster
# 查看
ll /usr/local
(1)操作10.0.0.56
# 切换目录到/usr/local
cd /usr/local/
# 复制redis下bin目录文件到redis6-cluster/redis6001
cp -r redis/bin/ redis6-cluster/redis6001
# 查看
cd redis6-cluster/
[root@localhost redis6-cluster]# ls redis6001/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
# 复制解压后文件夹下面的redis.conf到/usr/local/redis6-cluster/redis6001/
cp /data/redis6/redis-6.0.9/redis.conf /usr/local/redis6-cluster/redis6001/
# 查看
[root@localhost redis6-cluster]# ls redis6001/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改/usr/local/redis6-cluster/redis6001文件夹下redis.conf配置文件
1.端口号修改为:6001。2.开启集群创建模式,打开注释即可,cluster-enabled yes表示启用cluster。3.修改bind地址为:0.0.0.0。4.修改redis最大占用内存为512mb。
在redis6-cluster目录下复制redis6001文件夹并修改配置文件为对应端口
# 切换到redis6-cluster目录
cd /usr/local/redis6-cluster
# 复制一个redis6002文件
cp -r redis6001/ redis6002
# 查看
cd redis6002/
[root@localhost redis6002]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改redis6002文件夹下的redis.conf端口为6002
vim /usr/local/redis6-cluster/redis6002/redis.conf
# 切换目录到/usr/local
cd /usr/local/
# 复制redis下bin目录文件到redis6-cluster/redis6003
cp -r redis/bin/ redis6-cluster/redis6003
# 查看
cd redis6-cluster/
[root@localhost redis6-cluster]# ls redis6003/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
# 复制解压后文件夹下面的redis.conf到/usr/local/redis6-cluster/redis6003/
cp /data/redis6/redis-6.0.9/redis.conf /usr/local/redis6-cluster/redis6003/
# 查看
[root@localhost redis6-cluster]# ls redis6003/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改/usr/local/redis6-cluster/redis6003文件夹下redis.conf配置文件(同第一台操作,修改端口)
在redis6-cluster目录下复制redis6003文件夹并修改配置文件为对应端口
# 切换到redis6-cluster目录
cd /usr/local/redis6-cluster
# 复制一个redis6004文件
cp -r redis6003/ redis6004
# 查看
cd redis6004/
[root@localhost redis6004]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改redis6004文件夹下的redis.conf端口为6004
vim /usr/local/redis6-cluster/redis6004/redis.conf
# 切换目录到/usr/local
cd /usr/local/
# 复制redis下bin目录文件到redis6-cluster/redis6005
cp -r redis/bin/ redis6-cluster/redis6005
# 查看
cd redis6-cluster/
[root@localhost redis6-cluster]# ls redis6005/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
# 复制解压后文件夹下面的redis.conf到/usr/local/redis6-cluster/redis6005/
cp /data/redis6/redis-6.0.9/redis.conf /usr/local/redis6-cluster/redis6005/
# 查看
[root@localhost redis6-cluster]# ls redis6005/
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改/usr/local/redis6-cluster/redis6005文件夹下redis.conf配置文件(同第一台操作,修改端口)
在redis6-cluster目录下复制redis6005文件夹并修改配置文件为对应端口
# 切换到redis6-cluster目录
cd /usr/local/redis6-cluster
# 复制一个redis6006文件
cp -r redis6005/ redis6006
# 查看
cd redis6006/
[root@localhost redis6006]# ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis.conf redis-sentinel redis-server
修改redis6006文件夹下的redis.conf端口为6006
vim /usr/local/redis6-cluster/redis6006/redis.conf
6.启动 redis 节点
创建10.0.0.56启动脚本:
vim start-redis.sh
#!/bin/bash
cd /usr/local/redis6-cluster/redis6001
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis6002
./redis-server redis.conf &
# 脚本加入执行权限
chmod +x start-redis.sh
# 启动redis
./start-redis.sh
创建10.0.0.57启动脚本:
vim start-redis.sh
#!/bin/bash
cd /usr/local/redis6-cluster/redis6003
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis6004
./redis-server redis.conf &
# 脚本加入执行权限
chmod +x start-redis.sh
# 启动redis
./start-redis.sh
创建10.0.0.58启动脚本:
vim start-redis.sh
#!/bin/bash
cd /usr/local/redis6-cluster/redis6005
./redis-server redis.conf &
cd /usr/local/redis6-cluster/redis6006
./redis-server redis.conf &
# 脚本加入执行权限
chmod +x start-redis.sh
# 启动redis
./start-redis.sh
Running in cluster mode 表示集群模式
7.创建集群
./redis-cli --cluster create 10.0.0.56:6001 10.0.0.56:6002 10.0.0.57:6003 10.0.0.57:6004 10.0.0.58:6005 10.0.0.58:6006 --cluster-replicas 1
[OK] All 16384 slots covered. 表示16384个槽位全部分配完毕。
至此redis集群搭建完成。从图中可以看到每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460 5461-10922 10923-16383solts。
7.测试集群
连接集群中任一节点即可:
[root@localhost redis6001]# ./redis-cli -c -h 10.0.0.57 -p 6003
从图中可以看出集群中节点是自动跳转的,这是因为加了-c选项,如果不加节点之间是无法自动跳转的。
查看集群中节点的信息
cluster nodes
cluster info
./redis-cli -p 6001 cluster nodes |grep master
可以看出10.0.0.56:6001 10.0.0.57:6003 10.0.0.58:6005是主节点。
8.redis集群节点加入systemctl管理设置为开机自启
上面已经有启动脚本,现在再编写停止redis的脚本
vim stop-redis.sh
#!/bin/bash
ps aux|grep redis|awk '{print $2}'|xargs kill -15
# 加入执行权限
chmod +x stop-redis.sh
./stop-redis.sh
# 查看
ps aux|grep redis
vim /etc/systemd/system/redis-cluster.service
[Unit]
Description=Redis6Cluster
After=network.target
[Service]
Type=forking
ExecStart=sh /usr/local/redis6-cluster/start-all-redis.sh
ExecStop=sh /usr/local/redis6-cluster/stop-all-redis.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 重新加载服务列表
systemctl daemon-reload
# 停止redis进程
systemctl stop redis-cluster.service
# 启动redis进程
systemctl start redis-cluster.service
# 查看服务状态
systemctl status redis-cluster.service
# 设为开机自启
systemctl enable redis-cluster.service
# 查看是否加入自启项
systemctl list-unit-files | grep redis