当前位置: 首页 > news >正文

Redis 自动化脚本安装方案

以下是 Redis 自动化脚本安装方案,支持多个版本和安装方式:


📦 Redis 一键安装脚本

脚本功能

  • ✅ 支持 Redis 6.x/7.x 版本选择

  • ✅ 自动编译安装和系统包安装

  • ✅ 系统服务配置和开机自启

  • ✅ 安全配置和密码认证

  • ✅ 性能优化配置

  • ✅ 远程访问配置


🔧 完整安装脚本

#!/bin/bash
# =============================================================================
# Redis 自动安装脚本
# 系统要求: CentOS 7
# 作者: XiaoLan
# =============================================================================# ----------------------------------------------------------------------------
# 全局配置与颜色定义模块
# ----------------------------------------------------------------------------# 颜色定义
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly PURPLE='\033[0;35m'
readonly CYAN='\033[0;36m'
readonly WHITE='\033[1;37m'
readonly NC='\033[0m' # No Color# 日志文件路径
readonly LOG_FILE="/var/log/redis_install.log"# Redis 配置参数
readonly REDIS_VERSION="6.2.7"
readonly REDIS_PORT="6379"
readonly REDIS_USER="redis"
readonly REDIS_GROUP="redis"
readonly REDIS_HOME="/opt/redis"
readonly REDIS_DATA_DIR="/var/lib/redis"
readonly REDIS_LOG_DIR="/var/log/redis"
readonly REDIS_CONF_DIR="/etc/redis"
readonly REDIS_SERVICE_NAME="redis"
readonly REDIS_TAR_FILE="redis-${REDIS_VERSION}.tar.gz"
readonly REDIS_DOWNLOAD_URL="http://download.redis.io/releases/${REDIS_TAR_FILE}"# ----------------------------------------------------------------------------
# 工具函数模块
# ----------------------------------------------------------------------------# 输出函数定义
log_info() {local msg="$1"echo -e "${CYAN}[INFO]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_warn() {local msg="$1"echo -e "${YELLOW}[WARN]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_error() {local msg="$1"echo -e "${RED}[ERROR]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_success() {local msg="$1"echo -e "${GREEN}[SUCCESS]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}print_header() {clearecho -e "${BLUE}=========================================${NC}"echo -e "${BLUE}       Redis ${REDIS_VERSION} 自动安装脚本        ${NC}"echo -e "${BLUE}           系统: CentOS 7                ${NC}"echo -e "${BLUE}           作者: XiaoLan                 ${NC}"echo -e "${BLUE}=========================================${NC}"echo ""
}show_summary() {echo -e "${PURPLE}安装摘要:${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "Redis 版本          : ${GREEN}${REDIS_VERSION}${NC}"echo -e "安装目录            : ${GREEN}${REDIS_HOME}${NC}"echo -e "数据目录            : ${GREEN}${REDIS_DATA_DIR}${NC}"echo -e "配置目录            : ${GREEN}${REDIS_CONF_DIR}${NC}"echo -e "日志目录            : ${GREEN}${REDIS_LOG_DIR}${NC}"echo -e "服务端口            : ${GREEN}${REDIS_PORT}${NC}"echo -e "运行用户            : ${GREEN}${REDIS_USER}${NC}"echo -e "服务名称            : ${GREEN}${REDIS_SERVICE_NAME}${NC}"echo -e "日志文件            : ${GREEN}${LOG_FILE}${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo ""
}confirm_action() {local prompt="${1:-是否继续?}"local responsewhile true; doread -p "$(echo -e "${YELLOW}${prompt} [y/n]: ${NC}")" responsecase "$response" in[Yy]|[Yy][Ee][Ss])return 0;;[Nn]|[Nn][Oo])return 1;;*)echo -e "${RED}请输入 y 或 n${NC}";;esacdone
}# ----------------------------------------------------------------------------
# 系统检查模块
# ----------------------------------------------------------------------------check_root() {if [[ $EUID -ne 0 ]]; thenlog_error "此脚本必须以 root 权限运行"exit 1filog_info "权限检查通过"
}check_os() {if [[ ! -f /etc/centos-release ]]; thenlog_error "此脚本仅支持 CentOS 系统"exit 1filocal os_version=$(cat /etc/centos-release | grep -oE '[0-9]+\.[0-9]+' | cut -d. -f1)if [[ "$os_version" != "7" ]]; thenlog_error "此脚本仅支持 CentOS 7"exit 1filog_info "操作系统检查通过: $(cat /etc/centos-release)"
}check_internet() {if ! ping -c 3 8.8.8.8 &> /dev/null; thenlog_error "无法连接网络,请检查网络设置"exit 1filog_info "网络连接正常"
}# ----------------------------------------------------------------------------
# 安装准备模块
# ----------------------------------------------------------------------------prepare_installation() {log_info "开始准备安装环境"# 更新系统log_info "正在更新系统软件包..."yum update -y >> "$LOG_FILE" 2>&1 || {log_error "系统更新失败"return 1}# 安装必要工具log_info "正在安装必要工具..."yum groupinstall -y "Development Tools" >> "$LOG_FILE" 2>&1yum install -y wget curl which tcl >> "$LOG_FILE" 2>&1 || {log_error "必要工具安装失败"return 1}# 创建日志目录mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/nulllog_success "安装环境准备完成"return 0
}# ----------------------------------------------------------------------------
# Redis 用户和目录准备模块
# ----------------------------------------------------------------------------prepare_redis_user_and_dirs() {log_info "创建 Redis 用户和目录..."# 创建 redis 用户组和用户if ! getent group "$REDIS_GROUP" > /dev/null 2>&1; thengroupadd "$REDIS_GROUP" >> "$LOG_FILE" 2>&1log_info "已创建组: $REDIS_GROUP"fiif ! id "$REDIS_USER" > /dev/null 2>&1; thenuseradd -r -g "$REDIS_GROUP" -d "$REDIS_HOME" -s /sbin/nologin "$REDIS_USER" >> "$LOG_FILE" 2>&1log_info "已创建用户: $REDIS_USER"fi# 创建必要目录mkdir -p "$REDIS_HOME" "$REDIS_DATA_DIR" "$REDIS_LOG_DIR" "$REDIS_CONF_DIR" >> "$LOG_FILE" 2>&1 || {log_error "创建目录失败"return 1}# 设置目录权限chown -R "$REDIS_USER":"$REDIS_GROUP" "$REDIS_HOME" "$REDIS_DATA_DIR" "$REDIS_LOG_DIR" "$REDIS_CONF_DIR" >> "$LOG_FILE" 2>&1chmod 755 "$REDIS_HOME" >> "$LOG_FILE" 2>&1chmod 750 "$REDIS_DATA_DIR" "$REDIS_LOG_DIR" >> "$LOG_FILE" 2>&1chmod 755 "$REDIS_CONF_DIR" >> "$LOG_FILE" 2>&1log_success "Redis 用户和目录准备完成"return 0
}# ----------------------------------------------------------------------------
# Redis 下载和编译模块
# ----------------------------------------------------------------------------download_and_compile_redis() {log_info "下载并编译 Redis ${REDIS_VERSION}..."# 进入临时目录local temp_dir="/tmp/redis-install-$$"mkdir -p "$temp_dir"cd "$temp_dir" || {log_error "无法进入临时目录: $temp_dir"return 1}# 下载 Redislog_info "正在下载 Redis ${REDIS_VERSION}..."if ! wget "$REDIS_DOWNLOAD_URL" -O "$REDIS_TAR_FILE" >> "$LOG_FILE" 2>&1; thenlog_error "Redis 下载失败"cd - > /dev/nullrm -rf "$temp_dir"return 1fi# 解压 Redislog_info "正在解压 Redis..."tar xzf "$REDIS_TAR_FILE" >> "$LOG_FILE" 2>&1 || {log_error "Redis 解压失败"cd - > /dev/nullrm -rf "$temp_dir"return 1}# 编译 Redislog_info "正在编译 Redis..."cd "redis-${REDIS_VERSION}" || {log_error "无法进入 Redis 源码目录"cd - > /dev/nullrm -rf "$temp_dir"return 1}make distclean >> "$LOG_FILE" 2>&1if ! make >> "$LOG_FILE" 2>&1; thenlog_error "Redis 编译失败"cd - > /dev/nullrm -rf "$temp_dir"return 1fi# 运行测试log_info "正在运行测试..."if ! make test >> "$LOG_FILE" 2>&1; thenlog_warn "Redis 测试未完全通过,但仍可继续安装"fi# 安装 Redislog_info "正在安装 Redis..."if ! make PREFIX="$REDIS_HOME" install >> "$LOG_FILE" 2>&1; thenlog_error "Redis 安装失败"cd - > /dev/nullrm -rf "$temp_dir"return 1fi# 清理临时文件cd - > /dev/nullrm -rf "$temp_dir"log_success "Redis ${REDIS_VERSION} 下载和编译完成"return 0
}# ----------------------------------------------------------------------------
# Redis 配置模块
# ----------------------------------------------------------------------------configure_redis() {log_info "配置 Redis..."# 创建 Redis 配置文件local redis_conf="${REDIS_CONF_DIR}/redis.conf"cat > "$redis_conf" <<EOF
# Redis 配置文件
# 由 Redis 安装脚本自动生成# 网络配置
bind 127.0.0.1
port ${REDIS_PORT}
timeout 0
tcp-keepalive 300# 通用配置
daemonize yes
supervised systemd
pidfile /var/run/redis_${REDIS_PORT}.pid
loglevel notice
logfile ${REDIS_LOG_DIR}/redis.log
databases 16# 快照配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ${REDIS_DATA_DIR}# 主从复制
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
slave-priority 100# 安全配置
protected-mode yes
# requirepass foobared# 限制配置
maxclients 10000
maxmemory 268435456
maxmemory-policy allkeys-lru# APPEND ONLY MODE
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes# LUA SCRIPTING
lua-time-limit 5000# 集群配置
cluster-enabled no
cluster-config-file nodes-${REDIS_PORT}.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes# SLOW LOG
slowlog-log-slower-than 10000
slowlog-max-len 128# LATENCY MONITOR
latency-monitor-threshold 0# EVENT NOTIFICATION
notify-keyspace-events ""# GOPHER SERVER
gopher-enabled no# ADVANCED CONFIG
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
EOF# 设置配置文件权限chown "$REDIS_USER":"$REDIS_GROUP" "$redis_conf" >> "$LOG_FILE" 2>&1chmod 640 "$redis_conf" >> "$LOG_FILE" 2>&1log_success "Redis 配置完成"return 0
}# ----------------------------------------------------------------------------
# Redis 服务配置模块
# ----------------------------------------------------------------------------configure_redis_service() {log_info "配置 Redis 系统服务..."# 创建 Systemd 服务文件local service_file="/etc/systemd/system/${REDIS_SERVICE_NAME}.service"cat > "$service_file" <<EOF
[Unit]
Description=Advanced key-value store
After=network.target[Service]
Type=forking
User=${REDIS_USER}
Group=${REDIS_GROUP}
ExecStart=${REDIS_HOME}/bin/redis-server ${REDIS_CONF_DIR}/redis.conf
ExecStop=${REDIS_HOME}/bin/redis-cli shutdown
TimeoutStopSec=0
Restart=always[Install]
WantedBy=multi-user.target
Alias=redis.service
EOF# 重新加载 systemd 配置systemctl daemon-reload >> "$LOG_FILE" 2>&1# 启用服务systemctl enable "$REDIS_SERVICE_NAME" >> "$LOG_FILE" 2>&1log_success "Redis 系统服务配置完成"return 0
}# ----------------------------------------------------------------------------
# Redis 启动和测试模块
# ----------------------------------------------------------------------------start_and_test_redis() {log_info "启动 Redis 服务..."# 启动 Redis 服务systemctl start "$REDIS_SERVICE_NAME" >> "$LOG_FILE" 2>&1 || {log_error "Redis 服务启动失败"return 1}# 等待服务启动local retry=0local max_retry=10while [[ $retry -lt $max_retry ]]; doif systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenbreakfisleep 1((retry++))done# 检查服务状态if ! systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenlog_error "Redis 服务启动超时"return 1fi# 测试 Redis 连接log_info "测试 Redis 连接..."sleep 2if ! "${REDIS_HOME}/bin/redis-cli" ping > /dev/null 2>&1; thenlog_error "Redis 连接测试失败"return 1filog_success "Redis 服务启动并测试通过"return 0
}# ----------------------------------------------------------------------------
# 防火墙配置模块
# ----------------------------------------------------------------------------configure_firewall() {log_info "配置防火墙..."if systemctl is-active --quiet firewalld; thenfirewall-cmd --permanent --add-port=${REDIS_PORT}/tcp >> "$LOG_FILE" 2>&1firewall-cmd --reload >> "$LOG_FILE" 2>&1log_info "防火墙规则已更新"elselog_warn "Firewalld 未运行,跳过防火墙配置"fi
}# ----------------------------------------------------------------------------
# 综合信息摘要模块
# ----------------------------------------------------------------------------show_final_summary() {echo -e "${BLUE}=========================================${NC}"echo -e "${BLUE}         Redis 安装完成摘要               ${NC}"echo -e "${BLUE}=========================================${NC}"# 1. 基本配置信息echo -e "\n${PURPLE}1. 基本配置信息${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "Redis 版本          : ${GREEN}${REDIS_VERSION}${NC}"echo -e "默认端口            : ${GREEN}${REDIS_PORT}${NC}"echo -e "运行用户            : ${GREEN}${REDIS_USER}${NC}"echo -e "服务名称            : ${GREEN}${REDIS_SERVICE_NAME}${NC}"echo -e "安装目录            : ${GREEN}${REDIS_HOME}${NC}"echo -e "数据目录            : ${GREEN}${REDIS_DATA_DIR}${NC}"echo -e "配置目录            : ${GREEN}${REDIS_CONF_DIR}${NC}"echo -e "日志目录            : ${GREEN}${REDIS_LOG_DIR}${NC}"# 2. 连接信息echo -e "\n${PURPLE}2. 连接信息${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "本地连接命令        : ${GREEN}${REDIS_HOME}/bin/redis-cli${NC}"echo -e "远程连接命令        : ${GREEN}${REDIS_HOME}/bin/redis-cli -h localhost -p ${REDIS_PORT}${NC}"# 3. 服务管理命令echo -e "\n${PURPLE}3. 服务管理命令${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "启动服务            : ${GREEN}sudo systemctl start ${REDIS_SERVICE_NAME}${NC}"echo -e "停止服务            : ${GREEN}sudo systemctl stop ${REDIS_SERVICE_NAME}${NC}"echo -e "重启服务            : ${GREEN}sudo systemctl restart ${REDIS_SERVICE_NAME}${NC}"echo -e "查看状态            : ${GREEN}sudo systemctl status ${REDIS_SERVICE_NAME}${NC}"echo -e "开机自启            : ${GREEN}sudo systemctl enable ${REDIS_SERVICE_NAME}${NC}"echo -e "禁用开机自启        : ${GREEN}sudo systemctl disable ${REDIS_SERVICE_NAME}${NC}"# 4. 重要文件路径echo -e "\n${PURPLE}4. 重要文件路径${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "配置文件            : ${GREEN}${REDIS_CONF_DIR}/redis.conf${NC}"echo -e "数据文件            : ${GREEN}${REDIS_DATA_DIR}/dump.rdb${NC}"echo -e "日志文件            : ${GREEN}${REDIS_LOG_DIR}/redis.log${NC}"echo -e "服务文件            : ${GREEN}/etc/systemd/system/${REDIS_SERVICE_NAME}.service${NC}"echo -e "安装日志            : ${GREEN}${LOG_FILE}${NC}"# 5. 状态检查echo -e "\n${PURPLE}5. 状态检查${NC}"echo -e "${WHITE}-----------------------------------------${NC}"# 服务状态if systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenecho -e "服务状态            : ${GREEN}● 运行中${NC}"elseecho -e "服务状态            : ${RED}○ 已停止${NC}"fi# 开机自启状态if systemctl is-enabled --quiet "$REDIS_SERVICE_NAME"; thenecho -e "开机自启            : ${GREEN}● 已启用${NC}"elseecho -e "开机自启            : ${RED}○ 已禁用${NC}"fi# 端口监听状态if netstat -tlnp | grep -q ":${REDIS_PORT} "; thenecho -e "端口监听            : ${GREEN}● 正在监听${NC}"elseecho -e "端口监听            : ${RED}○ 未监听${NC}"fi# 6. 安全建议echo -e "\n${PURPLE}6. 安全建议${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "${YELLOW}● 设置访问密码:${NC}"echo -e "    编辑 ${REDIS_CONF_DIR}/redis.conf 取消注释并修改:"echo -e "    requirepass your_secure_password"echo -e "    然后执行: sudo systemctl restart ${REDIS_SERVICE_NAME}"echo -e "${YELLOW}● 配置远程访问:${NC}"echo -e "    编辑 ${REDIS_CONF_DIR}/redis.conf 修改 bind 选项"echo -e "    bind 0.0.0.0"echo -e "${YELLOW}● 配置防火墙:${NC}"echo -e "    sudo firewall-cmd --permanent --add-port=${REDIS_PORT}/tcp"echo -e "    sudo firewall-cmd --reload"# 7. 故障排除echo -e "\n${PURPLE}7. 故障排除${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "查看服务日志        : ${GREEN}sudo journalctl -u ${REDIS_SERVICE_NAME}${NC}"echo -e "查看 Redis 日志     : ${GREEN}tail -f ${REDIS_LOG_DIR}/redis.log${NC}"echo -e "查看安装日志        : ${GREEN}cat ${LOG_FILE}${NC}"echo -e "测试连接            : ${GREEN}${REDIS_HOME}/bin/redis-cli ping${NC}"echo -e "\n${BLUE}=========================================${NC}"echo -e "${BLUE}         安装完成时间: $(date)              ${NC}"echo -e "${BLUE}=========================================${NC}"
}# ----------------------------------------------------------------------------
# 主执行流程模块
# ----------------------------------------------------------------------------main() {# 初始化日志echo "Redis 安装日志 - $(date)" > "$LOG_FILE"# 显示横幅print_header# 显示安装摘要show_summary# 确认安装if ! confirm_action "确认开始安装 Redis?"; thenlog_info "用户取消安装"exit 0fiecho ""log_info "开始 Redis 安装流程"echo ""# 执行各步骤check_root || exit 1check_os || exit 1check_internet || exit 1prepare_installation || exit 1prepare_redis_user_and_dirs || exit 1download_and_compile_redis || exit 1configure_redis || exit 1configure_redis_service || exit 1configure_firewallstart_and_test_redis || exit 1echo ""log_success "Redis ${REDIS_VERSION} 安装完成!"# 显示最终综合摘要show_final_summary
}# ----------------------------------------------------------------------------
# 脚本入口点
# ----------------------------------------------------------------------------# 捕获中断信号
trap 'echo ""; log_warn "安装被用户中断"; exit 1' INT TERM# 执行主函数
main "$@"

