阿里云部署MySQL、Redis、RocketMQ,附超全教程文档

START SLAVE; 命令用于启动 MySQL 的主从复制功能。如果配置的时候主从,但是在同步过程中出现异常错误,则会打断主从同步,并且需要重新手动重新配置,而这个过程需要每隔一段时间监听,使用SHOW SLAVE STATUS\G; 命令来查看从服务器的复制状态,这可能就需要通过手写程序或者使用某云产品来实现。

Redis集群配置

执行编写脚本docker-redis-cluster.sh:

vim docker-redis-cluster.sh

#!/bin/bash  
# 循环执行6次  
for i in $(seq 6)  
do  
  # 设置端口号  
  PORT=637$i    
  # 获取当前主机的IP地址  
  REDIS\_CLUSTER\_IP=$(hostname -I | awk '{print $1}')    
  # 设置配置文件路径  
  CONFIG\_FILE="/opt/software/rediscluster/conf/redis-$i.conf"  
  # 检查配置文件是否存在,如果存在并且是目录,则删除  
  if [ -d "$CONFIG\_FILE" ]; then  
    echo "配置文件$CONFIG\_FILE已经是一个目录,正在删除它..."  
    rm -rf "$CONFIG\_FILE"  
  fi  
  
  # 检查模板文件是否存在  
  if [ ! -f /opt/software/rediscluster/conf/redis.conf ]; then  
    echo "模板文件/opt/software/rediscluster/conf/redis.conf不存在,请确保它存在并且包含正确的占位符。"  
    exit 1  
  fi  
  
  # 通过sed命令替换模板文件中的占位符,生成实际的配置文件  
  sed "s/PORT/${PORT}/g;s/REDIS\_CLUSTER\_IP/${REDIS\_CLUSTER\_IP}/g;" /opt/software/rediscluster/conf/redis.conf > "$CONFIG\_FILE"    
  # 使用docker运行Redis容器,并挂载配置文件和数据目录  
  docker run -d --name redis-node-$i --restart=unless-stopped --net host --privileged=true -v /opt/software/rediscluster/node/redis-node-$i:/data -v "$CONFIG\_FILE":/etc/redis/redis.conf redis:7.2.4 redis-server /etc/redis/redis.conf  
done

redis.conf配置文件

# Redis配置文件示例  
# 绑定到所有网络接口  
bind 0.0.0.0
# 保护模式设置为no,这样Redis就可以接受来自任何主机的连接  
protected-mode no
# Redis 集群节点监听的端口  
port PORT
# TCP backlog的数量,默认是1500,在高并发环境下你可能需要增加这个值。同时需要编辑sudo nano /etc/sysctl.conf文件,添加或者编辑net.core.somaxconn = 1500,在 nano 编辑器中,按 Ctrl + O(这是“O”字母,不是数字零)。这将会提示你保存文件。如果文件是第一次创建或之前没有被修改过,它会询问你文件名,此时你可以直接按 Enter 键确认使用当前的文件名。如果文件已经被修改过,它会直接保存更改。保存文件后,按 Ctrl + X。这将会退出 nano 编辑器并返回到终端。否则会出现提示 TCP 的 backlog 设置(1500)不能强制执行,因为 /proc/sys/net/core/somaxconn 的值被设置为更低的 128。/proc/sys/net/core/somaxconn 是一个内核参数,它定义了系统中每一个端口上排队的最大 TCP 连接数。sudo sysctl -p
tcp-backlog 1500
# 开启集群模式
cluster-enabled yes
# 超时时间,超时则认为master宕机,随后主备切换。单位是毫秒  
cluster-node-timeout 5000
# 集群配置文件的路径,Redis 集群节点会自动创建和更新这个文件  
cluster-config-file nodes-PORT.conf
#集群各节点IP地址,记得修改为你的ip地址
cluster-announce-ip REDIS\_CLUSTER\_IP
#集群节点映射端口 
cluster-announce-port PORT
#集群总线端口 
cluster-announce-bus-port 1PORT 
# TCP 后台线程和I/O线程:如果启用了 TCP 后台线程(io-threads-do-reads)或 I/O 线程(io-threads),确保为这些线程配置了正确的 CPU 内核列表(server_cpulist、bio_cpulist 等)。
io-threads-do-reads yes
io-threads 4
# Redis Server绑定到的CPU内核列表,这里绑定到CPU 0和1  
server_cpulist 0-1 
# 后台I/O线程绑定到的CPU内核列表,这里绑定到CPU 2和3  
bio_cpulist 2-3
# AOF重写进程绑定到的CPU内核列表,这里绑定到CPU 4  
aof_rewrite_cpulist 4 
# RDB持久化进程绑定到的CPU内核列表,这里绑定到CPU 5  
bgsave_cpulist 5
# 启用AOF持久化  
appendonly yes
# AOF文件名称  
appendfilename "appendonly.aof"
# appendonly 文件同步策略,always 表示每个写命令都立即同步,everysec 表示每秒同步一次,no 表示由操作系统决定何时同步  
appendfsync everysec
# 密码设置  
requirepass admin
# Redis集群启用了密码验证,那么除了在每个节点的配置文件中设置requirepass之外,还需要设置masterauth
masterauth admin
# 禁用 RDB 快照持久化,因为集群模式下有节点复制功能  
save ""
# 禁用 AOF 重写
auto-aof-rewrite-percentage 0
auto-aof-rewrite-min-size 0

