搭建环境 CentOS7 , Redis4.01
Redis集群正常工作至少需要3个节点,为了实现高可用,每个 Master 节点要配备至少 1 个 Slave 节点。所以需要部署6个redis。
为了写这篇实战教程,根据我的笔记本性能,只够建3个虚拟机(实际应用需准备6台机器或虚拟机),所有1个虚拟机装了2个redis。
192.168.43.129:7111 ;
192.168.43.130:7112 ;
192.168.43.131:7113 ;
192.168.43.129:7114 ;
192.168.43.130:7115 ;
192.168.43.131:7116 ;
一. 防火墙中打开相应的端口
每个redis需要打开服务端口和集群通讯端口(服务端口+10000)
192.168.43.129
#Master1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17111 -j ACCEPT
#Slave1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7114 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17114 -j ACCEPT
192.168.43.130
#Master2
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7112 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17112 -j ACCEPT
#Slave2
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7115 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17115 -j ACCEPT
192.168.43.131
#Master3
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7113 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17113 -j ACCEPT
#Slave3
-A INPUT -m state --state NEW -m tcp -p tcp --dport 7116 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 17116 -j ACCEPT
二. 安装Redis
(1)下载解压安装文件
# cd /home/zsg/Downloads
下载或上传最新的redis-4.0.1.tar.gz
解压
tar -zxvf redis-4.0.1.tar.gz
进入解压目录
cd redis-4.0.1
(2)安装redis节点
创建Master安装目录:
mkdir /home/zsg/program/redis-cluster/7111
安装(使用 PREFIX 指定安装目录):
make PREFIX=/home/zsg/program/redis-cluster/7111 install
安装完成后,可以看到/home/zsg/program/redis-cluster/7111 目录下有一个 bin 目录,bin 目录里就是 redis 的命令脚本:
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
(3)安装其他redis节点
创建安装目录:
mkdir /home/zsg/program/redis-cluster/7115
make PREFIX=/home/zsg/program/redis-cluster/7115 install
或者直接把已创建节点的bin目录直接拷贝到7115目录下
三. redis配置文件
(1)拷贝 redid.conf 配置文件到各节点配置目录:
192.168.43.129
cd /home/zsg/program/redis-cluster/7111/
mkdir conf #配置文件存放目录
mkdir data #节点数据持久化存放目录
另外5个节点类似。
(2)修改配置
vi redis-7111.conf
修改下列值
a) port 7111 #监听端口,默认为 6379 注意:集群通讯端口值默认为此端口值+10000,如17111
c) pidfile /var/run/redis-7111.pid 如以后台进程运行,则需指定一个 pid, 默认为/var/run/redis.pid
d) databases 1 #可用数据库数,默认值为 16,默认数据库存储在 DB 0号 ID 库中,无特殊需求,建议仅设置一个数据库 databases 1
e) cluster-enabled yes #打开 redis 集群
f) cluster-config-file /home/zsg/program/redis-cluster/7111/conf/nodes.conf #集群配置文件(启动自动生成)
g) cluster-node-timeout 15000 #节点互连超时时间。毫秒
h) cluster-migration-barrier 1 # 数据迁移的副本临界数,这个参数表示的是,一个主节点在拥有多少个好的从节点的时候就要割让一个从节点出来给另一个没有任何从节点的主节点。
i) cluster-require-full-coverage yes #如果某一些 key space 没有被集群中任何节点覆盖,集群将停止接受写入。
j) appendonly yes #启用 aof 持久化方式 ,因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为 no
k) dir /home/zsg/program/redis-cluster/7111/data #节点数据持久化存放目录(建议配置)
l) bind 192.168.43.129 #绑定ip
其他几个个redis的conf文件都类似修改。
四. 启动6个redis
使用如下命令启动这 6 个 Redis 节点实例:
192.168.43.129
/home/zsg/program/redis-cluster/7111/bin/redis-server /home/zsg/program/redis-cluster/7111/conf/redis-7111.conf
/home/zsg/program/redis-cluster/7114/bin/redis-server /home/zsg/program/redis-cluster/7114/conf/redis-7114.conf
192.168.43.130
/home/zsg/program/redis-cluster/7112/bin/redis-server /home/zsg/program/redis-cluster/7112/conf/redis-7112.conf
/home/zsg/program/redis-cluster/7115/bin/redis-server /home/zsg/program/redis-cluster/7115/conf/redis-7115.conf
192.168.43.131
/home/zsg/program/redis-cluster/7113/bin/redis-server /home/zsg/program/redis-cluster/7113/conf/redis-7113.conf
/home/zsg/program/redis-cluster/7116/bin/redis-server /home/zsg/program/redis-cluster/7116/conf/redis-7116.conf
启动之后用 PS 命令查看实例启动情况:
ps -ef | grep redis
zsg 3055 1 0 18:51 ? 00:00:00 /home/zsg/program/redis-cluster/7111/bin/redis-server 127.0.0.1:7111 [cluster]
zsg 3062 1 0 18:51 ? 00:00:00 /home/zsg/program/redis-cluster/7114/bin/redis-server 127.0.0.1:7114 [cluster]
zsg 2971 1 0 18:52 ? 00:00:00 /home/zsg/program/redis-cluster/7112/bin/redis-server 127.0.0.1:7112 [cluster]
zsg 2976 1 0 18:53 ? 00:00:00 /home/zsg/program/redis-cluster/7115/bin/redis-server 127.0.0.1:7115 [cluster]
zsg 3034 1 0 18:54 ? 00:00:00 /home/zsg/program/redis-cluster/7113/bin/redis-server 127.0.0.1:7113 [cluster]
zsg 3039 1 0 18:54 ? 00:00:00 /home/zsg/program/redis-cluster/7116/bin/redis-server 127.0.0.1:7116 [cluster]
注意:启动完毕后,6 个 Redis 实例尚未构成集群。
五. 安装ruby
(1)安装 ruby 和 rubygems(注意:需要 ruby 的版本在 1.8.7 以上)
# yum install ruby rubygems
(2)检查 ruby 版本:
# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
六. 执行 Redis 集群创建命令(只需要在其中一个节点上执行一次则可)
# cd /home/zsg/Downloads/redis-4.0.1/src/
# cp redis-trib.rb /usr/local/bin/redis-trib
#cd /usr/local/bin/
# redis-trib create --replicas 1 192.168.1.114:7114 192.168.1.115:7115 192.168.1.116:7116 192.168.1.111:7111 192.168.1.112:7112 192.168.1.113:7113
(输入 yes 并按下回车确认之后,集群就会将配置应用到各个节点,并连接起(join)各个节点,也就是让各个节点开始互相通讯)
最后一行信息表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
集群创建过程说明:
(1) 给定 redis-trib 程序的命令是 create , 这表示我们希望创建一个新的集群;
(2) 这里的 --replicas 1 表示每个主节点下有一个从节点;
(3) 之后跟着的其它参数则是实例的地址列表,程序使用这些地址所指示的实例来创建新集群;
总的来说,以上命令的意思就是让 redis-trib 程序创建一个包含三个主节点和三个从节点的集群。
接着,redis-trib 会打印出一份预想中的配置给你看,如果你觉得没问题的话(注意核对主从关系是否是你想要的),就可以输入 yes , redis-trib 就会将这份配置应用到集群当中。
七. 集群简单测试
使用 redis-cli 命令进入集群环境
[root@zk-01 bin]# ./redis-cli -c -h 192.168.43.129 -p 7114
192.168.43.129:7114> set abc 123
-> Redirected to slot [7638] located at 192.168.43.130:7112
OK
[zsg@zk-02 bin]$ ./redis-cli -c -h 192.168.43.131 -p 7116
192.168.43.131:7116> get abc
-> Redirected to slot [7638] located at 192.168.43.130:7112
"123"
192.168.43.130:7112> cluster nodes
5c79247450245f1162062c94fada7ab65ae1347d 192.168.43.131:7116@17116 slave 63021ae07a2300cd105f08ffef271f85c6399714 0 1501510141378 6 connected
6ca90f5e468a5ad9f540fabdc8d2ed8c381c9261 192.168.43.129:7111@17111 master - 0 1501510143440 1 connected 0-5460
27a862b84353b92acd8c3cb49fd2582d203dd82b 192.168.43.129:7114@17114 slave b4509ff7ab836d5582d14f3502d7cc3abda892a7 0 1501510140275 4 connected
b4509ff7ab836d5582d14f3502d7cc3abda892a7 192.168.43.130:7112@17112 myself,master - 0 1501510137000 2 connected 5461-10922
63021ae07a2300cd105f08ffef271f85c6399714 192.168.43.131:7113@17113 master - 0 1501510142412 3 connected 10923-16383
1fb7c40d07fdb7a4708e98102c35f2e20128e252 192.168.43.130:7115@17115 slave 6ca90f5e468a5ad9f540fabdc8d2ed8c381c9261 0 1501510139000 5 connected