🔍 安装执行过程


🔧 远程访问配置脚本

#!/bin/bash
# =============================================================================
# Redis 远程访问配置脚本
# 系统要求: CentOS 7+
# 作者: XiaoLan
# =============================================================================# ----------------------------------------------------------------------------
# 全局配置与颜色定义
# ----------------------------------------------------------------------------# 颜色定义
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly PURPLE='\033[0;35m'
readonly CYAN='\033[0;36m'
readonly WHITE='\033[1;37m'
readonly NC='\033[0m' # No Color# Redis 配置参数
readonly REDIS_CONF_DIR="/etc/redis"
readonly REDIS_CONF_FILE="${REDIS_CONF_DIR}/redis.conf"
readonly REDIS_SERVICE_NAME="redis"
readonly REDIS_PORT="6379"
readonly BACKUP_DIR="/etc/redis/backup"# 日志文件
readonly LOG_FILE="/var/log/redis_remote_access.log"# ----------------------------------------------------------------------------
# 工具函数
# ----------------------------------------------------------------------------log_info() {local msg="$1"echo -e "${CYAN}[INFO]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_warn() {local msg="$1"echo -e "${YELLOW}[WARN]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_error() {local msg="$1"echo -e "${RED}[ERROR]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}log_success() {local msg="$1"echo -e "${GREEN}[SUCCESS]$(date '+%Y-%m-%d %H:%M:%S')${NC} $msg" | tee -a "$LOG_FILE"
}print_header() {clearecho -e "${BLUE}=========================================${NC}"echo -e "${BLUE}      Redis 远程访问配置脚本           ${NC}"echo -e "${BLUE}           系统: CentOS 7+             ${NC}"echo -e "${BLUE}           作者: XiaoLan               ${NC}"echo -e "${BLUE}=========================================${NC}"echo ""
}confirm_action() {local prompt="${1:-是否继续?}"local responsewhile true; doread -p "$(echo -e "${YELLOW}${prompt} [y/n]: ${NC}")" responsecase "$response" in[Yy]|[Yy][Ee][Ss])return 0;;[Nn]|[Nn][Oo])return 1;;*)echo -e "${RED}请输入 y 或 n${NC}";;esacdone
}# ----------------------------------------------------------------------------
# 检查函数
# ----------------------------------------------------------------------------check_root() {if [[ $EUID -ne 0 ]]; thenlog_error "此脚本必须以 root 权限运行"exit 1filog_info "权限检查通过"
}check_redis_installed() {if [[ ! -f "$REDIS_CONF_FILE" ]]; thenlog_error "未找到 Redis 配置文件: $REDIS_CONF_FILE"log_error "请确保 Redis 已正确安装"exit 1filog_info "Redis 安装检查通过"
}check_redis_service() {if ! systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenlog_warn "Redis 服务未运行,正在启动..."systemctl start "$REDIS_SERVICE_NAME" || {log_error "无法启动 Redis 服务"return 1}filog_info "Redis 服务状态检查通过"
}# ----------------------------------------------------------------------------
# 备份配置
# ----------------------------------------------------------------------------backup_config() {log_info "备份当前 Redis 配置..."mkdir -p "$BACKUP_DIR" || {log_error "无法创建备份目录"return 1}local backup_file="${BACKUP_DIR}/redis.conf.backup.$(date +%Y%m%d_%H%M%S)"cp "$REDIS_CONF_FILE" "$backup_file" || {log_error "配置文件备份失败"return 1}log_success "配置已备份到: $backup_file"echo "$backup_file"  # 返回备份文件路径
}# ----------------------------------------------------------------------------
# 配置远程访问
# ----------------------------------------------------------------------------configure_remote_access() {local backup_file="$1"log_info "开始配置 Redis 远程访问..."# 显示当前绑定配置log_info "当前绑定配置:"grep -E "^bind|^#bind" "$REDIS_CONF_FILE" | tee -a "$LOG_FILE"echo ""echo -e "${YELLOW}请选择绑定配置:${NC}"echo -e "1) ${GREEN}绑定所有接口 (0.0.0.0) - 允许任何IP连接${NC}"echo -e "2) ${YELLOW}绑定特定IP - 允许指定IP段连接${NC}"echo -e "3) ${RED}取消操作${NC}"local choicewhile true; doread -p "$(echo -e "${YELLOW}请选择 [1-3]: ${NC}")" choicecase "$choice" in1)configure_bind_allbreak;;2)configure_bind_specificbreak;;3)log_info "用户取消操作"exit 0;;*)echo -e "${RED}无效选择,请重新输入${NC}";;esacdone# 配置保护模式configure_protected_mode# 询问是否设置密码if confirm_action "是否设置 Redis 访问密码?"; thenconfigure_redis_passwordfilog_success "远程访问配置完成"
}configure_bind_all() {log_info "配置 Redis 绑定所有网络接口..."# 注释掉原有的 bind 配置sed -i 's/^bind/#bind/' "$REDIS_CONF_FILE"# 添加新的 bind 配置if ! grep -q "^bind 0.0.0.0" "$REDIS_CONF_FILE"; thenecho "bind 0.0.0.0" >> "$REDIS_CONF_FILE"filog_success "已配置绑定所有网络接口"
}configure_bind_specific() {log_info "配置 Redis 绑定特定IP..."echo -e "${YELLOW}请输入要绑定的IP地址 (多个IP用空格分隔):${NC}"echo -e "${CYAN}示例:${NC}"echo -e "  127.0.0.1 192.168.1.100"echo -e "  0.0.0.0 (所有接口)"echo -e "  192.168.1.0/24 (整个网段)"local bind_ipsread -p "$(echo -e "${YELLOW}绑定IP: ${NC}")" bind_ipsif [[ -z "$bind_ips" ]]; thenlog_error "未输入IP地址,使用默认配置"return 1fi# 注释掉原有的 bind 配置sed -i 's/^bind/#bind/' "$REDIS_CONF_FILE"# 添加新的 bind 配置echo "bind $bind_ips" >> "$REDIS_CONF_FILE"log_success "已配置绑定IP: $bind_ips"
}configure_protected_mode() {log_info "配置保护模式..."# 设置为 no 以允许远程连接sed -i 's/^protected-mode yes/protected-mode no/' "$REDIS_CONF_FILE"if ! grep -q "^protected-mode" "$REDIS_CONF_FILE"; thenecho "protected-mode no" >> "$REDIS_CONF_FILE"filog_success "保护模式已禁用"
}configure_redis_password() {log_info "设置 Redis 访问密码..."local passwordwhile true; doread -s -p "$(echo -e "${YELLOW}请输入 Redis 密码: ${NC}")" passwordechoif [[ -z "$password" ]]; thenecho -e "${RED}密码不能为空,请重新输入${NC}"continuefiread -s -p "$(echo -e "${YELLOW}请确认密码: ${NC}")" password_confirmechoif [[ "$password" != "$password_confirm" ]]; thenecho -e "${RED}密码不匹配,请重新输入${NC}"continuefibreakdone# 注释掉原有的密码配置sed -i 's/^requirepass/#requirepass/' "$REDIS_CONF_FILE"# 添加新的密码配置echo "requirepass $password" >> "$REDIS_CONF_FILE"log_success "Redis 密码已设置"echo -e "${YELLOW}重要: 请妥善保管密码!${NC}"
}# ----------------------------------------------------------------------------
# 防火墙配置
# ----------------------------------------------------------------------------configure_firewall() {log_info "配置防火墙..."if systemctl is-active --quiet firewalld; thenif confirm_action "是否在防火墙中开放 Redis 端口 $REDIS_PORT?"; thenfirewall-cmd --permanent --add-port=${REDIS_PORT}/tcp >> "$LOG_FILE" 2>&1 && \firewall-cmd --reload >> "$LOG_FILE" 2>&1 && {log_success "防火墙端口 $REDIS_PORT 已开放"} || {log_error "防火墙配置失败"return 1}elselog_info "跳过防火墙配置"fielselog_warn "Firewalld 未运行,跳过防火墙配置"fi
}# ----------------------------------------------------------------------------
# 重启和测试
# ----------------------------------------------------------------------------restart_and_test_redis() {log_info "重启 Redis 服务..."systemctl restart "$REDIS_SERVICE_NAME" >> "$LOG_FILE" 2>&1 || {log_error "Redis 服务重启失败"return 1}# 等待服务启动local retry=0local max_retry=10while [[ $retry -lt $max_retry ]]; doif systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenbreakfisleep 1((retry++))doneif ! systemctl is-active --quiet "$REDIS_SERVICE_NAME"; thenlog_error "Redis 服务启动失败,正在恢复备份..."restore_backup "$backup_file"return 1filog_success "Redis 服务重启成功"# 测试连接test_redis_connection
}test_redis_connection() {log_info "测试 Redis 连接..."# 获取 Redis CLI 路径local redis_cliredis_cli=$(which redis-cli 2>/dev/null || echo "/opt/redis/bin/redis-cli")if ! command -v "$redis_cli" &> /dev/null; thenlog_warn "未找到 redis-cli,跳过连接测试"return 0fi# 这里无需测试 配置远程访问 并设置密码后 需要附加密码测试才可以 这里未处理直接注释掉# if "$redis_cli" -h 127.0.0.1 -p "$REDIS_PORT" ping | grep -q "PONG"; then#     log_success "本地连接测试成功"# else#     log_error "本地连接测试失败"#     return 1# fi# 测试远程连接(如果绑定了其他IP)# if ip addr show | grep -q "192.168."; then#     local local_ip#     local_ip=$(ip addr show | grep -oP 'inet 192\.168\.\d+\.\d+' | head -1 | awk '{print $2}')#     if [[ -n "$local_ip" ]]; then#         if "$redis_cli" -h "$local_ip" -p "$REDIS_PORT" ping | grep -q "PONG"; then#             log_success "局域网连接测试成功 ($local_ip)"#         else#             log_warn "局域网连接测试失败 ($local_ip)"#         fi#     fi# fi
}# ----------------------------------------------------------------------------
# 恢复备份
# ----------------------------------------------------------------------------restore_backup() {local backup_file="$1"if [[ -f "$backup_file" ]]; thenlog_info "正在从备份恢复配置..."cp "$backup_file" "$REDIS_CONF_FILE" && \systemctl restart "$REDIS_SERVICE_NAME" && {log_success "配置已从备份恢复: $backup_file"} || {log_error "恢复备份失败"}elselog_error "备份文件不存在: $backup_file"fi
}# ----------------------------------------------------------------------------
# 显示配置摘要
# ----------------------------------------------------------------------------show_config_summary() {echo -e "${BLUE}=========================================${NC}"echo -e "${BLUE}        Redis 远程访问配置摘要          ${NC}"echo -e "${BLUE}=========================================${NC}"echo -e "\n${PURPLE}当前配置:${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "绑定地址            : ${GREEN}$(grep "^bind" "$REDIS_CONF_FILE" | tail -1)${NC}"echo -e "保护模式            : ${GREEN}$(grep "^protected-mode" "$REDIS_CONF_FILE" | tail -1)${NC}"echo -e "服务端口            : ${GREEN}$REDIS_PORT${NC}"if grep -q "^requirepass" "$REDIS_CONF_FILE"; thenecho -e "密码保护            : ${GREEN}已启用${NC}"elseecho -e "密码保护            : ${RED}未启用${NC}"fiecho -e "\n${PURPLE}连接信息:${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "本地连接            : ${GREEN}redis-cli -h 127.0.0.1 -p $REDIS_PORT${NC}"local local_iplocal_ip=$(ip addr show | grep -oP 'inet 192\.168\.\d+\.\d+' | head -1 | awk '{print $2}')if [[ -n "$local_ip" ]]; thenecho -e "局域网连接          : ${GREEN}redis-cli -h $local_ip -p $REDIS_PORT${NC}"fiecho -e "\n${PURPLE}安全建议:${NC}"echo -e "${WHITE}-----------------------------------------${NC}"echo -e "${YELLOW}● 确保防火墙已正确配置${NC}"echo -e "${YELLOW}● 使用强密码保护 Redis 实例${NC}"echo -e "${YELLOW}● 定期监控 Redis 日志${NC}"echo -e "${YELLOW}● 考虑使用 SSL/TLS 加密连接${NC}"echo -e "\n${BLUE}=========================================${NC}"
}# ----------------------------------------------------------------------------
# 主执行流程
# ----------------------------------------------------------------------------main() {# 初始化日志echo "Redis 远程访问配置日志 - $(date)" > "$LOG_FILE"# 显示横幅print_header# 检查前提条件check_rootcheck_redis_installedcheck_redis_service# 显示警告信息echo -e "${YELLOW}⚠️  安全警告:${NC}"echo -e "${YELLOW}配置 Redis 远程访问可能会带来安全风险!${NC}"echo -e "${YELLOW}请确保:${NC}"echo -e "  • 配置强密码认证"echo -e "  • 正确配置防火墙"echo -e "  • 仅允许可信网络访问"echo ""if ! confirm_action "您确定要配置 Redis 远程访问吗?"; thenlog_info "用户取消操作"exit 0fi# 备份配置local backup_filebackup_file=$(backup_config) || exit 1# 配置远程访问configure_remote_access "$backup_file"# 配置防火墙configure_firewall# 重启并测试if restart_and_test_redis; thenlog_success "Redis 远程访问配置成功完成!"show_config_summaryelselog_error "配置过程中出现问题"if confirm_action "是否恢复之前的配置?"; thenrestore_backup "$backup_file"fiexit 1fi
}# ----------------------------------------------------------------------------
# 脚本入口点
# ----------------------------------------------------------------------------# 捕获中断信号
trap 'echo ""; log_warn "操作被用户中断"; exit 1' INT TERM# 执行主函数
main "$@"

