ECS实例搭建与维护--【培训】

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: ECS实例搭建与维护--【培训】

一、阿里云相关

1、内网互通介绍;各环境隔离测试,主要是数据库相关连接必须完全隔离;

1、经典网络不能直接内网通信,专有网络可以;
2、不同地区不能直接内网通信(例如华东、华北就不能),同地区的不同可用区(例如 华东1中:可用区 I 和 可用区 G)是可以内网通信的;
3、并且需要在同一个安全组,才能内网端口互通;

2、安全组规则注意点:

1、80、443端口全网开放,用于nginx反向代理,访问我们的服务;
2、 ICMP(IPv4)开放,用于ping测试;

3、快照策略

设置快照策略,对服务器磁盘进行备份

4、使用阿里云云监控大盘

二、软件搭建

0、数据盘挂载

参考博客:https://blog.csdn.net/wyzhangchengjin123/article/details/50451065

1、 防火墙:

# 查看防火墙详细状态信息:
systemctl status firewalld
# 查看防火墙运行状态:
firewall-cmd --state
# 关闭/启动 防火墙:
systemctl stop/start firewalld.service
# 禁止/允许 开机启动:
systemctl disable/enable firewalld.service

2、更换阿里源

 cd /etc/yum.repos.d/
 mv CentOS-Base.repo CentOS-Base.repo.back  #建议备份或者改名
 wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 yum makecache #生成缓存

3、安装wget命令 netstat

yum -y install wget
yum -y install net-tools

4、安装telnet

# 一、安装telnet
step 1、rpm -qa telnet-server(无输出表示telnet-server未安装,则执行step2;否则执行step3)
step 2、yum -y install telnet-server(安装telnet-server)
step 3、rpm -qa telnet(无输出表示telnet未安装,则执行step4,否则执行step5)
    [root@dev09 xinetd.d]# rpm -qa telnet
    telnet-0.17-64.el7.x86_64
step 4、yum -y install telnet(安装)
# 二、重新启动xinetd守护进程
由于telnet服务也是由xinetd守护的,所以安装完telnet-server后,需要重新启动xinetd守护进程
step 5、service xinetd restart(如果启动正常直接跳到step7)
unit not found 说明xinetd未安装
step 6、yum -y install xinetd (安装xinetd,然后在继续执行step5)
# 三、测试
查看tcp的23端口是否正常开启
step 7、netstat -tnl |grep 23 (如果无输出说明未正常启动,则step8;否则整个安装过程完成)

5、安装jdk1.8:

mkdir -p /usr/local/software/jdk1.8
cd /usr/local/software/jdk1.8
# 复制jdk到此目录,解压即可
tar -zxvf    ./jdk-8u201-linux-x64.tar.gz
mv ./jdk1.8.0_201  ./jdk1.8

vi   /etc/profile
export JAVA_HOME=/usr/local/software/jdk1.8/jdk1.8
export PATH={
   
   mathJaxContainer[0]}PATH
export CLASSPATH=.:{
   
   mathJaxContainer[1]}JAVA_HOME/lib/tools.jar

source  /etc/profile
java -version

6、安装docker

yum -y install gcc
yum -y install gcc-c++

# 安装工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce
# 查看版本:yum list docker-ce --showduplicates | sort -r
# 安装指定版本:sudo yum install docker-ce-17.12.0.ce-1.el7.centos
# 安装最新版:
yum -y install docker-ce docker-ce-cli containerd.io

# 配置docker的加速镜像
mkdir /etc/docker
touch /etc/docker/daemon.json
# 添加内容:
echo "{ "registry-mirrors": ["https://hpz13v4e.mirror.aliyuncs.com"] }" >> /etc/docker/daemon.json

# 重启配置
systemctl daemon-reload
systemctl restart docker
# 若restart很长时间没响应,可以先stop 再 start
systemctl stop   docker
systemctl start  docker

# 设置docker 开机自启动
systemctl enable docker

7、安装docker-compose

1、运行此命令以下载Docker Compose的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
地址二(推荐):
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-{
   
   mathJaxContainer[3]}(uname -m) > /usr/local/bin/docker-compose
要安装不同版本的Compose,请替换1.24.0 为要使用的Compose版本。
遇到问题可以参考的文档:https://docs.docker.com/compose/install/#alternative-install-options
2、对二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose

注意:如果docker-compose安装后命令失败,请检查您的路径。您还可以创建/usr/bin路径中的符号链接或任何其他目录。
例如:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

3、验证安装:docker-compose --version

8、安装nginx

yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y openssl openssl-devel
mkdir  -p   /usr/local/software/nginx
cd    /usr/local/software/nginx
wget   http://nginx.org/download/nginx-1.18.0.tar.gz
tar  -zxvf  nginx-1.18.0.tar.gz
cd nginx-1.18.0
# ./configure --prefix=/usr/local/software/nginx    # 注意参考下面的ssl模块配置,看自己是否需要ssl

make
make install

cd ../
rm -rf ./nginx-1.18.0*
./sbin/nginx –t        # 检查配置
./sbin/nginx        #   启动
./sbin/nginx     –s  reload    #  刷新配置重启
./sbin/nginx   -s   stop       #   停止 


# Nginx如果未开启SSL模块,配置Https 时提示错误:nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in
# 开启ssl模块的配置:
./configure --prefix=/usr/local/software/nginx --with-http_stub_status_module --with-http_ssl_module
# 配置后make
make
make  install     # 注意覆盖的问题,先备份好配置文件


# docker  安装nginx: 1.17.6  【不推荐使用】
# docker pull nginx:1.17.6
# mkdir -p /mymount/nginx/{etc/nginx,usr/local/front}
# 复制需要的配置文件和前端文件到此目录
# docker run --name nginx -d -p 80:80 -v /mymount/nginx/etc/nginx/credential:/credential  -v /mymount/nginx/etc/nginx:/etc/nginx/mymount -v /mymount/nginx/usr/local/front:/usr/local/front nginx:1.17.6

9、安装redis

mkdir  /usr/local/redis
cd   /usr/local/redis
wget http://download.redis.io/releases/redis-5.0.5.tar.gz     

tar -zxvf redis-5.0.5.tar.gz
mv redis-5.0.5   ./redis

# 因为是C语言写的程序,所以需要make编译一下,所以需要先安装gcc、gcc-c++
yum  -y  install  gcc      
yum -y  install  gcc-c++

cd  redis         # 进入解压后的目录
make       # 编译
make install PREFIX=/usr/local/redis  #  默认是/usr/local/bin ,安装到指定目录下的bin文件夹下(bin自动创建)
cd ../bin    # 进入bin目录
./redis-server      # 启动(默认在前台启动)
# 新开一个窗口连接,启动客户端连接  ./redis-cli

# 配置文件参考之前的服务器
cd  /usr/local/redis/bin  # 将redis.conf配置文件放入
 # 使用配置文件启动:  
./redis-server  ./redis.conf

10、docker安装solr7.6.0

mkdir -p /mymount/solr/{
   
   lib,conf,data}
docker  pull  solr:7.6.0
docker run --name solr-front -p 8983:8983 -d  -v /mymount/solr/lib:/mymount/lib -v /mymount/solr/conf:/mymount/conf -v /mymount/solr/data:/mymount/data solr:7.6.0
# 将准备好的配置文件managed-schema、和分词包、备份过来的data文件夹 分别放入挂载的文件夹中
# 可以通过在页面上创建 "product-core"  得到容器中core的路径

image-20200903163705527

