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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云服务器 ECS,每月免费额度200元 3个月
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 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中;
相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
弹性计算 大数据 数据处理
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
阿里云服务器的实例规格从级别上来说分为入门级和企业级,从实例规格种类上来说,又分为突发性能型、共享型、计算型、通用型、内存型、大数据型等,2024年截止目前在阿里云的活动中,可选的云服务器实例规格有轻量应用服务器、经济型e、通用算力型u1、计算型c7、计算型c7a、计算型c8a、计算型c8y、通用型g7、通用型g7a、通用型g8a、通用型g8i、通用型g8y、内存型r7、内存型r8y等,有的新手用户不是很清楚2024年阿里云活动中的云服务器实例哪些属于入门级,哪些是企业级?有何区别?下面根据官方的各种资料介绍为大家解答下这些疑问,帮助您能更清楚地了解阿里云服务器,快速找到自己对云服务器产品的需
阿里云服务器实例哪些属于入门级,哪些是企业级?有何区别?
|
1月前
|
云安全 弹性计算 安全
电子好书发您分享《阿里云第八代企业级ECS实例,为企业提供更安全的云上防护》
阿里云推出第八代企业级ECS实例,强化云安全,搭载英特尔TDX技术,结合CIPU与飞天系统,提供高效且安全的云服务解决方案。[阅读详情](https://developer.aliyun.com/ebook/8303/116162?spm=a2c6h.26392459.ebook-detail.5.5c0b7e5aZhSJ9V)
16 2
|
1月前
|
弹性计算 自然语言处理 Linux
部署GPT-2大语言模型到基于ECS Intel实例的过程可以分为以下步骤
部署GPT-2大语言模型到基于ECS Intel实例的过程可以分为以下步骤
27 3
|
1天前
|
存储 缓存 安全
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
对于很多新手用户来说,在初次选择阿里云服务器实例规格的时候,面对众多实例规格往往不知道如何选择,因为云服务器实例规格不同,价格也不一样,本文通过一些常见的选型场景推荐,便于大家在选择云服务器实例规格时做个参考。
阿里云服务器实例规格选型参考,根据上云场景选择适合自己的实例规格
|
2天前
|
编解码 缓存 安全
阿里云目前活动内各云服务器实例规格适用场景与价格参考
目前阿里云的活动中,云服务器有多种不同实例规格可选,实例规格定义了实例的基本属性:CPU和内存(包括CPU型号、主频等),但是不同实例规格所适用的场景是不一样的,价格也有很大差别,有的用户初次选购阿里云服务器可能并不知道这些实例规格的具体适用场景,下面是小编整理汇总的2024年截止目前阿里云的活动中云服务器实例规格适用场景与活动价格,以供参考。
阿里云目前活动内各云服务器实例规格适用场景与价格参考
|
10天前
|
弹性计算 供应链
阿里云服务器付费模式包年包月、按量付费、抢占式实例选择说明
阿里云ECS提供包年包月、按量付费和抢占式实例三种计费方式。选择建议:稳定需求选包年包月,动态需求选按量付费,无状态应用选抢占式实例以降低成本。可结合使用按量付费、预留实例券和节省计划以平衡灵活性和成本。需要资源保障则组合按量付费和资源保障。具体详情和规定可参考阿里云ECS官方文档
39 7
|
10天前
|
存储 弹性计算 运维
深度解读:阿里云服务器ECS经济型e实例配置整理和性能参数表
阿里云推出经济型ECS e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,2核2G3M配置只需99元/年,新老用户不限量购买且续费不涨价。提供相同可用性SLA和安全标准,具备ESSD Entry云盘等企业级特性。适合中小型网站、开发测试和轻量级应用
|
11天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例特点、适用场景和使用常见问题解答
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列基于Intel Xeon Platinum处理器,提供1:1、1:2、1:4内存比选项,性价比高,不限购,续费不涨价。2核2G3M配置只需99元/年,企业用户2核4G5M服务器199元/年。具备价格优惠、品质保障、充足供应和多样化配置等特点。支持IPv4/IPv6,仅限专有网络VPC。实例规格和性能指标详表见原文,适合中小型网站、开发测试和轻量级应用。更多信息访问阿里云ECS页面。
|
12天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
39 4
|
12天前
|
存储 弹性计算 运维
阿里云服务器ECS经济型e实例详细介绍
阿里云新推经济型e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,不限购,续费不涨价。2核2G3M配置仅需99元/年,企业用户2核4G5M服务器199元/年。具备价格优势、品质保障和充足供应,但性能可能不及企业级实例。支持IPv4/IPv6,仅限专有网络VPC。更多规格和性能指标可见官方文档。
阿里云服务器ECS经济型e实例详细介绍