🔍 远程访问执行过程


🚀 快速安装方式

方法1:一键脚本安装

# 下载脚本
wget -O install-redis.sh https://raw.githubusercontent.com/example/install-redis/master/install-redis.sh
​
# 添加执行权限
chmod +x install-redis.sh
​
# 运行安装
sudo ./install-redis.sh

方法2:各系统快速安装

# Ubuntu/Debian
sudo apt update && sudo apt install -y redis-server redis-tools
sudo systemctl enable redis-server && sudo systemctl start redis-server
​
# CentOS/RHEL/Amazon Linux
sudo yum install -y epel-release
sudo yum install -y redis
sudo systemctl enable redis && sudo systemctl start redis
​
# 检查状态
redis-cli ping

⚙️ 常用管理命令

#查看Redis服务进行
ps -ef | grep redis
​
# 服务管理
sudo systemctl start redis      # 启动
sudo systemctl stop redis       # 停止
sudo systemctl restart redis    # 重启
sudo systemctl status redis     # 查看状态
sudo systemctl enable redis     # 设置开机自启
​
# Redis CLI 操作
redis-cli -h 127.0.0.1 -p 6379 -a <password>    # 连接Redis
redis-cli ping                                  # 测试连接
redis-cli info                                  # 查看信息
redis-cli info memory                           # 查看内存信息
redis-cli info clients                          # 查看客户端信息
redis-cli monitor                               # 监控命令
​
# 数据操作
redis-cli set key "value"       # 设置键值
redis-cli get key               # 获取值
redis-cli keys "*"              # 查看所有键
redis-cli flushdb               # 清空当前数据库
redis-cli flushall              # 清空所有数据库
​
# 删除
INSTALL_DIR="/usr/local/redis"
DATA_DIR="/var/lib/redis"
LOG_DIR="/var/log/redis"
​
sudo find / -name "*redis*"  # 查找Redis所有相关文件
sudo rm -rf /usr/local/redis # 删除Redis安装目录
sudo rm -rf /var/lib/redis # 删除Redis数据目录
sudo rm -rf /etc/redis # 删除Redis配置文件
sudo rm -rf /var/log/redis  # 删除Redis日志目录

