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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容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中;
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
弹性计算 监控 负载均衡
|
1天前
|
存储 人工智能 编解码
阿里云服务器计算型c8i、通用型g8i和计算型c8a、通用型g8a实例区别及选择参考
在选择阿里云服务器计算型和通用型实例规格的时候,有的用户不清楚计算型c8i、通用型g8i与计算型c8a、通用型g8a实例的区别,他们都是采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。但是计算型c8i和通用型g8i实例用的是Intel处理器,计算型c8a和通用型g8a实例用的是AMD处理器。本文将详细介绍阿里云服务器计算型c8i、通用型g8i与计算型c8a、通用型g8a实例各自的性能和区别,以及适合的用户群体,帮助用户更好地选择适合自己的云服务器实例。
|
4天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c8i实例解析:实例规格性能及使用场景和最新价格参考
计算型c8i实例作为阿里云服务器家族中的重要成员,以其卓越的计算性能、稳定的算力输出、强劲的I/O引擎以及芯片级的安全加固,广泛适用于机器学习推理、数据分析、批量计算、视频编码、游戏服务器前端、高性能科学和工程应用以及Web前端服务器等多种场景。本文将全面介绍阿里云服务器计算型c8i实例,从规格族特性、适用场景、详细规格指标、性能优势、实际应用案例,到最新的活动价格,以供大家参考。
|
9天前
|
存储 弹性计算 缓存
阿里云服务器通用型g8i实例性能与使用场景介绍及最新收费标准参考
阿里云ECS通用型g8i服务器采用阿里云全新CIPU架构,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。ECS通用型g8i实例支持开启或关闭超线程配置,单台g8i实例最高支持100万IOPS。阿里云ECS通用型g8i实例CPU采用Intel®Xeon®Emerald Rapids或者Intel®Xeon®Sapphire Rapids,主频不低于2.7 GHz,全核睿频3.2GHz。本文为大家介绍通用型g8i实例性能与使用场景介绍及最新收费标准,以供参考。
|
10天前
|
弹性计算 缓存 数据挖掘
阿里云服务器经济型e和通用算力型u1实例区别及选择参考
在阿里云目前的活动中,经济型e和通用算力型u1实例是两个比较热门的云服务器实例规格,收费标准相对其他计算型、通用型和内存型实例来说要更低一些,经济型e实例ECS云服务器2核2G3M带宽新购和续费都是99元1年,通用算力型u1实例2核4G5M带宽新购和续费都只要199元1年、4核8G云服务器955.58元1年。有的新手用户并不清楚他们之间的区别及如何选择,本文将介绍阿里云服务器中的经济型e实例和通用算力型u1实例的特点、区别以及新手选择参考。
|
18天前
|
存储 缓存 安全
阿里云服务器内存型r7、r8a、r8y、r8i实例区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y和内存型r8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:8,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍内存型r7、r8a、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
21天前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器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等实例规格的性能、适用场景及选择参考,帮助用户更好地选择合适的云服务器实例。
|
24天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、c8a、c8y、c8i实例性能、适用场景区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于计算型实例规格的云服务器有计算型c7、计算型c8a、计算型c8y和计算型c8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:2,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍计算型c7、c8a、c8y、c8i实例的性能、适用场景的区别以及选择参考。
|
23天前
|
存储 人工智能 安全
阿里云服务器通用型g7、g8a、g8y、g8i实例区别及选择指南
目前在阿里云的活动中,属于通用型实例规格的云服务器有通用型g7、通用型g8a、通用型g8y和通用型g8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:4,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍通用型g7、g8a、g8y、g8i实例的性能、适用场景的区别以及选择参考。
|
1月前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、计算型c8y、计算型c8i实例性能对比与选择参考
目前阿里云在售的云服务器中,主要包含了第6代、第7代、第8代实例规格的云服务器产品,从类别上来说,又分为计算型(c系列)、通用型(g系列)、内存型(r/re系列)、通用算力型(U实例)、大数据型(d系列)、本地SSD型(i系列)、高主频型(hf系列)等不同种类的云服务器实例规格,而在阿里云目前的活动中,计算型(c系列)主要计算型c7、计算型c8y和计算型c8i实例可选,有的新手用户并不清楚这三个计算型实例之间的差别,本文对这三个计算型实例的实例规格、CPU(核)、内存(G)、计算、存储、内存等方面为大家做个对比,让大家了解一下他们之间的不同,以供参考选择。
下一篇
无影云桌面