# 1、进入solr容器
docker exec -it solr-front /bin/bash
# 2、复制配置文件到core文件夹
cp -r  /opt/solr/server/solr/configsets/_default/conf   /opt/solr/server/solr/product-core/
# 3、复制自定义配置文件和分词,以及备份的数据 到对应的目录:
cp /mymount/conf/managed-schema /opt/solr/server/solr/product-core/conf
cp  /mymount/lib/*  /opt/solr/server/solr-webapp/webapp/WEB-INF/lib/
cp -r /mymount/data/* /opt/solr/server/solr/product-core/data/

# 若有自定义扩展字典,放/opt/solr/server/solr-webapp/webapp/WEB-INF/classes文件夹下即可
# 重启solr
docker  restart solr-front
# 4、再去solr页面创建core  "product-core"

11、docker安装mysql

1、创建目录 mkdir -p /mymount/mysql/{
   
   var/lib/mysql,/etc/mysql/mysql.conf.d,var/log,mybackupsql}
2、复制配置文件 mysql.cnf 到 /mymount/mysql/etc/mysql/mysql.conf.d/ 
3、复制需要导入的sql文件到 /mymount/mysql/mybackupsql/
3、运行容器并挂载目录:
docker run --name commysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mymount/mysql/etc/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d -v /mymount/mysql/var/lib/mysql:/var/lib/mysql -v /mymount/mysql/var/log:/var/log  -v /mymount/mysql/mybackupsql:/mybackupsql -d mysql:5.7

# 换个端口启动(我们项目中用下面这个命令安装)
docker run --name mysql5.7 -p 33666:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mymount/mysql/etc/mysql/mysql.conf.d:/etc/mysql/mysql.conf.d -v /mymount/mysql/var/lib/mysql:/var/lib/mysql -v /mymount/mysql/var/log:/var/log  -v /mymount/mysql/mybackupsql:/mybackupsql -d mysql:5.7   

# mysql 8 的安装
docker pull mysql:8.0.21
1、创建目录 mkdir -p /mymount/mysql8/{
   
   var/lib/mysql,/etc/mysql/conf.d,var/log,mybackupsql}
2、复制配置文件 mysql.cnf 到 /mymount/mysql8/etc/mysql/conf.d/
3、复制需要导入的sql文件到 /mymount/mysql8/mybackupsql/
3、运行容器并挂载目录:
docker run --name mysql8 -p 33666:3306 -p 33060:33060 -p 33061:33061 -p 33062:33062 -e MYSQL_ROOT_PASSWORD=123456 -v /mymount/mysql8/etc/mysql/conf.d:/etc/mysql/conf.d -v /mymount/mysql8/var/lib/mysql:/var/lib/mysql -v /mymount/mysql8/var/log:/var/log  -v /mymount/mysql8/mybackupsql:/mybackupsql -d mysql:8.0.21


# 修改密码
docker  exec  -it  [name/id]  /bin/bash
mysql -uroot -p123456
use  mysql;
desc user;   
select host , user, authentication_string  from user;       查询用户密码
update  user set authentication_string=password("erwer") where host="%";      先修改远程用户,如果有问题还可以本地登录上来修改
update  user set authentication_string=password("erwer") where user="root";   确认远程修改没问题后,再次修改全部root用户
# mysql8.0.21 修改密码:
ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'password';
#  重启mysql容器

# 创建数据库时注意编码问题:
create database  [name]  default character set utf8mb4  collate  utf8mb4_unicode_ci;
# 查看mysql编码:
show variables like "character_set_%";

12、docker 安装RabbitMQ

docker pull rabbitmq:3.8.5-management

docker run -d \
-e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 \
-p 5672:5672 -p 15672:15672  \
--name rabbitmq \
rabbitmq:3.8.5-management

13、docker安装 elasticsearch

docker pull elasticsearch:7.2.0
docker network create somenetwork
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.2.0

三、服务器其他配置

1、配置hosts解析

vim /etc/hosts

172.16.243.51  server-a-1

2、修改ssh连接端口配置

1、修改shh配置:vi /etc/ssh/sshd_config
找到#Port 22
在下面再添加一行,将端口改为2000
Port 2000
2、重启服务命令:/bin/systemctl restart sshd.service
3、添加安全组规则,修改22端口为2000

3、配置软件自动启动

docker容器:

# 设置启动策略  
docker run    --restart always   --name mynginx -d  nginx

# 如果容器已经被创建,我们想要修改容器的重启策略
docker update --restart no     [容器名称]
docker update --restart=always  [容器名称]

开机执行shell脚本

-- redis、nginx

touch /usr/local/center-service.sh
vi /usr/local/center-service.sh
#!/bin/bash
#加载系统环境变量
. /etc/profile
#启动tomcat [这里启动无效]
  #/home/tomcat/apache-tomcat-8.0.36/bin/startup.sh
#启动nginx
    /usr/local/nginx/sbin/nginx
#启动redis
    cd /usr/local/redis/bin
    ./redis-server   ./redis.conf
# 编辑完成后
chmod +x /usr/local/center-service.sh
chmod +x  /etc/rc.d/rc.local

vi  /etc/rc.d/rc.local
# 最后面加上一行:
/usr/local/center-service.sh

-- tomcat

1、复制tomcat的bin目录下的catalina.sh:
cp -p /usr/local/tomcat7/apache-tomcat-7.0.92/bin/catalina.sh  /etc/init.d/tomcat7
2、vi /etc/init.d/tomcat7
# 在第二行加入如下内容:
# chkconfig: 112 63 37
# description: tomcat server init script
# Source Function Library
. /etc/init.d/functions

JAVA_HOME=/usr/local/jdk/            # 自己的jdk路径
CATALINA_HOME=/usr/local/tomcat      # 自己的tomcat路径
3、授权          chmod 755 /etc/init.d/tomcat7
4、添加到服务:   chkconfig --add tomcat7
5、开机启动:     chkconfig tomcat7 on
6、测试启停:
service tomcat7  stop/service tomcat7 start
# 如果出现:service tomcat7 does not support chkconfig
# 则在服务脚本前面加上这个(替换原来的,#号要保留):

#chkconfig: - 85 15
#description: nginx is a World Wide Web server. It is used to serve

重启服务器测试效果:reboot

四、日常维护

1、挖矿

常见挖矿进程:
kdevtmpfsi
kinsing 为它的守护进程

ps -aux | grep kinsing
删除两个进程文件
find / -name kdevtmpfsi 
kill -9 杀死该进程
kill -9 杀死守护进程

其他:
检查定时任务 crontab
查看是否有陌生用户
检查ssh  authorized_keys
使用阿里云安全组白名单

相关链接:

https://blog.csdn.net/u014589116/article/details/103705690

https://blog.csdn.net/daiyuhe/article/details/95683393

https://www.cnblogs.com/menmenz/archive/2019/10/09/11642166.html

2、ECS磁盘清理

du -h --max-depth=1
统计当前目录所有内容占磁盘空间大小
--max-depth=1:其中,数字“1”是指查询结果中最多显示的目录层数,这里指最多显示一层目录。

常见问题: /var/lib/docker/containers 目录导致系统存储爆满,占用大量存储解决方案

docker生成的这些文件中占用空间最大的是*-json.log文件
进入json.log文件所在目录:
清除内容,而不删除文件
cat /dev/null > *-json.log

清除之后,docker依旧会继续产生日志

3、释放内存缓存

# 1、查看内存使用情况
free  -wh     
# 2、使用sync命令,将缓存写入文件中;
# 手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
sync
# 3、清理( 默认是0,  1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存。)一般执行3即可
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

4、Linux定时更新服务器时间

# 手动更新服务器时间:
ntpdate asia.pool.ntp.org

# 定时任务更新,每小时更新一次:
* */1 * * *  ntpdate asia.pool.ntp.org