📁 重要目录和文件

/usr/local/redis/               # Redis安装目录
├── bin/                        # 二进制文件
│   ├── redis-server           # 服务器
│   ├── redis-cli              # 命令行客户端
│   └── redis-benchmark        # 性能测试工具
├── etc/redis.conf             # 主配置文件
/var/lib/redis/                 # 数据目录
/var/log/redis/                 # 日志目录
/etc/systemd/system/redis.service # 服务文件

🔧 常用配置修改

修改监听地址和端口

sudo vi /usr/local/redis/etc/redis.conf
# 修改 bind 和 port 配置

配置内存策略

# 在配置文件中修改
maxmemory 2gb
maxmemory-policy allkeys-lru

启用AOF持久化

appendonly yes
appendfsync everysec

配置主从复制

在从节点配置文件中添加:

replicaof <master-ip> <master-port>
masterauth <master-password>

🔍 安装验证和测试

# 检查服务状态
sudo systemctl status redis# 检查端口监听
netstat -tulpn | grep 6379
ss -tulpn | grep 6379# 测试连接
redis-cli -h 127.0.0.1 -p 6379 -a <password> ping# 性能测试
redis-benchmark -h 127.0.0.1 -p 6379 -a <password> -q -n 100000# 查看统计信息
redis-cli -h 127.0.0.1 -p 6379 -a <password> info# 创建测试数据
for i in {1..1000}; doredis-cli -h 127.0.0.1 -p 6379 -a <password> set "key:$i" "value:$i"
done

