1.Redis cluster集群架构(本机ip:192.168.2.100)
建立三台linux服务器,分别是192.168.2.61、192.168.2.62、192.168.2.63
1.1.建立192.168.2.61Linux服务器
1.配置Linux服务器
# 在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件里做如下配置
TYPE=Ethernet # 网络类型为以太网
BOOTPROTO=static # 手动分配ip
DEVICE=eno16777736 # 网卡设备名,设备名一定要跟文件名一致
ONBOOT=yes # 该网卡是否随网络服务启动
IPADDR=192.168.2.61# 该网卡ip地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.2.1 # 网关
DNS1=8.8.8.8 # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址
# 2. 配置网络工作
在/etc/sysconfig/network文件里增加如下配置
NETWORKING=yes # 网络是否工作,此处一定不能为no
# 3. 配置公共DNS服务(可选)
在/etc/resolv.conf文件里增加如下配置
nameserver 8.8.8.8
# 4. 关闭防火墙
#systemctl stop firewalld # 临时关闭防火墙
#systemctl disable firewalld # 禁止开机启动
# 5. 重启网络服务
#service network restart
2.安装redis
安装步骤:
# 安装gcc
yum install gcc
# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxvf redis-5.0.3.tar.gz
cd redis-5.0.3
# 进入到解压好的redis-5.0.3目录下,进行编译与安装
make
3.创建文件夹并先8001和8004创建redis.config文件
8004同8001
第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8001 8004
第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
(1)daemonize yes
(2)port 8001(分别对每个机器的端口号进行设置)
(3)pidfile /var/run/redis_8001.pid # 把pid进程号写入pidfile配置的文件
(4)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(5)cluster-enabled yes(启动集群模式)
(6)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
(7)cluster-node-timeout 10000
(8)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
(9)protected-mode no (关闭保护模式)
(10)appendonly yes
如果要设置密码需要增加如下配置:
(11)requirepass nickel(设置redis访问密码)
(12)masterauth nickel (设置集群节点间访问密码,跟上面一致)
4.启动redis服务
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8001/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8004/redis.conf
5.验证是否启动成功
ps -ef | grep redis
1.2.建立192.168.2.62Linux服务器
1.配置Linux服务器
# 在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件里做如下配置
TYPE=Ethernet # 网络类型为以太网
BOOTPROTO=static # 手动分配ip
DEVICE=eno16777736 # 网卡设备名,设备名一定要跟文件名一致
ONBOOT=yes # 该网卡是否随网络服务启动
IPADDR=192.168.2.62# 该网卡ip地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.2.1 # 网关
DNS1=8.8.8.8 # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址
# 2. 配置网络工作
在/etc/sysconfig/network文件里增加如下配置
NETWORKING=yes # 网络是否工作,此处一定不能为no
# 3. 配置公共DNS服务(可选)
在/etc/resolv.conf文件里增加如下配置
nameserver 8.8.8.8
# 4. 关闭防火墙
#systemctl stop firewalld # 临时关闭防火墙
#systemctl disable firewalld # 禁止开机启动
# 5. 重启网络服务
#service network restart
2.安装redis
安装步骤:
# 安装gcc
yum install gcc
# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxvf redis-5.0.3.tar.gz
cd redis-5.0.3
# 进入到解压好的redis-5.0.3目录下,进行编译与安装
make
3.创建文件夹并先8002和8005创建redis.config文件
8005同8002
第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8002 8005
第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
(1)daemonize yes
(2)port 8002(分别对每个机器的端口号进行设置)
(3)pidfile /var/run/redis_8002.pid # 把pid进程号写入pidfile配置的文件
(4)dir /usr/local/redis-cluster/8002/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(5)cluster-enabled yes(启动集群模式)
(6)cluster-config-file nodes-8002.conf(集群节点信息文件,这里800x最好和port对应上)
(7)cluster-node-timeout 10000
(8)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
(9)protected-mode no (关闭保护模式)
(10)appendonly yes
如果要设置密码需要增加如下配置:
(11)requirepass nickel(设置redis访问密码)
(12)masterauth nickel (设置集群节点间访问密码,跟上面一致)
4.启动redis服务
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8002/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8005/redis.conf
5.验证是否启动成功
ps -ef | grep redis
1.3.建立192.168.2.63Linux服务器
1.配置Linux服务器
# 在 /etc/sysconfig/network-scripts/ifcfg-eno16777736文件里做如下配置
TYPE=Ethernet # 网络类型为以太网
BOOTPROTO=static # 手动分配ip
DEVICE=eno16777736 # 网卡设备名,设备名一定要跟文件名一致
ONBOOT=yes # 该网卡是否随网络服务启动
IPADDR=192.168.2.63# 该网卡ip地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.2.1 # 网关
DNS1=8.8.8.8 # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址
# 2. 配置网络工作
在/etc/sysconfig/network文件里增加如下配置
NETWORKING=yes # 网络是否工作,此处一定不能为no
# 3. 配置公共DNS服务(可选)
在/etc/resolv.conf文件里增加如下配置
nameserver 8.8.8.8
# 4. 关闭防火墙
#systemctl stop firewalld # 临时关闭防火墙
#systemctl disable firewalld # 禁止开机启动
# 5. 重启网络服务
#service network restart
2.安装redis
安装步骤:
# 安装gcc
yum install gcc
# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar -zxvf redis-5.0.3.tar.gz
cd redis-5.0.3
# 进入到解压好的redis-5.0.3目录下,进行编译与安装
make
3.创建文件夹并先8003和8006创建redis.config文件
8006同8003
第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下
(1)mkdir -p /usr/local/redis-cluster
(2)mkdir 8003 8006
第一步:把之前的redis.conf配置文件copy到8003下,修改如下内容:
(1)daemonize yes
(2)port 8003(分别对每个机器的端口号进行设置)
(3)pidfile /var/run/redis_8003.pid # 把pid进程号写入pidfile配置的文件
(4)dir /usr/local/redis-cluster/8003/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(5)cluster-enabled yes(启动集群模式)
(6)cluster-config-file nodes-8003.conf(集群节点信息文件,这里800x最好和port对应上)
(7)cluster-node-timeout 10000
(8)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
(9)protected-mode no (关闭保护模式)
(10)appendonly yes
如果要设置密码需要增加如下配置:
(11)requirepass nickel(设置redis访问密码)
(12)masterauth nickel (设置集群节点间访问密码,跟上面一致)
4.启动redis服务
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8003/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8006/redis.conf
5.验证是否启动成功
ps -ef | grep redis
1.4.执行命令,创建redis cluster
/usr/local/redis-5.0.3/src/redis-cli -a nickel --cluster create --cluster-replicas 1 192.168.2.61:8001 192.168.2.62:8002 192.168.2.63:8003 192.168.2.61:8004 192.168.2.62:8005 192.168.2.63:8006
1.5.验证集群
/usr/local/redis-5.0.3/src/redis-cli -a nickel -c -h 192.168.2.61 -p 8001
cluster info
(1)连接任意一个客户端即可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)
如:/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.61 -p 800*
(2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis-5.0.3/src/redis-cli -a zhuge -c -h 192.168.0.60 -p 800* shutdown
1.6.java操作redis集群
1.导入pom文件
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
2.方法调用redis集群
package org.example;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class RedisClousterTest {
public static void main(String[] args) throws IOException {
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(20);
config.setMaxIdle(10);
config.setMinIdle(5);
Set<HostAndPort> jedisClusterNode=new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("192.168.2.61",8001));
jedisClusterNode.add(new HostAndPort("192.168.2.62",8002));
jedisClusterNode.add(new HostAndPort("192.168.2.63",8003));
jedisClusterNode.add(new HostAndPort("192.168.2.61",8004));
jedisClusterNode.add(new HostAndPort("192.168.2.62",8005));
jedisClusterNode.add(new HostAndPort("192.168.2.63",8006));
JedisCluster jedisCluster=null;
try {
jedisCluster=new JedisCluster(jedisClusterNode,6000,500,10,"nickel",config);
System.out.println(jedisCluster.set("cluster","nickel"));
System.out.println(jedisCluster.get("cluster"));
}catch (Exception e){
e.printStackTrace();
}finally {
if(jedisCluster!=null){
jedisCluster.close();
}
}
}
}
1.7.Spring Boot整合Redis集群
1.导入pom文件依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.配置application.yml文件
server:
port: 8080
spring:
redis:
database: 0
timeout: 3000
password: nickel
cluster:
nodes: 192.168.2.61:8001,192.168.2.62:8002,192.168.2.63:8003,192.168.2.61:8004,192.168.2.62:8005,192.168.2.63:8006
lettuce:
pool:
max-idle: 50
max-wait: 1000
min-idle: 10
max-active: 100
3.设置访问
package com.redis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestRedisCluster {
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
@Autowired
private StringRedisTemplate stringRedisTemplate;
@RequestMapping("/test_cluster")
public void testCluster() throws InterruptedException {
stringRedisTemplate.opsForValue().set("nickel", "666");
System.out.println(stringRedisTemplate.opsForValue().get("nickel"));
}
}
1.8.新增集群节点
1新增8007、8008集群节点文件夹
mkdir 8007 8008
2把从8001复制redis.conf到8007、8008文件夹中,并修改其中配置
8008同下
第一步:把之前的redis.conf配置文件copy到8003下,修改如下内容:
(1)daemonize yes
(2)port 8007(分别对每个机器的端口号进行设置)
(3)pidfile /var/run/redis_8007.pid # 把pid进程号写入pidfile配置的文件
(4)dir /usr/local/redis-cluster/8007/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
(5)cluster-enabled yes(启动集群模式)
(6)cluster-config-file nodes-8007.conf(集群节点信息文件,这里800x最好和port对应上)
(7)cluster-node-timeout 10000
(8)# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
(9)protected-mode no (关闭保护模式)
(10)appendonly yes
如果要设置密码需要增加如下配置:
(11)requirepass nickel(设置redis访问密码)
(12)masterauth nickel (设置集群节点间访问密码,跟上面一致)
3启动8007、8008配置文件
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8007/redis.conf
/usr/local/redis-5.0.3/src/redis-server /usr/local/redis-cluster/8008/redis.conf
ps -ef | grep redis
3把8007加入集群
##获取帮助
src/redis‐cli ‐‐cluster help
/usr/local/redis-5.0.3/src/redis-cli -a nickel --cluster add-node 192.168.1.61:8007 192.168.1.61:8001
4给8007分配槽位
/usr/local/redis-5.0.3/src/redis-cli -a nickel --cluster reshard 192.168.1.61 8001
How many slots do you want to move (from 1 to 16384)? 600
(ps:需要多少个槽移动到新的节点上,自己设置,比如600个hash槽)
What is the receiving node ID? 2728a594a0498e98e4b83a537e19f9a0a3790f38
(ps:把这600个hash槽移动到哪个节点上去,需要指定节点id)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node 1:all
(ps:输入all为从所有主节点(8001,8002,8003)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为600个)
... ...
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:输入yes确认开始执行分片任务)
... ...
4把8008分配位8007的slave
1.9.删除集群节点8
1.删除节点8008
/usr/local/redis-5.0.3/src/redis-cli -a nickel --cluster del-node 192.168.1.61:8008 73d19fc3ad290ae8e71dd41a370ab73896d01720
2.删除节点8007卡槽及8007节点
/usr/local/redis-5.0.3/src/redis-cli -a zhuge --cluster reshard 192.168.0.61:8007
/usr/local/redis-5.0.3/src/redis-cli -a nickel --cluster del-node 192.168.1.61:8007 d6c52d01ccfa8d69861132ebe6006727f436a1ea
... ...
How many slots do you want to move (from 1 to 16384)? 600
What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f
(ps:这里是需要把数据移动到哪?8001的主节点id)
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node 1:2728a594a0498e98e4b83a537e19f9a0a3790f38
(ps:这里是需要数据源,也就是我们的8007节点id)
Source node 2:done
(ps:这里直接输入done 开始生成迁移计划)
... ...
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
(ps:这里输入yes开始迁移)