配置过程

通常情况下内存overcommit(超额提交)未启用,这可能在内存不足的情况下导致后台保存或复制失败。即使在不出现内存不足的情况下,这也可能导致失败。在/etc/sysctl.conf文件中添加vm.overcommit_memory = 1,然后重启系统以启用内存overcommit。

[root@node3 rediscluster]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.core.somaxconn = 1500
sysctl vm.overcommit_memory = 1


或者执行以下命令并查看是否更改成功。

sysctl -w vm.overcommit\_memory=1

然后重启服务器,执行以下命令运行脚本:

chmod 777 /opt/software/rediscluster/conf/redis.conf
chmod 777 /opt/software/rediscluster/docker-redis-cluster.sh
sh docker-redis-cluster.sh

docker exec -it redis-node-1 bash

用私网ip:
在这里插入图片描述

redis-cli  -a admin --cluster create 10.0.0.14:6371 10.0.0.14:6372 10.0.0.14:6373 10.0.0.14:6374 10.0.0.14:6375 10.0.0.14:6376 --cluster-replicas 1

在这里插入图片描述我的Redis实例是在Docker容器内部运行的,应该使用容器内部或宿主机的私有IP地址,而不是公网IP地址。使用的是宿主机公网IP,需要确保防火墙或安全组规则允许外部连接到这些端口。

但是如果防火墙关闭了,就需要使用公网ip,否则客户端连接不上。

redis-cli  -a admin --cluster create 8.138.135.85:6371 8.138.135.85:6372 8.138.135.85:6373 8.138.135.85:6374 8.138.135.85:6375 8.138.135.85:6376 --cluster-replicas 1

redis-cli -p 6371 -a admin

cluster info 

cluster nodes

在这里插入图片描述

RocketMQ

配置runserver.sh

mkdir -p /opt/software/rocketmqcluster/bin
vi /opt/software/rocketmqcluster/bin/runserver.sh

#!/bin/bash

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#===========================================================================================
# Java Environment Setting
#===========================================================================================
error\_exit ()
{
    echo "ERROR: $1 !!"
    exit 1
}

find\_java\_home()
{
    case "`uname`" in
        Darwin)
            JAVA\_HOME=$(/usr/libexec/java\_home)
        ;;
        *)
            JAVA\_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
        ;;
    esac
}

find_java_home

[ ! -e "$JAVA\_HOME/bin/java" ] && JAVA\_HOME=$HOME/jdk/java
[ ! -e "$JAVA\_HOME/bin/java" ] && JAVA\_HOME=/usr/java
[ ! -e "$JAVA\_HOME/bin/java" ] && error_exit "Please set the JAVA\_HOME variable in your environment, We need java(x64)!"

export JAVA_HOME
export JAVA="$JAVA\_HOME/bin/java"
export BASE\_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE\_DIR}/conf:${CLASSPATH}

#===========================================================================================
# JVM Configuration
#===========================================================================================
calculate\_heap\_sizes()
{
    case "`uname`" in
        Linux)
            system\_memory\_in\_mb=`free -m| sed -n '2p' | awk '{print $2}'`
            system\_cpu\_cores=`egrep -c 'processor([[:space:]]+):.\*' /proc/cpuinfo`
        ;;
        FreeBSD)
            system\_memory\_in\_bytes=`sysctl hw.physmem | awk '{print $2}'`
            system\_memory\_in\_mb=`expr $system\_memory\_in\_bytes / 1024 / 1024`
            system\_cpu\_cores=`sysctl hw.ncpu | awk '{print $2}'`
        ;;
        SunOS)
            system\_memory\_in\_mb=`prtconf | awk '/Memory size:/ {print $3}'`
            system\_cpu\_cores=`psrinfo | wc -l`
        ;;
        Darwin)
            system\_memory\_in\_bytes=`sysctl hw.memsize | awk '{print $2}'`
            system\_memory\_in\_mb=`expr $system\_memory\_in\_bytes / 1024 / 1024`
            system\_cpu\_cores=`sysctl hw.ncpu | awk '{print $2}'`
        ;;
        *)
            # assume reasonable defaults for e.g. a modern desktop or
            # cheap server
            system\_memory\_in\_mb="2048"
            system\_cpu\_cores="2"
        ;;
    esac

    # some systems like the raspberry pi don't report cores, use at least 1
    if [ "$system\_cpu\_cores" -lt "1" ]
    then
        system\_cpu\_cores="1"
    fi

    # set max heap size based on the following
    # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
    # calculate 1/2 ram and cap to 1024MB
    # calculate 1/4 ram and cap to 8192MB
    # pick the max
    half\_system\_memory\_in\_mb=`expr $system\_memory\_in\_mb / 2`
    quarter\_system\_memory\_in\_mb=`expr $half\_system\_memory\_in\_mb / 2`
    if [ "$half\_system\_memory\_in\_mb" -gt "1024" ]
    then
        half\_system\_m
  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值