搭建完整的企业级Redis高可用集群(内容详细完备,开发收藏)
前置条件
CentOS7:10.180.101.138 (端口:33331,33334)
CentOS7:10.180.101.139 (端口:33332,33335)
CentOS7:10.180.101.137 (端口:33333,33336)
主备关系:
主 10.180.101.138:33331 => 备 10.180.101.138:33334 / 10.180.101.139:33335 / 10.180.101.137:33336
主 10.180.101.139:33332 => 备 10.180.101.138:33334 / 10.180.101.139:33335 / 10.180.101.137:33336
主 10.180.101.137:33333 => 备 10.180.101.138:33334 / 10.180.101.139:33335 / 10.180.101.137:33336
Redis安装 (10.180.101.138/139/137)
1. gcc版本升级
#yum -y install epel-release
#yum -y install centos-release-scl
#yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
#source /etc/profile
#gcc -v
2. 安装redis (生产环境)
#wget http://download.redis.io/releases/redis-6.0.12.tar.gz
#tar -zxvf redis-6.0.12.tar.gz
#cd redis-6.0.12
#make
#make install PREFIX=/usr/local/redis-6.0.12
3. 配置文件
#mkdir -p /data/redis/redis33331/{data,etc,log} && mkdir -p /data/redis/redis33334/{data,etc,log} (10.180.101.138上执行)
#mkdir -p /data/redis/redis33332/{data,etc,log} && mkdir -p /data/redis/redis33335/{data,etc,log} (10.180.101.139上执行)
#mkdir -p /data/redis/redis33333/{data,etc,log} && mkdir -p /data/redis/redis33336/{data,etc,log} (10.180.101.137上执行)
10.180.101.138上的配置如下(139和137类似)
#cp redis-6.0.12/redis.conf /data/redis/redis33331/etc
#vim /data/redis/redis33331/etc/redis.conf 修改:
bind 10.180.101.138
protected-mode yes #yes:内网访问,no:外网访问
port 33331
daemonize yes #守护线程模式(后台模式)
pidfile /var/run/redis_33331.pid
logfile "/data/redis/redis33331/log/33331.log"
dbfilename dump-33331.rdb
dir /data/redis/redis33331/data/ #数据库写入目录
appendfilename "appendonly-33331.aof"
cluster-enabled yes #开启集群
cluster-config-file nodes-33331.conf
cluster-node-timeout 15000 #节点请求超时时间,默认值15000
requirepass 123456 #设置密码
#cp redis-6.0.12/redis.conf /data/redis/redis33334/etc
#vim /data/redis/redis33334/etc/redis.conf 文件按照如上做参数修改(所有33331修改为33334)
4. 启动实例
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33331/etc/redis.conf (10.180.101.138上执行)
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33334/etc/redis.conf (10.180.101.138上执行)
#vim /etc/rc.d/rc.local 添加:
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33331/etc/redis.conf
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33334/etc/redis.conf
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33332/etc/redis.conf (10.180.101.139上执行)
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33335/etc/redis.conf (10.180.101.139上执行)
#vim /etc/rc.d/rc.local 添加:
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33332/etc/redis.conf
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33335/etc/redis.conf
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33333/etc/redis.conf (10.180.101.137上执行)
#/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33336/etc/redis.conf (10.180.101.137上执行)
#vim /etc/rc.d/rc.local 添加:
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33333/etc/redis.conf
/usr/local/redis-6.0.12/bin/redis-server /data/redis/redis33336/etc/redis.conf
5. 创建集群
#/usr/local/redis-6.0.12/bin/redis-cli --cluster create \
10.180.101.138:33331 \
10.180.101.139:33332 \
10.180.101.137:33333 \
10.180.101.137:33336 \
10.180.101.138:33334 \
10.180.101.139:33335 --cluster-replicas 1 -a 123456
Adding replica 10.180.101.139:33335 to 10.180.101.138:33331
Adding replica 10.180.101.137:33336 to 10.180.101.139:33332
Adding replica 10.180.101.138:33334 to 10.180.101.137:33333
M: ff2703ce0a6291719f4a1fcf75968610dc3b0aab 10.180.101.138:33331
slots:[0-5460] (5461 slots) master
M: 6e6e97d9f3b9e24930958e5be9dd10acfd544e21 10.180.101.139:33332
slots:[5461-10922] (5462 slots) master
M: bbc2b46b00207b13040d2cba7ad2048fa8a08adf 10.180.101.137:33333
slots:[10923-16383] (5461 slots) master
S: 8a3eabd87349d62434fa312a75f98b1d55006c6f 10.180.101.137:33336
replicates 6e6e97d9f3b9e24930958e5be9dd10acfd544e21
S: 55c4dbd5b937f2e8b722fcb99ece629a7f91122c 10.180.101.138:33334
replicates bbc2b46b00207b13040d2cba7ad2048fa8a08adf
S: c751d57a1725431c44b0d6dc95ccc0605e467112 10.180.101.139:33335
replicates ff2703ce0a6291719f4a1fcf75968610dc3b0aab
随机分配主从关系:
10.180.101.139:33335(从) 分配给 10.180.101.138:33331 (主)
10.180.101.137:33336(从) 分配给 10.180.101.139:33332(主)
10.180.101.138:33334 (从)分配给 10.180.101.137:33333(主)
注: –cluster-replicas后面的参数是每个主节点对应的从节点的数量,-a 输入访问密码
期间会询问你是否使用上述配置,输入yes即可。如果出现一直卡在“Waiting for the cluster to join”,需要把与服务器上集群总线端口打开(客户端连接的端口 + 10000),例如客户端端口7000,则总线端口17000。
6. 测试
#/usr/local/redis-6.0.12/bin/redis-cli -c -h 10.180.101.138 -p 33331 -a 123456 ( -c 代表使用cluster模式)
10.180.101.138:33331> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1067
cluster_stats_messages_pong_sent:1139
cluster_stats_messages_sent:2206
cluster_stats_messages_ping_received:1134
cluster_stats_messages_pong_received:1067
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2206
10.180.101.138:33331> set foo bar
-> Redirected to slot [12182] located at 10.180.101.137:33333
OK
10.180.101.137:33333> get foo
"bar"
10.180.101.137:33333> del foo
(integer) 1
10.180.101.137:33333> get foo
(nil)
