一台机模拟 Cluster
Redis 集群中至少应该有三个节点(由投票机制决定的,节点的 fail 是通过集群中超过半数的节点检测失效时才生效)。要保证集群的高可用,需要每个节点有一个备份机。
Redis 集群至少需要 6 台服务器。
目的:
1.使用一台虚拟机运行6个redis实例。 2.需要修改redis的端口号7001-7006
1.环境准备
系统方面,我使用的是 Centos6.9
1.1 安装 redis 3.0.0
准备好 redis-3.0.0.tar.gz,
tar -xvf redis-3.0.0.tar.gz
cd redis-3.0.0
make
sudo make install PREFIX=/usr/local/redis
执行完后,/usr/local/redis/下应该就有 redis 相关命令了,
-rwxr-xr-x 1 root root 22193 Jul 1 11:16 redis-check-aof -rwxr-xr-x 1 root root 4588878 Jul 1 11:16 redis-benchmark -rwxr-xr-x 1 root root 45403 Jul 1 11:16 redis-check-dump -rwxr-xr-x 1 root root 4691793 Jul 1 11:16 redis-cli -rwxr-xr-x 1 root root 6450193 Jul 1 11:16 redis-sentinel -rwxr-xr-x 1 root root 6450193 Jul 1 11:16 redis-server -rw-r--r-- 1 root root 41402 Jul 1 12:27 redis.conf -rw-r--r-- 1 root root 769 Jul 1 14:08 nodes.conf
有了这些文件之后,我们就可以简单的来测试一下了。
1.2 运行 redis
需要先修改 redis.conf,将 daemonize
设为 yes,设置为后台运行
sudo vi /usr/local/redis/redis.conf
找到 daemonize,修改为 yes,保存退出,然后就可以运行 redis
cd /usr/local/redis/
sudo ./redis-server redis.conf
检查一下
ps -ef | grep -i redis
有以下内容则表示正常启动了
root 5190 0.1 0.3 33936 1712 ? Ssl 18:23 0:00 ./redis-server *:6379
这里没启成功的话,检查一下权限,权限不够启不起来的
1.3 测试 redis
执行 redis 目录下的 redis-cli 就可以了
cd /usr/local/redis/
sudo ./redis-cli [-h IP] -p 6379
-h:连接的服务器的地址 -p:服务的端口号
用本地 127.0.0.1 的话就不需要加-h IP 了。
127.0.0.1:6379> set str1 hello OK 127.0.0.1:6379> get str1 "hello" 127.0.0.1:6379> quit
这样就可以了,能存能取。
然后我们停掉这个 redis
sudo ./redis-cli -p 6379 shutdown
1.4 设置多节点
在一台机上部署集群的话,我们需要在一台机上弄 6 个 redis-server,
执行
cd /usr/local/
mkdir redis-cluster
sudo cp -r redis redis-cluster/redis01
这里需要检查一下redis01里有没有 dump.rdb,有的话就删了。
sudo cp -r redis01/ redis02
sudo cp -r redis01/ redis03
sudo cp -r redis01/ redis04
sudo cp -r redis01/ redis05
sudo cp -r redis01/ redis06
在这里还需要再复制一个文件 ,就从 redis 的源码包里取
sudo cp redis-3.0.0/src/redis-trib.rb /usr/local/redis-cluster/
复制完之后,每个 redis 的配置文件都要修改以下内容:
1.enable cluster cluster-enabled yes 2.修改端口 port 7001(按照123456这样分)
每个都弄好之后,我们就要启动他们了,怎么启动呢。可以写个脚本
sudo vi /usr/local/redis-cluster/start-all.sh
cd redis01 ./redis-server redis.conf cd .. cd redis02 ./redis-server redis.conf cd .. cd redis03 ./redis-server redis.conf cd .. cd redis04 ./redis-server redis.conf cd .. cd redis05 ./redis-server redis.conf cd .. cd redis06 ./redis-server redis.conf cd ..
保存退出后,赋予权限,
sudo chmod +x start-all.sh
执行
sudo ./start-all.sh
检查一下
ps -ef | grep -i redis
root 33946 1 0 14:07 ? 00:00:06 ./redis-server *:7001 [cluster] root 33950 1 0 14:07 ? 00:00:05 ./redis-server *:7002 [cluster] root 33954 1 0 14:07 ? 00:00:06 ./redis-server *:7003 [cluster] root 33956 1 0 14:07 ? 00:00:05 ./redis-server *:7004 [cluster] root 33962 1 0 14:07 ? 00:00:05 ./redis-server *:7005 [cluster] root 33964 1 0 14:07 ? 00:00:06 ./redis-server *:7006 [cluster] llq 34348 32038 0 15:47 pts/4 00:00:00 grep -i redis
有上面这些进程就代表成功了。下面可以做集群搭建了
2.集群搭建
2.1 安装软件
官方提供的脚本,是要用 ruby 执行的,所以需要安装 ruby
sudo yum install ruby
sudo yum install rubygems
sudo gem installredis-3.0.0.gem
这个 redis-3.0.0.gem 文件,从网上可以下载,也可以选择直接指定版本安装
gem install redis --version 3.0.0
注意:gem install redis --version 3.0.0 失败的话,需要修改一下 gem 的源
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem 安装完 redis 后,可以开始运行 ruby 脚本了。
2.2 运行集群
同样的,我们写个脚本,把命令保存起来,下次就不用再敲了。
cd /usr/local/redis-cluster
vi setup-cluster.sh
./redis-trib.rb create --replicas 1 192.168.200.128:7001 192.168.200.128:7002 192.168.200.128:7003 192.168.200.128:7004 192.168.200.128:7005 192.168.200.128:7006
同时顺便写个关闭集群的脚本
vi shutdown-all.sh
redis01/redis-cli -p 7001 shutdown redis01/redis-cli -p 7002 shutdown redis01/redis-cli -p 7003 shutdown redis01/redis-cli -p 7004 shutdown redis01/redis-cli -p 7005 shutdown redis01/redis-cli -p 7006 shutdown
好了,两个脚本都要赋予执行权限
sudo chmod +x shutdown-all.sh setup-cluster.sh
sudo ./setup-cluster.sh
具体跑的内容找不到了,随便贴一段,中间需要我们输入 yes 确认集群配置,yes 之后就完成了。
>>> Creating cluster Connecting to node 192.168.200.128:7001: OK Connecting to node 192.168.200.128:7002: OK Connecting to node 192.168.200.128:7003: OK Connecting to node 192.168.200.128:7004: OK Connecting to node 192.168.200.128:7005: OK Connecting to node 192.168.200.128:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.200.128:7001 192.168.200.128:7002 192.168.200.128:7003 Adding replica 192.168.200.128:7004 to 192.168.200.128:7001 Adding replica 192.168.200.128:7005 to 192.168.200.128:7002 Adding replica 192.168.200.128:7006 to 192.168.200.128:7003 M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.200.128:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.200.128:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.200.128:7003 slots:10923-16383 (5461 slots) master S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.200.128:7004 replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.200.128:7005 replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.200.128:7006 replicates 2935007902d83f20b1253d7f43dae32aab9744e6 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..... >>> Performing Cluster Check (using node 192.168.200.128:7001) M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.200.128:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.200.128:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.200.128:7003 slots:10923-16383 (5461 slots) master M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.200.128:7004 slots: (0 slots) master replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.200.128:7005 slots: (0 slots) master replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.200.128:7006 slots: (0 slots) master replicates 2935007902d83f20b1253d7f43dae32aab9744e6 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@localhost redis-cluster]#
下面我们可以写下代码测试一下集群
3 Jedis 测试集群
3.1 添加依赖
这里不写 maven 工程创建的了,自己搞定哈。
创建完 maven 工程后,在 pom.xml 中添加依赖
<!-- Redis客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <!-- 测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
创建一个 TestJedis.java,运行一下看看。
public class TestJedis { @Test public void testJedisCluster() throws Exception { //创建一个HostAndPort的Set集合 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.200.128",7001)); nodes.add(new HostAndPort("192.168.200.128",7002)); nodes.add(new HostAndPort("192.168.200.128",7003)); nodes.add(new HostAndPort("192.168.200.128",7004)); nodes.add(new HostAndPort("192.168.200.128",7005)); nodes.add(new HostAndPort("192.168.200.128",7006)); //创建一个JedisCluster对象,参数是HostAndPort的Set集合 JedisCluster jedisCluster = new JedisCluster(nodes); //使用JedisCluster对象查询 jedisCluster.set("jedis-cluster", "hello world"); System.out.println(jedisCluster.get("jedis-cluster")); //关闭jediscluster jedisCluster.close(); } }
到这里,简单的 redis 伪集群搭建就结束了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于