一、Redis集群部署
三台物理机:172.20.0.17、172.20.0.18、172.20.0.19
二、安装Redis
下载安装redis压缩包
解压压缩包,进入redis-5.0.2文件夹,运行命令./make install安装redis
mv redis-5.0.2 /usr/local/redis/
三、修改配置文件
node1--17服务器:
1、创建redis_cluster/700X的目录
mkdir -p /usr/local/redis/redis_cluster/7001
mkdir -p /usr/local/redis/redis_cluster/7002
2、修改Redis.conf的端口
cp redis.conf /usr/local/redis/redis_cluster/7001
修改端口为7001
cp redis.conf /usr/local/redis/redis_cluster/7002
修改端口为7002
3、同时将修改后的Redis.conf复制到另外两个节点(18、19)
4、将redis-server复制到节点目录下,方便操作
cp /usr/local/bin/redis-server /usr/local/redis/redis-5.0.2/redis_cluster/7001/
5、开启redis-cluster配置,配置做以下改造
#配置yes开启redis-cluster cluster-enabled yes #配置节点之间超时时间 cluster-node-timeout 15000 #这个配置很重要,cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败,最好按主机+端口命名 cluster-config-file nodes-17-7001.conf
四、启动各节点17、18、19Redis
cd /usr/local/redis/redis-5.0.2/redis_cluster/7001
./redis-server redis.conf
cd /usr/local/redis/redis-5.0.2/redis_cluster/7002
./redis-server redis.conf
五、创建集群命令
cd /usr/local/bin
./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 --cluster-replicas 1
(replicas
1 表示我们希望为集群中的每个主节点创建一个从节点。
如图即创建成功
后面有尝试做三组 一主两从 即:
./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 172.20.0.17:7003 172.20.0.18:7003 172.20.0.19:7003 --cluster-replicas 2
自动分配主从属性:
redis-cli -h 172.20.0.17 -p 7001 cluster nodes查看节点情况
master的node_id有对应的一个slave对应
六、测试Redis cluster
1、尝试给master 172.20.0.18:7001添加数据
可见数据存储在19:7001端口中,则19:7001的从节点18:7002也有数据
七、测试故障转移
在此测试期间,为了触发故障转移,我们可以做的最简单的事情(也就是在分布式系统中可能出现的语义上最简单的故障)是使单个进程崩溃
我们尝试将master 17:7001击溃
查看此时17:7001为master fail状态,而他的子节点19:7002从slave竞选为新的master;
重新启动17:7001节点,它才成为了slave节点
八、集群性能测试
因尝试使用官方推荐的bench-Mark 测试时,查看CPU占用只在对应槽片的哪台服务器上,此处引用Redis & Redis Cluster benchmark Tool
前往Git下载安装
https://github.com/panjiang/redisbench
-a string Redis instance address or Cluster addresses. IP:PORT[,IP:PORT] -c int Clients number for concurrence (default 1) -cluster true: cluster mode, false: instance mode -d int Data size in bytes (default 1000) -ma string addresses for run multiple testers at the same time -mo int the order current tester is in multiple testers -n int Testing times at every client (default 1)
Redis&Redis Cluster基准工具
- 写在Golang
- 可以测试redis单实例
- 可以测试redis集群
- 可以利用多核
- 支持同时在多台机器上运行,用于测试大型redis集群(需要相同的机器硬件)
救命
./redisbench -h
例
测试单个实例
./redisbench -a 127.0.0.1:6379 -c 500 -n 2000 -d 3
测试集群
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3
使用多个测试节点
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002 -mo 1&
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002 -mo 2
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 1 &
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 2 &
./redisbench -cluster=true -a 192.168.10.11:7000,192.168.10.11:7001 -c 500 -n 2000 -d 3 -ma 192.168.10.11:9001,192.168.10.11:9002,192.168.10.11:9003 -mo 3
测试结果会自动打印出:请求值,请求时间,TPS
附一张多客户端测试图