一、环境需要
1、Centos7.5以上环境,关闭防火墙和SELinux,配置本地YUM源环境,服务器安装gcc,服务器之间时间保持一致。
列出测试环境服务器:
10.1.5.246 master1
10.1.5.245 node1
10.1.5.244 node2
2、源码软件包
redis-5.0.9.tar.gz
二、Redis集群安装
1、redis软件包,解压缩
tar -xvf redis-5.0.9.tar.gz
mv redis-5.0.9 redis
2、redis环境编译
cd redis
make
3、创建集群配置目录,端口7000-7005,每个节点2个实例目录,例如
mkdir -p cluster/{7000,7001,7002,7003,7004,7005}
4、配置redis集群,配置如下信息
把配置文件写入到集群配置目录,端口设置根据不同目录配置不同端口和根据实例IP进行配置,
cluster/7000/redis.conf,其它节点请配置对应的IP和端口,如下是根据官网做了最小化配置
bind 10.1.5.244
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
requirepass password
masterauth password
daemonize yes
pidfile /var/run/redis_7000.pid
dir /root/redis/data/
4、传输所有文件到其它节点
scp -r redis node1:/root
scp -r redis node2:/root
5、redis集群做为3主3从的模式启动,每个节点启动2个实例,每个实例对应一个端口,如下为master1节点
cd /root/redis/
./src/redis-server cluster/7000/redis.conf
./src/redis-server cluster/7001/redis.conf
6、创建集群并初始化
./src/redis-cli --cluster create 10.1.5.244:7000 10.1.5.244:7001 10.1.5.245:7002 10.1.5.245:7003 10.1.5.246:7004 10.1.5.246:7005 --cluster-replicas 1 -a "password"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.1.5.245:7003 to 10.1.5.244:7000
Adding replica 10.1.5.246:7005 to 10.1.5.245:7002
Adding replica 10.1.5.244:7001 to 10.1.5.246:7004
M: 6c73973f5cc044695519bd554060ba64ba6d7839 10.1.5.244:7000
slots:[0-5460] (5461 slots) master
S: cde810608f3e03394dd555d14be1f9f82cc333be 10.1.5.244:7001
replicates 0c54068e698e8181933969bc41e5bea0b9a0ecb3
M: b09336e44261a0c6718d1fe36c7f695fbca230e8 10.1.5.245:7002
slots:[5461-10922] (5462 slots) master
S: 325b4ae0b481b559d4200931e5701a11ed95b313 10.1.5.245:7003
replicates 6c73973f5cc044695519bd554060ba64ba6d7839
M: 0c54068e698e8181933969bc41e5bea0b9a0ecb3 10.1.5.246:7004
slots:[10923-16383] (5461 slots) master
S: 2c3e5e7f0a8a8daf604f375f8355324fab6c043a 10.1.5.246:7005
replicates b09336e44261a0c6718d1fe36c7f695fbca230e8
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 10.1.5.244:7000)
M: 6c73973f5cc044695519bd554060ba64ba6d7839 10.1.5.244:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 2c3e5e7f0a8a8daf604f375f8355324fab6c043a 10.1.5.246:7005
slots: (0 slots) slave
replicates b09336e44261a0c6718d1fe36c7f695fbca230e8
S: 325b4ae0b481b559d4200931e5701a11ed95b313 10.1.5.245:7003
slots: (0 slots) slave
replicates 6c73973f5cc044695519bd554060ba64ba6d7839
M: 0c54068e698e8181933969bc41e5bea0b9a0ecb3 10.1.5.246:7004
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: b09336e44261a0c6718d1fe36c7f695fbca230e8 10.1.5.245:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: cde810608f3e03394dd555d14be1f9f82cc333be 10.1.5.244:7001
slots: (0 slots) slave
replicates 0c54068e698e8181933969bc41e5bea0b9a0ecb3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7、好了集群已经搭建完毕,可以通过命令行或者其它工具进行验证。
注:平时我们会遇到清理数据库信息的情况,由于redis的机制,无法一次性删除所有节点的数据,需要每个实例连接执行flushall操作清理所有实例的数据。
8、登录查看cluster nodes
./src/redis-cli -c -h 10.1.5.244 -p 7000 -a password
cluster nodes
set a 'a'
get a
9、关闭redis节点,查看数据是否可以获取
ps -ef|grep redis
[root@node2 ~]# ps -ef|grep redis
root 6386 1 0 11:29 ? 00:01:10 ./src/redis-server 10.1.5.244:7000 [cluster]
root 6487 1 0 13:31 ? 00:00:21 ./src/redis-server 10.1.5.244:7001 [cluster]
root 6555 6058 0 14:35 pts/0 00:00:00 grep --color=auto redis
kill -9 6386
10、redis客户端连接,查看是否能继续获取a值
./src/redis-cli -c -h 10.1.5.245 -p 7002 -a password
cluster nodes
get a
注:以上如果获取到a值,那么集群ha搭建成功。