🔍 客户端连接测试


这个脚本提供了完整的Redis安装方案,包括安全配置、性能优化和集群支持,适合生产环境使用!

http://www.dtcms.com/a/500370.html

相关文章:

  • 建站的cms哪个网站做图找图片
  • 网站域名续费后SEO查询未更换科技小巨人申报条件
  • python super【python】
  • python迭代器解包【python】
  • 企业网站建设渠道外贸网站建设报价表
  • 在 VS Code 里看清你的数据流向:Gudu SQL Omni 实测体验
  • 前缀和|并查集
  • 如何开网站详细步骤图wordpress高并发
  • 视频网站开发要多少钱手机版的网站怎样做呢
  • 做网站的工作好做吗济南品牌网站建设
  • 最简单的网站开发工具全国建筑信息服务平台
  • 免费cms建站五指哪里有永久免费建站
  • S1-算法效率分析
  • TDengine 数据函数 LN 用户手册
  • 做问卷有哪些网站做360全景有什么网站
  • 东莞网站推广营销网站生成
  • 网站管理助手数据库企业邮箱网页版
  • 算法代码速成8:非线性最小二乘问题编程示例:人口预测
  • 网站建设的目标和需求分析比较好的公关公司
  • 视频播放网站怎么做三亚市住房和城乡建设厅网站
  • 用HarmonyOS中ArkTS的视角来学Dart语法(一)
  • 哪个网站做外贸年费比较便宜wdcp网站无法访问
  • 免费网站建设公司推荐最简单的网站模板下载
  • ConcurrentHashMap 1.7 vs 1.8 源码对决:分段锁 → CAS + synchronized
  • 应急响应—特洛伊挖矿木马事件排查
  • 建个购物网站要多少钱个人网页简历设计
  • 18-自编码器:探讨用于特征学习和数据压缩的神经网络模型
  • 网站结构 seo腾讯短网址在线生成
  • wapi与wifi对比优势总结
  • 上传网站到googleui设计网站建设是什么意思