Redis集群部署
一、概述
Redis3.0版本之后支持Cluster.
二、redis cluster安装
1、下载和解包
cd /usr/local/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz tar -zxvf redis-5.0.5.tar.gz
2、 编译安装
cd redis-5.0.5
make && make install
3、创建redis节点
测试我们选择2台服务器,分别为:192.168.1.237,192.168.1.238.每分服务器有3个节点。
我先在192.168.1.237创建3个节点:
cd /usr/local/
mkdir redis_cluster //创建集群目录
cd /usr/local/redis_cluster
mkdir 7000 7001 7002 //分别代表三个节点 其对应端口 7000 7001 7002
//创建7000节点为例,拷贝到7000目录
cp /usr/local/redis-5.0.5/redis.conf ./redis_cluster/7000/
//拷贝到7001目录
cp /usr/local/redis-5.0.5/redis.conf ./redis_cluster/7001/
//拷贝到7002目录
cp /usr/local/redis-5.0.5/redis.conf ./redis_cluster/7002/
分别对7001,7002、7003文件夹中的3个文件修改对应的配置
bind ...//机器ip地址
port 7000 //端口7000,7002,7003
daemonize yes //redis后台运行 pidfile /var/run/redis_7000.pid //pidfile文件对应 不同端口,改名 7002,7003
logfile "/usr/local/redis_cluster/7000/redis.log" //日志文件位置----------并非官方文档必填 appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志 cluster-enabled yes //开启集群 把注释#去掉 cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成 7000,7001,7002 cluster-node-timeout 5000 //请求超时 设置5秒够了
在192.168.1.238创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。
4、两台机启动各节点(两台服务器方式一样)
cd /usr/local
redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf
-bash: redis-server: command not found:
ln -s /usr/local/redis-5.0.5/src/redis-server /usr/bin/redis-server
重启命令:
/usr/local/redis-5.0.5/src/redis-cli -c -h 127.0.0.1 -p 7002 shutdown
5、查看服务
ps -ef | grep redis #查看是否启动成功
netstat -tnlp | grep redis #可以看到redis监听端口、
top -p 1410 #查看对应线程的资源占用
三、创建集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
注意防火墙,可以相互访问
redis-5.0.5/src/redis-cli --cluster create --cluster-replicas 1 172.10.0.121:7000 172.10.0.121:7001 172.10.0.121:7002 172.10.0.123:7003 172.10.0.123:7004 172.10.0.123:7005
解释下, --replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。
运行中,提示Can I set the above configuration? (type 'yes' to accept): yes //输入yes
接下来 提示 Waiting for the cluster to join.......... 安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.
这下明白了,我刚开始在一台Server上去配,也是不需要等的,这里还需要跑到Server2上做一些这样的操作。
在127.0.0.1, redis-cli -c -p 700* 分别进入redis各节点的客户端命令窗口, 依次输入 cluster meet 192.168.1.238 7000……
回到Server1,已经创建完毕了。
查看一下 /usr/local/redis/src/redis-cli check 127.0.0.1:7000
到这里集群已经初步搭建好了。
含密码时 --注意这里一般是创建成功后,使用命令设置密码:
redis-5.0.5/src/redis-cli --cluster create 10.30.99.53:7000 10.30.99.53:7001 10.30.99.54:7002 10.30.99.54:7003 10.30.99.55:7004 10.30.99.55:7005 --cluster-replicas 1 -a univalsoft
四、测试
1)连接任意一个客户端即可:/usr/local/redis-5.0.2/src/redis-cli -a xxx -c -h 192.168.5.100 -p 8001
./redis-cli -c -a xxx -h 192.168.5.100 -p 8001

如:
redis-5.0.5/src/redis-cli -a univalsoft -c -h 10.30.99.53 -p 7000 redis-5.0.5/src/redis-cli -a univalsoft -c -h 10.30.99.54 -p 7002
redis-5.0.5/src/redis-cli -a univalsoft -c -h 10.30.99.53 -p 7000 cluster info

/usr/local/redis/src/redis-cli -a xxx -c -h 192.168.0.60 -p 8001 shutdown
5)查看集群信息
redis-5.0.5/src/redis-cli -a univalsoft -c -h 10.30.99.53 -p 7000 cluster nodes
6)Linux 缓存数据丢失问题, 在Linux系统设置一个参数(vm.overcommit_memory)即可解决。
步骤如下:
1、编辑 sysctl.conf 配置文件
- vi /etc/sysctl.conf
2、另起一行增加参数 vm.overcommit_memory 配置,如下
- vm.overcommit_memory = 1
3、使配置文件生效
- sysctl -p
到这里已经结束,在Redis增加些数据,再重启Linux系统查看数据有没有丢失。
10)redis开机自启(测试实例可以启动,但是集群失败,再执行创建语句后成功)
vi /etc/init.d/redis
#!/bin/sh # chkconfig: 2345 80 90 # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT1=7001 REDISPORT2=7002 EXEC=/usr/local/redis-5.0.5/src/redis-server CLIEXEC=/usr/local/redis-5.0.5/src/redis-cli PIDFILE=/var/run/redis_${REDISPORT1}.pid CONF1="/usr/local/redis_cluster/${REDISPORT1}/redis.conf" CONF2="/usr/local/redis_cluster/${REDISPORT2}/redis.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis cluster server..." $EXEC $CONF1 & $EXEC $CONF2 & echo "启动成功..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT1 shutdown $CLIEXEC -p $REDISPORT2 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis cluster to shutdown ..." sleep 1 done echo "Redis cluster stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
保存退出,添加执行权限
chmod +x /etc/init.d/redis
加入开机启动服务
chkconfig --add redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)