这里是本地虚拟机演示cluster集群部署,所以直接安装了6个节点,模拟的是3个服务器,每台服务器安装2个redis进程,6个redis组成集群。
(1)环境准备
Linux操作系统、redis5.0.2.tar.gz
确认操作系统中安装gcc,如果没有安装,使用yum install gcc安装。没有gcc,编译时会报错
(2)redis部署
1.将压缩包解压到路径
cd /app; tar -zxvf redis-5.0.2.tar.gz
2.编译redis
cd /app/redis-5.0.2; make
3.复制6个redis
cd /app; for X in {1..6}; do cp -aR redis-5.0.2 redis-5.0.2_instance"$X"; mkdir redis-5.0.2_instance"$X"/redis_logs redis-5.0.2_instance"$X"/redis_data; done
4.修改redis.conf配置文件
cd /app; for X in {1..6}; do cd redis-5.0.2_instance"$X"; sed -i -e 's/bind 127.0.0.1/#bind 127.0.0.1/g' redis.conf; sed -i -e 's/protected-mode yes/protected-mode no/g' redis.conf; sed -i -e "s/port 6379/port 4379"$X"/g" redis.conf; sed -i -e "s/dir .\//dir \/app\/redis-5.0.2_instance"$X"\/redis_data/g" redis.conf; sed -i -e "s/logfile \"\"/logfile \/app\/redis-5.0.2_instance"$X"\/redis_logs\/redis.log/g" redis.conf; sed -i -e 's/daemonize no/daemonize yes/g' redis.conf; sed -i -e "s/redis_6379.pid/redis_4379"$X".pid/g" redis.conf; sed -i -e "s/dbfilename dump.rdb/dbfilename dump"$X".rdb/g" redis.conf; sed -i -e 's/appendonly no/appendonly yes/g' redis.conf; sed -i -e "s/appendonly.aof/appendonly"$X".aof/g" redis.conf; echo "cluster-config-file nodes-4379$X.conf">>redis.conf; echo "cluster-enabled yes">>redis.conf; cd ..; done
a、bind 127.0.0.1注释掉。该指令用于限制 Redis 服务器只监听本地计算机的连接请求。 它提高了 Redis 服务器的安全性,同时也能满足本地开发和测试的需求。 在需要远程访问 Redis 的情况下,你需要修改 bind
指令,但同时需要注意安全风险。
b、protected-mode改为no,我们使用密码认证连接redis,这里保护策略设为no。
c、修改端口
d、修改持久化目录dir
f、修改日志文件目录logfile
g、daemonize改为yes,配置Redis 服务器作为守护进程运行
h、配置pidfile。当 Redis 以守护进程模式运行时,它会将自己的 PID(进程ID)写入配置文件 pidfile
指定的文件中
i、配置dbfilename。虽然我们选择的是aof模式
j、appendonly设置为yes,启用 Redis 的 AOF (Append Only File) 持久化模式
k、配置aof文件
l、添加cluster-config-file,指定 Redis 集群的配置文件的路径和名称
m、添加cluster-enabled yes。开启集群模式
5.开通防火墙
firewall-cmd --permanent --add-port=43791/tcp
firewall-cmd --permanent --add-port=43792/tcp
firewall-cmd --permanent --add-port=43793/tcp
firewall-cmd --permanent --add-port=43794/tcp
firewall-cmd --permanent --add-port=43795/tcp
firewall-cmd --permanent --add-port=43796/tcp
firewall-cmd --reload
6.做成服务
for X in {1..6}; do cp /app/redis-5.0.2_instance"$X"/utils/redis_init_script /etc/init.d/redis"$X"; done
修改脚本参数
cd /etc/init.d/; for X in {1..6}; do sed -i -e "s/REDISPORT=6379/REDISPORT=4379"$X"/g" redis"$X"; sed -i -e "s/EXEC=\/usr\/local\/bin\/redis-server/EXEC=\/app\/redis-5.0.2_instance"$X"\/src\/redis-server/g" redis"$X"; sed -i -e "s/CLIEXEC=\/usr\/local\/bin\/redis-cli/CLIEXEC=\/app\/redis-5.0.2_instance"$X"\/src\/redis-cli/g" redis"$X"; sed -i -e"s/CONF=\"\/etc\/redis\/\${REDISPORT}.conf\"/CONF=\"\/app\/redis-5.0.2_instance"$X"\/redis.conf\"/g" redis"$X"; sed -i -e "s/\$EXEC \$CONF/\$EXEC \$CONF \&/g" redis"$X"; sed -i -e "s/\$CLIEXEC -p \$REDISPORT/\$CLIEXEC -p \$REDISPORT -a \$PASSWORD/g" redis"$X"; sed -i '/END INIT INFO/a PASSWORD=passwd123' redis"$X"; done
添加服务
cd /etc/init.d
for X in {1..6}; do chkconfig --add redis"$X"; done
为了启停方便,直接将启停写在脚本中,我把它放在/app下
startRedisCluster.sh:
for X in {1..6};do service redis"$X" start; done
stopRedisCluster.sh
for X in {1..6}; do service redis"$X" stop; done
7.启动redis服务
for X in {1..6}; do service redis"$X" start; done
8.创建cluster集群
cd /app/redis-5.0.2; src/redis-cli --cluster create ip:43791 ip:43792 ip:43793 ip:43794 ip:43795 ip:43796 --cluster-replicas 1
ip替换成自己的ip,如:
执行后如下
确认后就会分配槽
9.查看Redis分配状态
登录一个节点后,执行cluster nodes。可主从节点以及主节点分配的槽等信息
例:cd /app/redis-5.0.2_instance1/src/; ./redis-cli -p 43791。再执行cluster nodes。
10.添加密码
for X in {1..6}; do cd /app/redis-5.0.2_instance"$X";echo "masterauth \"passwd123\"">>redis.conf;echo "requirepass \"passwd123\"">>redis.conf; done
然后重启redis
./stopRedisCluster.sh
./startRedisCluster.sh
11.验证
登录其中一个节点./redis-cli -c -p 43791 -a passwd123,设置一些key-value,如下
可以看到集群可以正常工作,key被缓存到不同的主节点