说明
1.本文分享,实现的是单机redis5.0.9三主三从的一键安装。
2.安装环境:在centos7和ubuntu7下,都可以一键安装成功。主要以centos7为准。
3.本安装是离线安装,不依赖网络。
4.端口是从8001~8006
5.无论防火墙是否启动。启动脚本中都进行了处理。都可以安装成功。
6.只有用root账号才能安装成功,非root用户,启动脚本会有提示。
7.如果用户环境安装的有redis5.0.9,并已经启动,需注意,该脚本会关闭redis5.0.9.因为会重新安装redis5.0.9
8.全程只需要上传本文提供的压缩包、脚本,启动脚本即可,不需其他任何操作
9.多机redis集群,亦可以参考本文。
10.最后贴出的是启动脚本链接和需要的资源链接。
使用方法
1.将redis_127.zip和start_redis_127.sh放到centos任意目录。
2.执行
sh start_redis_127.sh
30秒左右,集群就能安装完成
脚本和资源包
链接:https://pan.baidu.com/s/1ldxd70iDKKzhnO-ePtQpxQ
提取码:5y8h
启动脚本
#!/bin/sh
#解压资源,杀掉redis5.0.9的进程
function f_unzipAndStart(){
resource_name="redis_127"
#解压
unzip -o ${resource_name}.zip
#进入解压后的目录
cd ${resource_name}
#如果redis5.0.9进程存在,杀掉该进程
sh ./kill.sh "default"
FLAG=$? #接受执行kill.sh的结果
if [ $FLAG != 0 ]
then
echo "------杀死redis进程失败,停止安装"
exit;
else
sh ./install_redis_127.sh
fi
}
f_unzipAndStart
主运行脚本
#!/bin/bash
#redis5.0集群
#1.先将gcc、gcc++、redis-5.0.9.tar.gz的包拷贝到/tmp下
#2.运行该脚本
#----------------------------------所有配置开始----------------------------------
#本机redis集群的开始端口号
START_PORT=8001
#集群ip1
REDIS_CLUSTER_IP_1="127.0.0.1"
#集群ip2
REDIS_CLUSTER_IP_2="127.0.0.1"
#集群ip3
REDIS_CLUSTER_IP_3="127.0.0.1"
#redis密码
PASSWORD="wang"
#本机部署的redis实例总数
SINGLE_MACHINE_CLUSTER_COUNT=6
#redis基础目录,reids-server、redis-cli都在该目录下
REDIS_BASE_PATH="/usr/local/redis-5.0.9"
#集群的目录
REDIS_CLUSTER_PATH="/usr/local/redis-cluster"
#防火墙状态
FIREWALLD_STATUS=`firewall-cmd --state`
#----------------------------------所有配置结束----------------------------------
#----------------------------------所有函数开始----------------------------------
#修改配置文件
#3个参数,参数1文件名,参数2:老字符串,参数3:新字符串
function f_editConfig(){
#修改redis.conf中的参数----------start----------
file_name=$1
#传递参数1
old_str=$2
#参数2
new_str=$3
echo "$old_str 替换成----> $new_str"
sed -i "s|$old_str|$new_str|g" $file_name
#修改redis.conf中的参数----------end----------
}
#判断是否root用户
function f_checkIsRoot(){
if [ $UID -ne 0 ]
then
echo "-----------------------------------权限不足...请切换至root用户"
exit;
fi
}
#判断gcc、gcc++是否安装,如没有安装则安装
function f_setup_gcc(){
gcc -v &>/tmp/null
FLAG=$? #接受gcc -v 命令的结果
if [ $FLAG != 0 ]
then
#安装gcc和gcc++
rpm -Uvh ./gcc/*.rpm --nodeps --force;rpm -Uvh ./gcc++/*.rpm --nodeps --force
else
echo "------gcc was setup------"
echo "------redis is installing------"
fi
}
#把端口添加到防火墙白名单
function f_addPortToFireWalld(){
#如果防火墙开启,则将端口添加到防火墙
#不为空,则说明防火墙开启
if [ $FIREWALLD_STATUS ]
then
newPort=$1
#redis总线端口,一个redis实例需要开启两个端口。一个是用户指定的,还有一个是在用户指定的端口基础上加10000得到的。
#判断redis需要的端口是否已经开启,如果没有开启,则开启
is_open=`firewall-cmd --query-port=${newPort}/tcp`
if [ $is_open = "no" ];then
firewall-cmd --zone=public --add-port=${newPort}/tcp --permanent
echo "------${newPort}端口添加到防火墙白名单"
fi
fi
}
#重启防火墙
#如果防火墙处于开启状态,则重启防火墙
function f_restartFirewalld(){
#不为空,则说明防火墙开启
if [ $FIREWALLD_STATUS ];then
systemctl restart firewalld
echo "------防火墙重启"
fi
}
#----------------------------------所有函数结束----------------------------------
f_checkIsRoot
#解压后,资源初始目录
START_PATH=`pwd`
cd $START_PATH
#wget http://download.redis.io/releases/redis-5.0.9.tar.gz
tar -xvzf redis-5.0.9.tar.gz
tar -xvzf gcc.tar.gz
tar -xvzf gcc++.tar.gz
rm -rf ${REDIS_BASE_PATH}
rm -rf ${REDIS_CLUSTER_PATH}
echo `pwd`
echo "${START_PATH}/redis-5.0.9"
cp -R ${START_PATH}/redis-5.0.9 /usr/local/
f_setup_gcc
#创建集群使用的基本目录
mkdir -p ${REDIS_CLUSTER_PATH}
#循环中
i=0
while (($i<$SINGLE_MACHINE_CLUSTER_COUNT))
do
port=`expr $START_PORT + $i`
echo "--------------------------------端口:$port"
#创建目录
mkdir -p ${REDIS_CLUSTER_PATH}/${port}/
#复制配置文件
cp ${REDIS_BASE_PATH}/redis.conf "${REDIS_CLUSTER_PATH}/${port}/"
#修改redis.config中的配置
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "daemonize no" "daemonize yes"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "port 6379" "port ${port}"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "dir ./" "dir ${REDIS_CLUSTER_PATH}/${port}/" #指定数据文件的保存位置
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# cluster-enabled yes" "cluster-enabled yes"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# cluster-config-file nodes-6379.conf" "cluster-config-file nodes-${port}.conf"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# cluster-enabled yes" "cluster-enabled yes"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# cluster-node-timeout 15000" "cluster-node-timeout 5000"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "bind 127.0.0.1" "#bind 127.0.0.1"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "protected-mode yes" "protected-mode no"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "appendonly no" "appendonly yes"
#一个redis进程使用一个单独的pid
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "pidfile /var/run/redis_6379.pid" "pidfile /var/run/redis_${port}.pid"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# requirepass foobared" "requirepass ${PASSWORD}"
f_editConfig ${REDIS_CLUSTER_PATH}/${port}/redis.conf "# masterauth <master-password>" "masterauth ${PASSWORD}"
#改变循环变量
i=`expr $i + 1`
done
cd ${REDIS_BASE_PATH}
make MALLOC=libc
#编译
#make test
#安装
make && make install
#启动并指定配置文件
#src/redis-server redis.conf &
#启动每个redis实例
i=0
while (($i<$SINGLE_MACHINE_CLUSTER_COUNT))
do
port=`expr $START_PORT + $i`
#启动redis实例
/usr/local/redis-5.0.9/src/redis-server /usr/local/redis-cluster/$port/redis.conf;
i=`expr $i + 1`
f_addPortToFireWalld $port
done
f_restartFirewalld
#启动集群,只有安装好所有节点后,才可以随意一个节点使用该命令启动集群:
echo yes|/usr/local/redis-5.0.9/src/redis-cli -a wang --cluster create --cluster-replicas 1 ${REDIS_CLUSTER_IP_1}:8001 ${REDIS_CLUSTER_IP_1}:8002 ${REDIS_CLUSTER_IP_2}:8003 ${REDIS_CLUSTER_IP_2}:8004 ${REDIS_CLUSTER_IP_3}:8005 ${REDIS_CLUSTER_IP_3}:8006