5、定时任务

https://www.cnblogs.com/songhuasheng/p/10187333.html

五、容器化

1、一个服务容器化部署用到的脚本

(例如:order-server):

docker-compose.yml

version: '3.6'
services:
  order:
    restart: always
    build: .
    container_name: order-server
    ports:
      - 8010:8010
    volumes:
      - './logs:/nnhx-order/logs'
      - /etc/localtime:/etc/localtime
    environment:
      - TZ=Asia/Shanghai
    extra_hosts:
     - "server-c-1:172.16.0.82"
     - "server-c-2:172.16.244.29"
     - "server-c-3:172.16.0.35"
     - "server-c-4:172.16.0.34"

Dockerfile

FROM openjdk:8
MAINTAINER nnhx
ADD  nnhx-order-0.0.1-SNAPSHOT.jar  app.jar
ENTRYPOINT java -jar app.jar

start.sh

docker-compose down
docker rmi  order-server_order
docker-compose up -d

2、需要的软件以及主要用到的几个命令:

  • 软件: git gradle maven
  • ssh,authorized_keys配置
  • 主要命令:
git  
mvn
gradle
ssh
scp

3、自动化部署:

思路:

在一台服务器上:拉取代码,构建,备份推送,执行远程脚本

例: ./build-order.sh

#!/bin/bash

. /etc/profile

#服务器ip
ssh_ip_pub=116.62.22.122
ssh_ip=172.16.0.32
#服务器登陆端口
ssh_port=22
#服务器登陆用户
ssh_name=root

#项目地址
project_path=/ecsmount/docker/java_project/nnhx-group
#打包地址(注意:下方登陆远程服务器中执行的命令需要手动修改)
start_path=/usr/local/docker/order-server
#哪个分支
feature_name=test-lan
#需要打包的模块名
module_name=nnhx-order
#jar包名字
jar_name=nnhx-order-0.0.1-SNAPSHOT.jar
#备份jar包名字
back_name=nnhx-order-0.0.1-SNAPSHOT.jar-back-build
#构建后的jar包路径
build_path={
   
   mathJaxContainer[4]}module_name/build/libs/$jar_name

