环境相关:
OS:CentOS release 7.4.1708
IP:192.168.77.101/102/103
MEM:16G
DISK:50G
- 简单说明
本次实验使用三台Linux虚拟机,每台Linux虚拟机上两个redis实例,共6个实例,三主三备,每个实例6.4G内存
生产环境可以根据实际情况,将6个实例分别部署在2台机器或者是6台机器上
甚至在一台物理机上部署也是可以的,虽然这么设计并不合理
redis以IP+端口号去区分使用各个实例:
# /etc/hosts 配置:
192.168.77.101 redis1
192.168.77.102 redis2
192.168.77.103 redis3
# redis 实例和端口配置:
redis1 7000
redis1 7001
redis2 7002
redis2 7003
redis3 7004
redis3 7005
- 节点一 主机克隆,基础环境部署
参照《CentOS7实验机模板搭建部署》
克隆一台实验机,调整内存为16G,并进一步配置主机名和hosts文件:
HOSTNAME=redis1
hostnamectl set-hostname "$HOSTNAME"
echo "$HOSTNAME">/etc/hostname
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ip a|grep "inet "|grep -v 127|awk -F'[ /]' '{print $6}') $HOSTNAME">>/etc/hosts
- 节点一 编译安装部署
安装编译需要的系统包:
yum -y install gcc tcl rubygems ruby-devel rpm-build
下载源码包,编译安装:
cd /tmp/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
cd /usr/local
tar -xf /tmp/redis-4.0.2.tar.gz
ln -s redis-4.0.2 redis
cd redis
make && make install
配置部署:
mkdir -pv /usr/local/redis/run/{pid,log,data}
# 创建实例运行的目录
mkdir -p /usr/local/redis/redis_cluster
# 创建集群配置文件目录
cd /usr/local/redis/redis_cluster
for PORT in $(seq 7000 7005)
do
cp -av ../redis.conf redis_${PORT}.conf
sed -i "s/^bind 127.0.0.1/bind $(hostname -i)/g" redis_${PORT}.conf
# 绑定节点自己的IP
sed -i "s/^port 6379/port ${PORT}/g" redis_${PORT}.conf
sed -i "s/^daemonize no/daemonize yes/g" redis_${PORT}.conf
sed -i "s|/var/run/redis_6379.pid|/usr/local/redis/run/pid/redis_${PORT}.pid|g" redis_${PORT}.conf
# 设置pid文件
sed -i "s|^logfile.*$|logfile /usr/local/redis/run/log/redis_${PORT}.log|g" redis_${PORT}.conf
# 设置log文件
sed -i "s/^dbfilename dump.rdb/dbfilename dump_${PORT}.rdb/g" redis_${PORT}.conf
# 设置内存快照文件名
sed -i "s|^dir ./|dir /usr/local/redis/run/data|g" redis_${PORT}.conf
# 设置快照存储目录
sed -i "/^# maxmemory <bytes>/amaxmemory 6871947673" redis_${PORT}.conf
# 设置实例内存
sed -i "s/^appendonly no/appendonly yes/g" redis_${PORT}.conf
# 设置打开aof日志
sed -i "s/^appendfilename.*/appendfilename appendonly_${PORT}.aof/g" redis_${PORT}.conf
# 设置aof日志名
sed -i "s/^# cluster-enabled yes/cluster-enabled yes/g" redis_${PORT}.conf
# 设置实例为集群类型的实例
sed -i "s/^# cluster-config-file nodes-6379.conf/cluster-config-file nodes-${PORT}.conf/g" redis_${PORT}.conf
# 设置每个实例的集群配置文件名
echo "# /usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_${PORT}.conf">>/etc/rc.d/rc.local
done
# 在每个节点之上都生成7000~7005端口实例的配置文件
# 这些实例是集群类型的实例,区别于单实例
# 注意每个节点的这些配置文件中的绑定IP都是自己主机的IP,因此三个节点之间不能公用这些配置文件
# 需要修改绑定IP才可以使用
安装基于ruby的API客户端工具
在网站 https://rubygems.org/ 搜索redis,下载3.3.5版本的安装包,然后安装:
gem install -l /tmp/redis-3.3.5.gem
不能够适用最新的安装包,经测试4.0版本的包不能做数据槽重分配
可以直接使用解压工具打开redis-3.3.5.gem安装包查看内容
gem是和rpm相似的包管理工具
实例启动:
再配置部署时已经将启动命令以注释的形式写入了/etc/rc.d/rc.local开机启动文件中
可以根据节点主机不同打开相应的行,便于主机重启后自动启动实例
# 根据 简单说明 中的 实例和端口配置
# 配置安装节点一时,打开节点一的/etc/rc.d/rc.local生效行:
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7000.conf'>>/etc/rc.d/rc.local
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7001.conf'>>/etc/rc.d/rc.local
# 配置安装节点二时,打开节点二的/etc/rc.d/rc.local生效行:
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7002.conf'>>/etc/rc.d/rc.local
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7003.conf'>>/etc/rc.d/rc.local
# 配置安装节点三时,打开节点三的/etc/rc.d/rc.local生效行:
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7004.conf'>>/etc/rc.d/rc.local
echo '/usr/local/bin/redis-server /usr/local/redis/redis_cluster/redis_7005.conf'>>/etc/rc.d/rc.local
- 节点二和节点三部署
重新克隆机器,配置IP为192.168.77.102,主机名为redis2,根据上方第2和第3步部署出节点二
重新克隆机器,配置IP为192.168.77.103,主机名为redis3,根据上方第2和第3步部署出节点三
注意实例启动的开机启动配置上的差异
- 配置集群
三节点机器重启,查看实例运行状态:
ps -ef|grep redis
netstat -tupln
# 进程存在且端口存在
echo 'ping'| redis-cli -h 192.168.77.101 -p 7000
echo 'ping'| redis-cli -h 192.168.77.101 -p 7001
echo 'ping'| redis-cli -h 192.168.77.102 -p 7002
echo 'ping'| redis-cli -h 192.168.77.102 -p 7003
echo 'ping'| redis-cli -h 192.168.77.103 -p 7004
echo 'ping'| redis-cli -h 192.168.77.103 -p 7005
# 使用ping pong来检测实例是否正常
在节点一上执行命令创建集群:
cp -av /usr/local/redis/src/redis-trib.rb /usr/local/bin
redis-trib.rb create --replicas 1 \
192.168.77.101:7000 192.168.77.101:7001 \
192.168.77.102:7002 192.168.77.102:7003 \
192.168.77.103:7004 192.168.77.103:7005
# --replicas 1 表示自动为每一个master节点分配一个slave节点
# 自动选择出三个主节点和三个备节点
集群测试:
# 连接:
redis-cli -c -h 192.168.77.101 -p 7000
redis-cli -c -h 192.168.77.101 -p 7001
redis-cli -c -h 192.168.77.102 -p 7002
redis-cli -c -h 192.168.77.102 -p 7003
redis-cli -c -h 192.168.77.103 -p 7004
redis-cli -c -h 192.168.77.103 -p 7005
# 任意一个节点的实例都可以敲该命令进行检测
redis-trib.rb check 192.168.77.101:7000
[TOC]