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

tech2026-03-30  9

一、阿里云相关

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=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$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-$(uname -s)-$(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的路径

# 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 mavenssh,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=$project_path/$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 $ssh_port $ssh_name@$ssh_ip mv $start_path/$jar_name $start_path/$back_name-$backup_time echo -e "\033[36m>>>>>>>>>>>>>>>>>复制本地jar包至服务器...\033[0m" scp -P $ssh_port $build_path $ssh_name@$ssh_ip:$start_path echo -e "\033[36m>>>>>>>>>>>>>>>>>登陆服务器启动start脚本...\033[0m" ssh -p $ssh_port $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=$backup_location/$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 $backup_location/$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分支的文档说明)

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

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中;
最新回复(0)