# 时间参数(不需要修改)
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间



echo  -e "\033[36m\n欢迎使用脚本构建-【$module_name】\n\033[0m"

echo 切换路径:
cd $project_path
pwd
echo  -e "\033[36m>>>>>>>>>>>>>>>>>拉取分支【$feature_name】最新代码...\033[0m"
git checkout $feature_name
git pull

echo  -e "\033[36m>>>>>>>>>>>>>>>>>最近一次提交记录:\033[0m"
git show --stat

echo  -e "\033[36m>>>>>>>>>>>>>>>>>【$module_name】模块clean...\033[0m"
gradle  $module_name:clean
echo  -e "\033[36m>>>>>>>>>>>>>>>>>【$module_name】模块构建(已跳过test)...\033[0m"
gradle  $module_name:build -x test
echo  -e "\033[36m>>>>>>>>>>>>>>>>>服务器地址:【$ssh_ip_pub】    LAN:【$ssh_ip】\033[0m"

echo  -e "\033[36m>>>>>>>>>>>>>>>>>备份服务器上最近构建的一个jar包...\033[0m"
ssh -p {
   
   mathJaxContainer[6]}ssh_name@{
   
   mathJaxContainer[7]}start_path/{
   
   mathJaxContainer[8]}start_path/{
   
   mathJaxContainer[9]}backup_time

echo  -e "\033[36m>>>>>>>>>>>>>>>>>复制本地jar包至服务器...\033[0m"
scp -P {
   
   mathJaxContainer[10]}build_path  {
   
   mathJaxContainer[11]}ssh_ip:$start_path

echo  -e "\033[36m>>>>>>>>>>>>>>>>>登陆服务器启动start脚本...\033[0m"
ssh -p {
   
   mathJaxContainer[12]}ssh_name@$ssh_ip  << EOF
echo 切换到服务路径:
cd /usr/local/docker/order-server
pwd
./start.sh
EOF

echo  -e "\033[36m\n【$module_name】部署完成!感谢您的使用!!!\n\033[0m"

六、数据备份脚本 + crontab 定时任务

1、mysql备份脚本

docker版:

#!/bin/bash

# 以下配置信息请自己修改
dockerDbName="mysql5.7"
mysql_user="root" #MySQL备份用户
mysql_password="yourPassword" #MySQL备份用户的密码
mysql_host="127.0.0.1"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("db1" "db2" "db3")              #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/mnt/mysql/backup/dockermysql  #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON"                      #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3                                  #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
# 本行开始以下不需要修改
backup_time=`date +%Y%m%d%H%M`                 #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d`                    #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d`   #3天之前的日期

backup_dir=$backup_location/$backup_Ymd        #备份文件夹全路径
#backup_dir=$backup_location/$backup_Ymd/manual #手动备份时放开这行,备份文件夹全路径

welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
# fi
## 连接到mysql数据库,无法连接则备份退出
# mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
# use mysql;
# select host,user from user where user='root' and host='localhost';
# exit
# end

# flag=`echo $?`
# if [ $flag != "0" ]; then
# echo "ERROR:Can't connect mysql server! backup stop!"
# exit
# else
echo "MySQL connect ok! Please wait......"
# 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start..."
`mkdir -p $backup_dir`
`docker exec $dockerDbName /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup fail!"
fi

done
else
echo "ERROR:No database to backup! backup stop"
exit
fi

# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "All database backup success! Thank you!"
exit
fi

Linux版:

# 与docker版本不同的是备份的命令可以直接执行,如下:
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`

2、redis备份aof文件

  • 开启aof
# 修改redis.conf
appendonly yes
appendfilename "appendonly.aof"
  • 备份脚本
#!/bin/bash

# 以下配置信息请自己修改
backup_location=/mnt/redis/backup  #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹

# 本行开始以下不需要修改
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_3ago2=`date -d '3 days ago' +%Y%m%d` #3天之前的日期
backup_dir={
   
   mathJaxContainer[33]}backup_Ymd/redis-aof-1667-$backup_time  #备份文件夹全路径

echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>创建当前日期文件夹\033[0m"
mkdir -p $backup_dir
echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>备份aof文件\033[0m"
cp  /usr/local/redis/bin/appendonly.aof   $backup_dir/
echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>复制到远程服务器\033[0m"
scp -r -P 22  $backup_dir   root@172.16.244.22:/mymount/redis/
echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>清理本地服务器3天前文件夹\033[0m"
rm -rf {
   
   mathJaxContainer[34]}backup_3ago
echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>清理远程服务器3天前文件夹\033[0m"
ssh -p 22  root@172.16.244.22  << EOF
echo 切换到服务路径:
cd /mymount/redis/
pwd
rm -rf ./redis-aof-1667-$backup_3ago2*
EOF
echo  -e "\033[36m>>>>>>>>>>>>>>>>>>>redis备份脚本执行完毕!!!!!\033[0m"

注意:
如果修改之前redis中有数据,直接改配置文件重启,redis启动时会读取aof文件,但此时aof还是空的,所以会导致数据丢失;
解决办法:先在redis运行时使用相关命令修改,生效后,再修改配置文件重启,永久生效;

    config set appendfilename "appendonly.aof" 
    config set appendonly yes

3、solr-front备份

备份core中的data文件夹,传输到另一台服务器存放备份文件

4、tomcat-solr备份

备份solr-home中的core里面的data文件夹,传输到另一台服务器存放备份文件

5、定时任务crontab

例如:mysql每天两次备份

# 定时任务文件存放目录: /var/spool/cron
crontab -l    # 查看定时任务
crontab -e    # 编辑
0 0 * * * /mnt/mysql/backup/dockermysql/BackupDockerMysql.sh
50 12 * * * /mnt/mysql/backup/dockermysql/BackupDockerMysql.sh

七、一键环境切换

数据导入覆盖,思路:

还是利用那几个命令,在一台服务器上执行远程登录、数据推送、执行数据导入脚本

演示:stage环境数据导入一次

八、分支管理

(实时情况请参考项目doc分支的文档说明)

分支名 描述 来源 权限 Active
develop (新项目中改为了dev-stable) 上一个版本上线的代码; 新版本开发的分支基于此分支拉取; 上个版本上线稳定后从develop-jointdebug合并过来; Maintainer dev
develop-jointdebug (新项目中改为了 dev) 当前版本开发环境打包调试 各自将自己的分支合并到此分支打包开发环境调试; 若提前在此分支拉取了下个版本分支,待当前版本上线稳定后再从develop合并过来一次 Developer dev
test 需要提测的代码; 可打包本地服务器; 从develop-jointdebug合并过来 Maintainer dev
test-lan 可打包到测试环境A; 从test合并过来 Maintainer release_a
release-lan-a 可打包到线上A; 从test合并过来 Maintainer master_a
master 上个版本打包到线上的代码 上个版本上线稳定后从release-lan-a合并过来; Maintainer master_a
doc 仅用于doc中文件更新,版本迭代后合并到develop分支 develop Developer dev

1、 权限为Maintainer的分支,Developer用户可以拉取,但不能push;

2、 上线近期,会给develop-jointdebug提高权限为Maintainer,代码提交需要谨慎审核;

九、config模块使用注意事项

1、本地dev启动时:

还是与其他模块一样,修改服务名;

2、使用本地配置启动时:

  • 在 nnhx-config/src/main/resources/ 下clone我们的config仓库:
git  clone  ssh://git@47.111.133.54:8003/project/config.git
  • nnhx-config模块的配置:
  profiles:
    active: native    # 使用项目本地配置文件
    #    active: dev
    #    active: test
    #    active: master
  #    include: local    # 已弃用,config中以使用native代替local

3、配置抽取建议:

  • 首先当前模块中,不同环境可共用的,放在本地bootstrap.yml即可,个别不一样的部分使用 profiles 区分; ( 例:eureka 以及 datasource )
  • 所有模块都共用的配置可抽取到config的公共配置文件中(例如:classpath:/config/dev/application-dev.yml )
  • 需要且能够动态刷新的配置可抽取到config中;
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
弹性计算 监控 负载均衡
|
2月前
|
存储 编解码 缓存
阿里云服务器实例规格选择参考:根据业务场景选择云服务器实例规格
在阿里云服务器的购买过程中,云服务器实例规格是很多用户最难选择的一个选项,因为阿里云有着多达几十种不同的实例规格,为此,阿里云官方在云服务器购买页面新推出了一个场景化选型推荐,用户可通过自己的上云场景结合场景化选型里面的业务场景和细分场景来选择适合自己的阿里云服务器实例规格,在很大程度上解决了新手用户在选择阿里云服务器实例规格上的困局。
125 11
阿里云服务器实例规格选择参考:根据业务场景选择云服务器实例规格
|
12天前
|
存储 缓存 安全
阿里云服务器内存型r7、r8a、r8y、r8i实例区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y和内存型r8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:8,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍内存型r7、r8a、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
15天前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器c7/c8a/c8y/c8i/g7/g8a/g8y/g8i/r7/r8a/r8y/r8i实例区别及选择参考
在阿里云目前的活动中,除了特价的轻量应用服务器和经济型e及通用算力型u1实例之外,属于计算型实例的实例有计算型c7/c8a/c8y/c8i,属于通用型实例的有通用型g7/g8a/g8y/g8i,属于内存型实例的有内存型r7/r8a/r8y/r8i。本文将详细介绍阿里云服务器中的c7、c8a、c8y、c8i、g7、g8a、g8y、g8i、r7、r8a、r8y、r8i等实例规格的性能、适用场景及选择参考,帮助用户更好地选择合适的云服务器实例。
|
18天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、c8a、c8y、c8i实例性能、适用场景区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于计算型实例规格的云服务器有计算型c7、计算型c8a、计算型c8y和计算型c8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:2,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍计算型c7、c8a、c8y、c8i实例的性能、适用场景的区别以及选择参考。
|
17天前
|
存储 人工智能 安全
阿里云服务器通用型g7、g8a、g8y、g8i实例区别及选择指南
目前在阿里云的活动中,属于通用型实例规格的云服务器有通用型g7、通用型g8a、通用型g8y和通用型g8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:4,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍通用型g7、g8a、g8y、g8i实例的性能、适用场景的区别以及选择参考。
|
25天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、计算型c8y、计算型c8i实例性能对比与选择参考
目前阿里云在售的云服务器中,主要包含了第6代、第7代、第8代实例规格的云服务器产品,从类别上来说,又分为计算型(c系列)、通用型(g系列)、内存型(r/re系列)、通用算力型(U实例)、大数据型(d系列)、本地SSD型(i系列)、高主频型(hf系列)等不同种类的云服务器实例规格,而在阿里云目前的活动中,计算型(c系列)主要计算型c7、计算型c8y和计算型c8i实例可选,有的新手用户并不清楚这三个计算型实例之间的差别,本文对这三个计算型实例的实例规格、CPU(核)、内存(G)、计算、存储、内存等方面为大家做个对比,让大家了解一下他们之间的不同,以供参考选择。
|
24天前
|
存储 安全 网络协议
阿里云服务器通用型g7、通用型g8y、通用型g8i实例性能和适用场景对比与选择参考
目前阿里云在售的云服务器中,主要包含了第6代、第7代、第8代实例规格的云服务器产品,在选择云服务器实例规格时,对于需要平衡计算、存储和网络性能的应用场景来说,通用型g7、通用型g8y和通用型g8i实例是许多用户的热门选择。为了帮助大家更好地了解这三款实例的区别,并为选择提供参考,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比。让大家了解一下他们之间的不同,以供参考选择。
|
29天前
|
机器学习/深度学习 弹性计算 缓存
阿里云服务器经济型e实例与通用算力型u1实例对比分析与选择指南
在阿里云服务器的实例规格中,经济型e实例和通用算力型u1实例是很多个人和普通企业级用户常见的选择,经济型e实例与通用算力型u1实例的主要区别在于性能、应用场景及价格策略。本文将详细对比这两种实例的性能、应用场景及价格策略,以供参考。
|
30天前
|
弹性计算 开发框架 .NET
阿里云服务器购买教程及云服务器地域、实例、操作系统、带宽等参数选择指南
对于初次购买阿里云服务器的用户来说,想使用阿里云服务器搭建网站或者运行APP、小程序等项目,第一步就是要先购买阿里云服务器,下面小编以图文形式给大家介绍一下阿里云服务器的购买流程,以及购买过程中如何云服务器地域、实例、带宽等关键配置和选择这些参数的一些注意事项,以供参考。

热门文章

最新文章