产品集群部署(单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,依次进入“系统设置 > 性能与维护 > 集群信息”,检查如下信息:
- 检查所有配置节点是否存在
- 检查所有节点在线状态
- 检查所有节点同步状态
- 检查是否存在控制节点,且只有一个