产品集群部署(单redis部署)
产品集群需要redis支持,redis部署分为两种。一种是单redis部署,适应于可靠性要求不高的场景;一种是redis哨兵部署,适应于可靠性要求非常高的场景;本章讲解单redis部署的情况
集群场景说明
集群4个节点部署在两台服务器上,对应的服务器IP、端口、工作目录如下。Redis单独一台服务器部署。以双机双节点的配置ABI集群为例,说明在ABI中如何配置集群。
物理机器 | 节点名称 | IP地址 | 端口号 | 工作目录 |
|---|---|---|---|---|
Machine1 | Server1(主控) | 172.21.160.1 | 9001 | /work_dir/ABIrootdir1/ |
Machine1 | Server2 | 172.21.160.1 | 9002 | /work_dir/ABIrootdir2/ |
Machine2 | Server3 | 172.21.160.2 | 9003 | /work_dir/ABIrootdir3/ |
Machine2 | Server4 | 172.21.160.2 | 9004 | /work_dir/ABIrootdir4/ |
物理机器 | 安装软件 | IP地址 | 端口号 |
|---|---|---|---|
Machine3 | Redis | 192.168.1.103 | 6379 |
工作目录指定
涉及到集群的工作目录指定,每个节点必须指定一个单独的工作目录,而且多节点不能同时使用同一个工作目录。
指定工作目录需要在中间件启动文件设置,在Server1的启动文件中设置:
-Desen.abi.workdir =/work_dir/ABIrootdir1
在Server2的启动文件中设置:
-Desen.abi.workdir =/work_dir/ABIrootdir2
在Server3的启动文件中设置:
-Desen.abi.workdir =/work_dir/ABIrootdir3
在Server4的启动文件中设置:
-Desen.abi.workdir =/work_dir/ABIrootdir4
JVM参数设置
节点名称 | 参数设置 | 备注 |
|---|---|---|
Server1 | -Desen.abi.workdir=/work_dir/ABIrootdir1 -Djava.awt.headless=true -Duser.timezone=Asia/Shanghai -Dfile.encoding=GBK -Dsun.jnu.encoding=GBK -Xms4096m -Xmx8192m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true | -Xmx和-Xms根据服务器内存大小设置,64位OS建议分配8G-16G 注:jdk1.8开始取消了PermGen,取而代之的是Metaspace,需要将PermSize改为MetaspaceSize,如下:-XX:MetaspaceSize=256m -XX: MetaspaceSize =512m |
Server2 | -Desen.abi.workdir=/work_dir/ABIrootdir2 -Djava.awt.headless=true -Duser.timezone=Asia/Shanghai -Dfile.encoding=GBK -Dsun.jnu.encoding=GBK -Xms4096m -Xmx8192m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true | 同上 |
Server3 | -Desen.abi.workdir=/work_dir/ABIrootdir3 -Djava.awt.headless=true -Duser.timezone=Asia/Shanghai -Dfile.encoding=GBK -Dsun.jnu.encoding=GBK -Xms4096m -Xmx8192m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true | 同上 |
Server4 | -Desen.abi.workdir=/work_dir/ABIrootdir4 -Djava.awt.headless=true -Duser.timezone=Asia/Shanghai -Dfile.encoding=GBK -Dsun.jnu.encoding=GBK -Xms4096m -Xmx8192m -XX:PermSize=256m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true | 同上 |
Redis安装
Redis支持32位和64位的Windows和Linux操作系统。
- Windows下安装redis
下载地址:https://github.com/MSOpenTech/redis/releases
图1 Redis安装
根据需要选择合适版本的Redis,下载zip包,下载完成后解压缩,会得到一个redis-server.exe。下载完成后,双击安装,安装完成后,启动服务即可
使用客户端测试连接:redis-desktop-manager-0.9.3.817.exe
其实Redis在Windows上不需要安装,在命令行下执行这个redis-server.exe,就会启动redis服务,启动后不要关闭这个命令行窗口,关闭它服务就停止了。
- Linux下安装redis(支持国产CPU,如:鲲鹏、龙芯等)
redis在linux下的安装使用包管理器来安装即可,对于没有外网的环境也可以复制压缩包,解压后手动安装。
安装
# wget http://download.redis.io/releases/redis-5.0.5.tar.gz # tar -zxf redis-5.0.5.tar.gz # cd redis-5.0.5 # make # make install
启动;编译完成以后,启动 redis-server
# cd src # ./redis-server ../redis.conf &
访问redis
用自带的redis-cli客户端工具就可以访问Redis服务器了。
Redis的默认服务端口是6379
# redis-cli 127.0.0.1:6379>
Redis配置文件说明
Redis的配置文件Redis.conf在Redis的安装目录下,里面有很多关于Redis的设置。用户可以通过直接修改文件更改配置,也可以通过命令像设置key-value数据库一样修改配置
config get xxx //获取某一个配置的值 config set xxx xxx //设置某一项配置 config get * 获取所有配置
建议直接修改配置文件,因为通过命令修改,重启Redis后就会失效。
表4 主要配置参数列表 参数
值
描述
port
6379
redis的端口
bind
127.0.0.1
绑定的ip地址,默认是127.0.0.1 。
如果本机有多个网卡,且限制只能通过其中一个网卡对应的IP才能访问redis时,可绑定该IP,例:bind IP
protected-mode
yes
保护模式,默认为yes,如果要其他网络能访问,改为no即可
requirepass
-
登录密码,默认是空
maxclients
0
同一时间能够连接到redis的客户端数量,默认是无限制,0表示不限制
maxmemory
-
redis能够使用的最大内存 单位byte, 默认无限制
建议修改如下,如果考虑安全性,设置密码即可:
图2 设置密码
部署包和产品注册和配置
当在所有节点部署ABI包后,需要分别访问下列地址完成产品的注册。
http://172.21.160.1:9001/ABI
http://172.21.160.1:9002/ABI
http://172.21.160.2:9003/ABI
http://172.21.160.2:9004/ABI
在所有4个节点均完成注册后,分别登录所有节点,确认所有节点可以单独访问。
集群文件配置
停掉所有服务器,分别在各个工作目录的conf文件夹中放置cluster.properties,其中Server1为主控节点
节点名称 | 配置内容 |
|---|---|
Server1 | #charset UTF-8 #必须配置的属性: cluster.enabled=true cluster.iscontrol=true cluster.type=redis cluster.group=group1 cluster.nodeid=node1 cluster.name=测试集群节点1 #单redis连接配置方式 cluster.redis.ip=192.168.1.103 cluster.redis.port=6379 #视情况配置的属性: #如果redis设置了密码,则配置 #cluster.redis.password=123 #可以不配置的属性: #集群服务器与redis最大时间差 默认120s #cluster.health.maxtimegap=120 #两次心跳间隔时间默认3s #cluster.health.interval=3000 #离开时间间隔算离开 默认30s #cluster.health.leavetime=30 #加入时间算加入 默认8s #cluster.heath.jointime=8 #是否使用连接池 #cluster.redis.usepool=false |
Server2 | #charset UTF-8 #必须配置的属性: cluster.enabled=true cluster.iscontrol=false cluster.type=redis cluster.group=group1 cluster.nodeid=node2 cluster.name=测试集群节点2 #单redis连接配置方式 cluster.redis.ip=192.168.1.103 cluster.redis.port=6379 #视情况配置的属性: #如果redis设置了密码,则配置 #cluster.redis.password=123 #可以不配置的属性: #集群服务器与redis最大时间差 默认120s #cluster.health.maxtimegap=120 #两次心跳间隔时间默认3s #cluster.health.interval=3000 #离开时间间隔算离开 默认30s #cluster.health.leavetime=30 #加入时间算加入 默认8s #cluster.heath.jointime=8 #是否使用连接池 #cluster.redis.usepool=false |
Server3 | #charset UTF-8 #必须配置的属性: cluster.enabled=true cluster.iscontrol=false cluster.type=redis cluster.group=group1 cluster.nodeid=node3 cluster.name=测试集群节点3 #单redis连接配置方式 cluster.redis.ip=192.168.1.103 cluster.redis.port=6379 #视情况配置的属性: #如果redis设置了密码,则配置 #cluster.redis.password=123 #可以不配置的属性: #集群服务器与redis最大时间差 默认120s #cluster.health.maxtimegap=120 #两次心跳间隔时间默认3s #cluster.health.interval=3000 #离开时间间隔算离开 默认30s #cluster.health.leavetime=30 #加入时间算加入 默认8s #cluster.heath.jointime=8 #是否使用连接池 #cluster.redis.usepool=false |
Server4 | #charset UTF-8 #必须配置的属性: cluster.enabled=true cluster.iscontrol=false cluster.type=redis cluster.group=group1 cluster.nodeid=node4 cluster.name=测试集群节点4 #单redis连接配置方式 cluster.redis.ip=192.168.1.103 cluster.redis.port=6379 #视情况配置的属性: #如果redis设置了密码,则配置 #cluster.redis.password=123 #可以不配置的属性: #集群服务器与redis最大时间差 默认120s #cluster.health.maxtimegap=120 #两次心跳间隔时间默认3s #cluster.health.interval=3000 #离开时间间隔算离开 默认30s #cluster.health.leavetime=30 #加入时间算加入 默认8s #cluster.heath.jointime=8 #是否使用连接池 #cluster.redis.usepool=false |
配置文件中参数说明:
参数名 | 描述 | 例子 |
|---|---|---|
cluster.enabled | 是否启用集群 | 默认false不启用 |
cluster.nodeid | 集群节点id | node1 |
cluster.name | 集群节点名称 | 测试集群节点1 |
cluster.type | 集群类型(redis:redis集群,netty:netty集群) | redis,默认使用redis |
cluster.message.retry | 消息发送失败后重发次数 | 3 |
cluster.health.interval | 心跳时间间隔(单位:毫秒) | 1500,默认1500 |
cluster.health.retry | 集群节点离线时重试次数,即连续几次没有收到心跳则判定节点离线 | 3 |
cluster.heath.rejoin | 集群节点离线后重新加入重试次数,即集群节点连续几次都受到心跳消息则判定节点加入 | 3 |
cluster.redis.ip | redis ip | 172.21.1.65 |
cluster.redis.port | redis端口 | 6379 |
cluster.redis.password | redis密码,没有密码可不传 | 默认注释掉 |
启动服务器
集群配置文件完成后,先启动server1,待server1启动完成后,可同时启动其它三个服务器
集群检查
以admin身份登录ABI,依次进入“系统设置 > 性能与维护 > 集群信息”,检查如下信息:
- 检查所有配置节点是否存在
- 检查所有节点在线状态
- 检查所有节点同步状态
- 检查是否存在控制节点,且只有一个
集群扩容说明
新增N个节点,与原集群各节点配置保持一致,连接同一个Redis,即可达到集群扩容目的。
例如新增物理机器Machine4,节点名称Server5,IP地址172.21.160.3,端口号9005
物理机器 | 节点名称 | IP地址 | 端口号 | 工作目录 |
|---|---|---|---|---|
Machine4 | Server5 | 172.21.160.3 | 9005 | /work_dir/ABIrootdir5/ |
指定工作目录、设置JVM参数后,正常注册ABI(参考本章第3、4、6节内容),然后停掉新增节点服务器,在工作目录的conf文件夹中放置cluster.properties,配置内容为:
节点名称 | 配置内容 |
|---|---|
Server5 | #必须配置的属性: cluster.enabled=true cluster.iscontrol=false cluster.type=redis cluster.group=group1 cluster.nodeid=node5 cluster.name=测试集群节点5 #需要二选一配置的属性: #集群连接配置方式1 cluster.redis.ip=192.168.1.103 cluster.redis.port=6379 #视情况配置的属性: #如果redis设置了密码,则配置 #cluster.redis.password=123 #可以不配置的属性: #集群服务器与redis最大时间差 默认120s #cluster.health.maxtimegap=120 #两次心跳间隔时间默认3s #cluster.health.interval=3000 #离开时间间隔算离开 默认30s #cluster.health.leavetime=30 #加入时间算加入 默认8s #cluster.heath.jointime=8 #是否使用连接池 #cluster.redis.usepool=false |

该配置文件中cluster.redis.ip与原集群各节点保持一致。
然后启动新增节点服务器,启动成功后以admin身份登录ABI,依次进入“系统设置 > 性能与维护 > 集群信息”,检查如下信息:
- 检查所有配置节点是否存在
- 检查所有节点在线状态
- 检查所有节点同步状态
- 检查是否存在控制节点,且只有一个

