redis集群:
- 这里是2台机器模拟6个节点,如果机器多,可以按照说明配置多台机器
- 下载并编译好单个redis,路径如下:
/usr/local/redis/
- 下载
redis-4.0.0.gem
到上述目录
安装ruby并升级
yum install ruby -y
yum install rubygems -y
#查看ruby版本, 需要升级到2.0以上
ruby -v
# ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
# 执行以下操作
gem sources -a http://mirrors.aliyun.com/rubygems/
yum install curl -y
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
# 出现带黄色字体的信息表示安装成功
# 安装2.3版
source /usr/local/rvm/scripts/rvm
rvm list known
rvm install 2.3.3
rvm use 2.3.3
rvm remove 1.8.7
ruby -v
配置redis集群
# 节点1创建集群目录
mkdir /usr/local/redis-clustor/
# 在redis-clustor目录下创建redis节点目录
mkdir /usr/local/redis-clustor/redis01
mkdir /usr/local/redis-clustor/redis02
mkdir /usr/local/redis-clustor/redis03
# 另外一个节点2执行相同操作,redis节点为4,5,6
# 进入/usr/local/redis/,即编译好的redis目录,将src目录下的文件考入各个redis节点
redis-check-aof
redis-cli
redis-sentinel
redis-benchmark
redis-check-rdb
redis.conf
redis-server
# 注意是将redis/src/目录下上述文件拷贝到redis-clustor/redis01/2/3/4/5/6,都要拷贝
# 修改redis集群各个节点配置文件
vim redis01/redis.conf
# 主要修改4个地方
bind ip # (当前redis节点所在机器的ip,不能是127.0.0.1)
port 7001 # 6个redis节点,依次改为7001-7006
daemonize yes # 后台启动
protected-mode no # 关闭保护模式
cluster-enabled yes # 开启集群模式
cluster-config-file 1367004.conf # 集群配置文件,每个redis节点各自命名,最好是ip+端口
# 将redis/src目录下redis-trib.rb拷贝到redis-cluster/下。
# 此时两台机器的redis-cluster/下应该分别为:
drwxr-xr-x. 2 root root 152 Mar 8 19:49 redis01
drwxr-xr-x. 2 root root 152 Mar 8 19:41 redis02
drwxr-xr-x. 2 root root 152 Mar 8 19:41 redis03
-rwxr-xr-x. 1 root root 65991 Mar 8 19:12 redis-trib.rb
drwxr-xr-x. 2 root root 152 Mar 8 21:12 redis04
drwxr-xr-x. 2 root root 152 Mar 8 19:42 redis05
drwxr-xr-x. 2 root root 152 Mar 8 19:42 redis06
-rwxr-xr-x. 1 root root 65991 Mar 8 19:34 redis-trib.rb
# 启动所有redis节点,可以一个一个启也可以自己写脚本一起启动
redis01/redis-server redis01/redis.conf
redis02/redis-server redis02/redis.conf
redis03/redis-server redis03/redis.conf
redis04/redis-server redis04/redis.conf
redis05/redis-server redis05/redis.conf
redis06/redis-server redis06/redis.conf
# 查看进程,两台机器应该各有三个
ps -ef | grep redis
root 38870 1 0 20:02 ? 00:00:07 redis01/redis-server 10.205.40.135:7001 [cluster]
root 38872 1 0 20:02 ? 00:00:07 redis02/redis-server 10.205.40.135:7002 [cluster]
root 38877 1 0 20:02 ? 00:00:06 redis03/redis-server 10.205.40.135:7003 [cluster]
root 38870 1 0 20:02 ? 00:00:07 redis01/redis-server 10.205.40.135:7001 [cluster]
root 38872 1 0 20:02 ? 00:00:07 redis02/redis-server 10.205.40.135:7002 [cluster]
root 38877 1 0 20:02 ? 00:00:06 redis03/redis-server 10.205.40.135:7003 [cluster]
# 然后在任意一台机器的redis-cluster/目录下执行:
./redis-trib.rb create --replicas 1 IP:7001 IP:7002 IP:......
# 显示这个表示开始连接集群
>>> Creating cluster
# 如果一直显示等待节点加入,需要关闭防火墙
service iptables stop
service firewalld stop
# 如果创建失败,要关闭所有redis进程,删除当前目录下redis集群节点的配置文件
# 即之前设置的ip+端口.conf文件
# 然后重新启动6台redis和创建集群命令
# 创建成功后可以在任意一台机器访问任意一个redis节点
redis01/redis-cli -h ip -p 7002 -c
idea使用jedis连接池访问redis集群
# pom依赖
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
# java代码
public static void main(String[] args) {
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
config.setMaxTotal(30);
config.setMaxWaitMillis(2000);
Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
jedisClusterNode.add(new HostAndPort("10.205.40.135", 7001));
jedisClusterNode.add(new HostAndPort("10.205.40.135", 7002));
jedisClusterNode.add(new HostAndPort("10.205.40.135", 7003));
jedisClusterNode.add(new HostAndPort("10.205.40.136", 7004));
jedisClusterNode.add(new HostAndPort("10.205.40.136", 7005));
jedisClusterNode.add(new HostAndPort("10.205.40.136", 7006));
JedisCluster jc = new JedisCluster(jedisClusterNode, config);
jc.set("52", "poolTestValue2");
jc.set("53", "poolTestValue2");
System.out.println(jc.get("52"));
System.out.println(jc.get("53"));
try {
jc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
网友评论