一、阿里云相关
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的路径
# 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中;