系统环境:
IP主机名系统端口
192.168.10.100redis_node1centos 76379(master-01),6381(slave-03)
192.168.10.101redis_node2centos 76379(master-02),6380(slave-01)
192.168.10.102redis_node3centos 76380(master-03),6381(slave-02)

一、系统初始化【所有主机】

[root@redis_node1 ~]# hostnamectl set-hostname redis_node1
[root@redis_node2 ~]# hostnamectl set-hostname redis_node2
[root@redis_node3 ~]# hostnamectl set-hostname redis_node3

$ vim /etc/hosts
yum -y install wget vim lrzsz net-tools ntp
#修改yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum -y update
yum -y install gcc

# 关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

二、 安装redis【所有主机】

[root@redis_node1 ~]# cat >>  /etc/hosts <<EOF
192.168.10.100   redis_node1
192.168.10.101   redis_node2
192.168.10.102   redis_node3
EOF
[root@redis_node1 ~]# yum -y install gcc automake autoconf libtool make centos-release-scl devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[root@redis_node1 ~]# scl enable devtoolset-9 bash
[root@redis_node1 ~]# yum -y install net-tools

[root@redis_node1 ~]# mkdir -p /data/soft /data/redis/redis_cache
[root@redis_node1 ~]# cd /data/soft/
[root@redis_node1 ~]# wget http://download.redis.io/releases/redis-6.0.6.tar.gz
[root@redis_node1 ~]# tar xvzf redis-6.0.6.tar.gz
[root@redis_node1 ~]# cd redis-6.0.6
[root@redis_node1 ~]# make MALLOC=libc
[root@redis_node1 ~]# make PREFIX=/data/redis install
[root@redis_node1 ~]# cd /data/soft/redis-6.0.6/src
[root@redis_node1 ~]# cp redis-trib.rb /data/redis/bin

三、配置并启动

