系统环境:
IP | 主机名 | 系统 | 端口 |
---|---|---|---|
192.168.10.100 | redis_node1 | centos 7 | 6379(master-01),6381(slave-03) |
192.168.10.101 | redis_node2 | centos 7 | 6379(master-02),6380(slave-01) |
192.168.10.102 | redis_node3 | centos 7 | 6380(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