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"));
}
}