3.1)、node1配置
[root@redis_node1 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's/6379/6379/g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#redis.pid#redis_6379.pid#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6379.log#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6379.rdb#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i 's#appendonly.aof#appendonly_6379.aof#g' /data/redis/redis6379.conf
[root@redis_node1 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6379.conf

[root@redis_node1 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's/6379/6381/g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#redis.pid#redis_6381.pid#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6381.log#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6381.rdb#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i 's#appendonly.aof#appendonly_6381.aof#g' /data/redis/redis6381.conf
[root@redis_node1 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6381.conf

#环境变量
[root@redis_node1 ~]# cat >> /etc/profile <<EOF
export PATH=/data/redis/bin/:$PATH
EOF

#设置启动文件
[root@redis_node1 ~]# cat > /lib/systemd/system/redis6379.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6379.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node1 ~]# chown +x /lib/systemd/system/redis6379.service
[root@redis_node1 ~]# cat >  /lib/systemd/system/redis6381.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6381.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6381.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node1 ~]# chmod +x /lib/systemd/system/redis6381.service

#开机启动
[root@redis_node1 ~]# systemctl enable redis6379
[root@redis_node1 ~]# systemctl start redis6379
[root@redis_node1 ~]# systemctl enable redis6381
[root@redis_node1 ~]# systemctl start redis6381


3.2)、node2配置
[root@redis_node2 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's/6379/6379/g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#redis.pid#redis_6379.pid#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6379.log#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6379.rdb#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i 's#appendonly.aof#appendonly_6379.aof#g' /data/redis/redis6379.conf
[root@redis_node2 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6379.conf

[root@redis_node2 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's/6379/6380/g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#redis.pid#redis_6380.pid#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6380.log#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6380.rdb#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i 's#appendonly.aof#appendonly_6380.aof#g' /data/redis/redis6380.conf
[root@redis_node2 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6380.conf

#环境变量
[root@redis_node2 ~]# cat >> /etc/profile <<EOF
export PATH=/data/redis/bin/:$PATH
EOF

#设置启动文件
[root@redis_node2 ~]# cat > /lib/systemd/system/redis6379.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6379.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node2 ~]# chown +x /lib/systemd/system/redis6379.service
[root@redis_node2 ~]# cat >  /lib/systemd/system/redis6380.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6380.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6380.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node2 ~]# chmod +x /lib/systemd/system/redis6380.service

#开机启动
[root@redis_node2 ~]# systemctl enable redis6379
[root@redis_node2 ~]# systemctl start redis6379
[root@redis_node2 ~]# systemctl enable redis6380
[root@redis_node2 ~]# systemctl start redis6380
3.3)、node3配置
[root@redis_node3 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's/6379/6380/g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#redis.pid#redis_6380.pid#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6380.log#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6380.rdb#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i 's#appendonly.aof#appendonly_6380.aof#g' /data/redis/redis6380.conf
[root@redis_node3 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6380.conf

[root@redis_node3 ~]# cp /data/soft/redis-6.0.6/redis.conf /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's/^bind .*/bind 0.0.0.0/g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's/6379/6381/g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's/daemonize no/daemonize yes/g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#redis.pid#redis_6381.pid#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#^logfile .*#logfile /data/log/redis_6381.log#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#dir .*#dir /data/redis/redis_cache#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#dbfilename dump.rdb#dbfilename dump_6381.rdb#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#appendonly no#appendonly yes#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i 's#appendonly.aof#appendonly_6381.aof#g' /data/redis/redis6381.conf
[root@redis_node3 ~]# sed -i "/requirepass foobared/a\requirepass 8p3X4YficNCtJ2vc" /data/redis/redis6381.conf

#环境变量
[root@redis_node3 ~]# cat >> /etc/profile <<EOF
export PATH=/data/redis/bin/:$PATH
EOF

#设置启动文件
[root@redis_node3 ~]# cat > /lib/systemd/system/redis6380.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6380.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6380.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node3 ~]# chown +x /lib/systemd/system/redis6380.service
[root@redis_node3 ~]# cat >  /lib/systemd/system/redis6381.service <<EOF
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6381.pid
ExecStart=/data/redis/bin/redis-server /data/redis/redis6381.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF
[root@redis_node3 ~]# chmod +x /lib/systemd/system/redis6381.service

#开机启动
[root@redis_node3 ~]# systemctl enable redis6380
[root@redis_node3 ~]# systemctl start redis6380
[root@redis_node3 ~]# systemctl enable redis6381
[root@redis_node3 ~]# systemctl start redis6381


四、集群设置

1)、在node1上创建集群
[root@redis_node1 ~]# redis-cli --cluster create --cluster-replicas 1 192.168.10.100:6379 192.168.10.100:6381 192.168.10.101:6379 192.168.10.101:6380 192.168.10.102:6380 192.168.10.102:6381 -a 8p3X4YficNCtJ2vc
注意修改IP地址
输入:yes

[root@redis_node1 ~]# redis-cli -h 192.168.10.100 -p 6379 -a 8p3X4YficNCtJ2vc cluster info
[root@redis_node1 ~]# redis-cli -h 192.168.10.100 -p 6379 -a 8p3X4YficNCtJ2vc cluster nodes
2)、验证
[root@redis_node1 ~]# redis-cli -h 192.168.10.100 -c -p 6379 -a 8p3X4YficNCtJ2vc
192.168.10.100:7001> set hello world
OK
在101上运行可以看到hello的值:
[root@redis_node1 ~]# redis-cli -h 192.168.10.101 -c -p 6379 -a 8p3X4YficNCtJ2vc
192.168.10.101:7003> get hello
-> Redirected to slot [866] located at 192.168.0.100:7001
"world"

五、cluster操作命令

CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
//节点
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
//键
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
//新增
CLUSTER SLAVES node-id 返回一个master节点的slaves 列表


文章部分内容通过网络收集整理,如有侵权或技术交流请联系作者!

#Author : mayi

#wchat : a403182580