linux下如何实现mysql数据库每天定时自动备份

需要将数据库进行每天定时自动备份,所以网上找了各种方式就行了测试,遇到很多坑,特此记录下来,步骤是东拼西凑的,虽然也是网上找的,但都是经过亲自测试,一定能用,针对部署时期遇到的问题和解决方式都记录了下来。

1、创建备份目录:
为了方便,在/home保存备份文件;

cd
mkdir /home/dbback
cd /home/dbback
2、创建备份Shell脚本:
注意把以下命令中的DatabaseName换为实际的数据库名称;
当然,你也可以使用其实的命名规则!

vi bkDatabaseName.sh
输入/粘贴以下内容:

#!/bin/bash
mysqldump -uusername -ppassword DatabaseName > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
对备份进行压缩:

#!/bin/bash
mysqldump -uusername -ppassword DatabaseName | gzip > /home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
注意:
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把 DatabaseName 替换为实际的数据库名;

3、添加可执行权限:
chmod u+x bkDatabaseName.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;

./bkDatabaseName.sh
注:这里可能会报错
Warning: Using a password on the command line interface can be insecure.
导出MySQL数据库的时候采用mysqldump命令,出现”Warning: Using a password on the command line interface can be insecure.”的错误提示,当然数据库肯定也没有能备份下来。这个问题应该是在MySQL5.6+版本的时候就有出现,可能是为了确保数据库的安全性采用的保护机制。

解决方法、修改数据库配置文件

1、我们需要修改数据库配置文件,这个要看我们数据库的配置的,有些是在/etc/my.cnf,有些是/etc/my.conf

我们需要在[client]部分添加脚本:

host=localhost
user=数据库用户
password=’数据库密码’

这里参数要修改成我们自己的。

2、采用命令导出和导入数据库

其实在这个时候,我们如果采用”详解使用mysqldump命令备份还原MySQL数据用法整理”介绍的方法也是可以使用的,虽然依旧有错误提示,但是数据库还是可以导出的。您肯定和老左一样是追求细节的人,一点点问题都不能有,但我们可以用下面的命令导出和导入,就没有错误提示。

#导出数据库

mysqldump –defaults-extra-file=/etc/my.cnf database > database.sql

#导入数据库

mysql –defaults-extra-file=/etc/my.cnf database < database.sql

这里我们可以看到上面的命令和以前常用的快速导入和导入命令有所不同了,需要加载我们配置的MYSQL配置文件,这个红色部分要根据我们实际的路径修改。用这样的命令导出备份和导入是没有错误提示的。

4、添加计划任务
检测或安装 crontab
确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装

# crontab
-bash: crontab: command not found
如时没有安装 crontab,需要先安装它,具体步骤请参考:
CentOS下使用yum命令安装计划任务程序crontab
使用rpm命令从CentOS系统盘安装计划任务程序crontab

添加计划任务
执行命令:

crontab -e
这时就像使用vi编辑器一样,可以对计划任务进行编辑。
输入以下内容并保存:

*/1 * * * * /home/backup/bkDatabaseName.sh
具体是什么意思呢?

意思是每一分钟执行一次shell脚本“/home/backup/bkDatabaseName.sh”。

1、额外学习,crontab用法
crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。
每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的

在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有几个个特殊的符号就是”*”、”/”和”-“、”,”,*代表所有的取值范围内的数字,”/”代表每的意思,”/5″表示每5个单位,”-“代表从某个数字到某个数字,”,”分开几个离散的数字。

-l 在标准输出上显示当前的crontab。
-r 删除当前的crontab文件。
-e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。

 

2、例子:
每天早上6点
0 6 * * * echo “Good morning.” >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时
0 */2 * * * echo “Have a break now.” >> /tmp/test.txt

晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo “Have a good dream” >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line

1月1日早上4点
0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/

每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily

每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly

每月去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly

注意: “run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。

每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。
5,15,25,35,45,55 16,17,18 * * * command

每周一,三,五的下午3:00系统进入维护状态,重新启动系统。
00 15 * * 1,3,5 shutdown -r +5

每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
10,40 * * * * innd/bbslink

每小时的1分执行用户目录下的bin/account这个指令:
1 * * * * bin/account

每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)

每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。
12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt

5、测试任务是否执行
很简单,我们就执行几次“ls”命令,看看一分钟过后文件有没有被创建就可以了!

如果任务执行失败了,可以通过以下命令查看任务日志:

# tail -f /var/log/cron
输出类似如下

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献。
于是,公司写的一大堆WEB项目也想做保护。但几大问题随之而来:

公司的所有项目全部是Maven项目,网上的混淆方案不是陈旧就是无效
网上的大部分解决方案感觉像是对简单DEMO进行混淆,根本不能用于复杂的WEB项目中
网上的大部分解决方案是针对Android项目的,针对WEB的少之又少
针对以上问题,本人花费一个月研究了WEB+Maven项目的混淆,终于收获果实,解决了这一大空缺难题。

项目介绍
就如之前所述,我们要混淆的项目绝不是一个简单的WEB DEMO,必须要包含了大量第三方框架。
本文中介绍的项目使用了主流的一些框架:

Spring 4.1.1.RELEASE
SpringMVC 4.1.1.RELEASE
JackSon 2.5.0
MyBatis 3.3.0
Shiro 1.2.3
Log4J 1.2.17
SLF4J 1.7.10
Druid Pool 1.0.15
patchca 1.0.0
Jetty 9.2.7.v20150116
项目包结构

该项目是典型的Maven WEB项目,对于Maven WEB项目的结构不再赘述,这里对各种包做一下解释:

annotation 注解包,里面是自己写的注解类,主要混淆对象
controller SpringMVC的控制器包,主要混淆对象
credntials Shiro的自定义凭证,次要混淆对象
dao DAO包,主要混淆对象
exception 异常包,自定义了一些异常,主要混淆对象
filter Shiro的自定义过滤器,次要混淆对象
interceptor Shiro的自定义拦截器,次要混淆对象
job SpringTASK的定时任务包,次要混淆对象
mapper Mybatis的XML映射文件包,非混淆对象
model 实体包,非混淆对象
realm Shiro的自定义域包,次要混淆对象
service 实体的服务包,次要混淆对象
token Shiro的自定义令牌包,次要混淆对象
utils 公司自己的工具类,主要混淆对象
主要混淆对象 对类的名称、属性、方法名都进行混淆
次要混淆对象 对类的名称不混淆,类的属性、方法名选择性混淆
非混淆对象 不进行混淆,混淆后可能出现异常

Maven 配置(pom.xml)
本文的重头戏,使用Maven集成的ProGuard插件,混淆配置不用单独建立文件

<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<groupId>…</groupId>
<artifactId>zhukun.shiro-spring</artifactId>
<version>1.0-SNAPSHOT</version>

<!– 属性–>
<properties>
<!– 项目编码–>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!– 单元测试包–>
<junit.version>4.12</junit.version>
<!– JAVAEE支持包–>
<jstl.version>1.2</jstl.version>
<servlet.version>3.1.0</servlet.version>
<!– 日志包–>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.10</slf4j.version>
<aspectj.version>1.6.12</aspectj.version>
<!– commons支持–>
<commons-logging.version>1.1.3</commons-logging.version>
<commons-collections.version>3.2.1</commons-collections.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<!– shiro安全框架–>
<shiro.version>1.2.3</shiro.version>
<!– druid连接池–>
<druid.version>1.0.15</druid.version>
<!– 数据库及数据库框架–>
<mysql.version>5.1.30</mysql.version>
<mybatis.version>3.3.0</mybatis.version>
<mybatis-spring.version>1.2.3</mybatis-spring.version>
<!– Mybatis分页插件–>
<mybatis-paginator.version>1.2.16</mybatis-paginator.version>
<!– Mybatis生成器插件–>
<mybatis-generator.version>1.3.2</mybatis-generator.version>
<!– Spring及SpringMVC支持包–>
<spring.version>4.1.1.RELEASE</spring.version>
<jackson.version>2.5.0</jackson.version>
<!– 验证码支持包–>
<patchca.version>1.0.0</patchca.version>
<!– Jetty插件–>
<jetty.version>9.2.7.v20150116</jetty.version>
<!– Maven编译插件–>
<maven-compiler.version>2.3.2</maven-compiler.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${commons-collections.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis-paginator.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.patchca</groupId>
<artifactId>patchca</artifactId>
<version>${patchca.version}</version>
</dependency>
</dependencies>

<build>
<finalName>shiro-spring</finalName>
<!–使Maven打包时能打包src目录下的XML文件–>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler.version}</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<webApp>
<contextPath>/shiro-spring</contextPath>
</webApp>
<httpConnector>
<!– 设置端口–>
<port>8080</port>
</httpConnector>
</configuration>
</plugin>

<!– MyBatis自动生成Mapper插件–>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>${mybatis-generator.version}</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>

<!– ProGuard混淆插件–>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.11</version>
<executions>
<execution>
<!– 混淆时刻,这里是打包的时候混淆–>
<phase>package</phase>
<goals>
<!– 使用插件的什么功能,当然是混淆–>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<!– 是否将生成的PG文件安装部署–>
<attach>true</attach>
<!– 是否混淆–>
<obfuscate>true</obfuscate>
<!– 指定生成文件分类 –>
<attachArtifactClassifier>pg</attachArtifactClassifier>
<options>
<!– JDK目标版本1.7–>
<option>-target 1.7</option>
<!– 不做收缩(删除注释、未被引用代码)–>
<option>-dontshrink</option>
<!– 不做优化(变更代码实现逻辑)–>
<option>-dontoptimize</option>
<!– 不路过非公用类文件及成员–>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-dontskipnonpubliclibraryclassmembers</option>
<!– 优化时允许访问并修改有修饰符的类和类的成员 –>
<option>-allowaccessmodification</option>
<!– 确定统一的混淆类的成员名称来增加混淆–>
<option>-useuniqueclassmembernames</option>
<!– 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名–>
<option>-keeppackagenames</option>
<!– 不混淆所有特殊的类–>
<option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
<!– 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射–>
<option>-keepclassmembers public class * {void set*(***);*** get*();}</option>

<!– 不混淆job包下的所有类名,且类中的方法也不混淆–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.job.** { &lt;methods&gt;; }</option>
<!– 不混淆filter包下的所有类名,这里主要是对Shiro的路踢人过滤器混淆,对类的属性和方法进行了混淆–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.filter.** </option>
<!– 不混淆凭证包下的所有类名,但对类中的属性、方法进行混淆,原因是Spring配置中用到了这个类名–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.credntials.** </option>
<!– 混淆目的同上,这个是拦截器的包,包中有防止重复提交的拦截器–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.interceptor.** </option>
<!– 混淆目的同上,这个是域包,包中有用户登录域–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.realm.** </option>
<!– 不混淆model包中的所有类以及类的属性及方法,实体包,混淆了会导致ORM框架及前端无法识别–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.model.** {*;}</option>
<!– 以下两个包因为大部分是Spring管理的Bean,不对包类的类名进行混淆,但对类中的属性和方法混淆–>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.service.** </option>
<option>-keep class com.chinatelecom.gz.wy.zhukun.shiro_spring.dao.**</option>
</options>
<outjar>${project.build.finalName}-pg.jar</outjar>
<!– 添加依赖,这里你可以按你的需要修改,这里测试只需要一个JRE的Runtime包就行了 –>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
<!– 加载文件的过滤器,就是你的工程目录了–>
<inFilter>com/chinatelecom/gz/wy/zhukun/shiro_spring/**</inFilter>
<!– 对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧–>
<injar>classes</injar>
<!– 输出目录–>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>

以上代码中的注释足够各位参考了,若有问题欢迎留言

执行
clean package -DskipTests

使用Maven运行以上代码,执行完成后在target目录中会生成三个文件:

classes-pg.jar 混淆后的classes文件,里面包含完整的项目结构
proguard_map.txt 混淆内容的映射
proguard_seed.txt 参与混淆的类
混淆完成后,将classes-pg.jar解压到应用服务器覆盖原有的classes文件,通常目录为

X:\jetty9或tomcat7\webapps\shiro-spring\WEB-INF\classes

运行服务,项目运行正常

反编译
既然是混淆了的代码,那我们现在作为盗码者来反编译一下classes文件

可以看出,混淆成功了,盗码者读起来不是一二般的痛苦,我们的目的已经达到

遗留问题
虽然混淆是在Maven打包的时候进行,但是生成的war包及classes目录并未混淆,还需要将jar包中的内容提取,比较麻烦,不知道有没有让生成的war包就是已经混淆的办法。
本人的JAVA环境是JDK1.7 64位,其它的JDK并未尝试
不能对Spring等配置文件混淆,这样包结构还是存在,减弱了盗码者的读码难度

Mesos 配置项解析

Mesos 的 配置项 可以通过启动时候传递参数或者配置目录下文件的方式给出(推荐方式,一目了然)。

分为三种类型:通用项(master 和 slave 都支持),只有 master 支持的,以及只有 slave 支持的。

通用项

  • --ip=VALUE 监听的 IP 地址
  • --firewall_rules=VALUE endpoint 防火墙规则,VALUE 可以是 JSON 格式或者存有 JSON 格式的文件路径。
  • --log_dir=VALUE 日志文件路径,默认不存储日志到本地
  • --logbufsecs=VALUE buffer 多少秒的日志,然后写入本地
  • --logging_level=VALUE 日志记录的最低级别
  • --port=VALUE 监听的端口,master 默认是 5050,slave 默认是 5051。

master 专属配置项

  • --quorum=VALUE 必备项,使用基于 replicated-Log 的注册表时,复制的个数
  • --work_dir=VALUE 必备项,注册表持久化信息存储位置
  • --zk=VALUE 必备项,zookeepr 的接口地址,支持多个地址,之间用逗号隔离,可以为文件路径
  • --acls=VALUE ACL 规则或所在文件
  • --allocation_interval=VALUE 执行 allocation 的间隔,默认为 1sec
  • --allocator=VALUE 分配机制,默认为 HierarchicalDRF
  • --[no-]authenticate 是否允许非认证过的 framework 注册
  • --[no-]authenticate_slaves 是否允许非认证过的 slaves 注册
  • --authenticators=VALUE 对 framework 或 salves 进行认证时的实现机制
  • --cluster=VALUE 集群别名
  • --credentials=VALUE 存储加密后凭证的文件的路径
  • --external_log_file=VALUE 采用外部的日志文件
  • --framework_sorter=VALUE 给定 framework 之间的资源分配策略
  • --hooks=VALUE master 中安装的 hook 模块
  • --hostname=VALUE master 节点使用的主机名,不配置则从系统中获取
  • --[no-]log_auto_initialize 是否自动初始化注册表需要的 replicated 日志
  • --modules=VALUE 要加载的模块,支持文件路径或者 JSON
  • --offer_timeout=VALUE offer 撤销的超时
  • --rate_limits=VALUE framework 的速率限制,比如 qps
  • --recovery_slave_removal_limit=VALUE 限制注册表恢复后可以移除或停止的 slave 数目,超出后 master 会失败,默认是 100%
  • --slave_removal_rate_limit=VALUE slave 没有完成健康度检查时候被移除的速率上限,例如 1/10mins 代表每十分钟最多有一个
  • --registry=VALUE 注册表的持久化策略,默认为 replicated_log,还可以为 in_memory
  • --registry_fetch_timeout=VALUE 访问注册表失败超时
  • --registry_store_timeout=VALUE 存储注册表失败超时
  • --[no-]registry_strict 是否按照注册表中持久化信息执行操作,默认为 false
  • --roles=VALUE 集群中 framework 可以所属的分配角色
  • --[no-]root_submissions root 是否可以提交 framework,默认为 true
  • --slave_reregister_timeout=VALUE 新的 lead master 节点选举出来后,多久之内所有的 slave 需要注册,超时的 salve 将被移除并关闭,默认为 10mins
  • --user_sorter=VALUE 在用户之间分配资源的策略,默认为 drf
  • --webui_dir=VALUE webui 实现的文件目录所在,默认为 /usr/local/share/mesos/webui
  • --weights=VALUE 各个角色的权重
  • --whitelist=VALUE 文件路径,包括发送 offer 的 slave 名单,默认为 None
  • --zk_session_timeout=VALUE session 超时,默认为 10secs
  • --max_executors_per_slave=VALUE 配置了 --with-network-isolator 时可用,限制每个 slave 同时执行任务个数

slave 专属配置项

  • --master=VALUE 必备项,master 所在地址,或 zookeeper 地址,或文件路径,可以是列表
  • --attributes=VALUE 机器属性
  • --authenticatee=VALUE 跟 master 进行认证时候的认证机制
  • --[no-]cgroups_enable_cfs 采用 CFS 进行带宽限制时候对 CPU 资源进行限制,默认为 false
  • --cgroups_hierarchy=VALUE cgroups 的目录根位置,默认为 /sys/fs/cgroup
  • --[no-]cgroups_limit_swap 限制内存和 swap,默认为 false,只限制内存
  • --cgroups_root=VALUE 根 cgroups 的名称,默认为 mesos
  • --container_disk_watch_interval=VALUE 为容器进行硬盘配额查询的时间间隔
  • --containerizer_path=VALUE 采用外部隔离机制(--isolation=external)时候,外部容器机制执行文件路径
  • --containerizers=VALUE 可用的容器实现机制,包括 mesos、external、docker
  • --credential=VALUE 加密后凭证,或者所在文件路径
  • --default_container_image=VALUE 采用外部容器机制时,任务缺省使用的镜像
  • --default_container_info=VALUE 容器信息的缺省值
  • --default_role=VALUE 资源缺省分配的角色
  • --disk_watch_interval=VALUE 硬盘使用情况的周期性检查间隔,默认为 1mins
  • --docker=VALUE docker 执行文件的路径
  • --docker_remove_delay=VALUE 删除容器之前的等待时间,默认为 6hrs
  • --[no-]docker_kill_orphans 清除孤儿容器,默认为 true
  • --docker_sock=VALUE docker sock 地址,默认为 /var/run/docker.sock
  • --docker_mesos_image=VALUE 运行 slave 的 docker 镜像,如果被配置,docker 会假定 slave 运行在一个 docker 容器里
  • --docker_sandbox_directory=VALUE sandbox 映射到容器里的哪个路径
  • --docker_stop_timeout=VALUE 停止实例后等待多久执行 kill 操作,默认为 0secs
  • --[no-]enforce_container_disk_quota 是否启用容器配额限制,默认为 false
  • --executor_registration_timeout=VALUE 执行应用最多可以等多久再注册到 slave,否则停止它,默认为 1mins
  • --executor_shutdown_grace_period=VALUE 执行应用停止后,等待多久,默认为 5secs
  • --external_log_file=VALUE 外部日志文件
  • --frameworks_home=VALUE 执行应用前添加的相对路径,默认为空
  • --gc_delay=VALUE 多久清理一次执行应用目录,默认为 1weeks
  • --gc_disk_headroom=VALUE 调整计算最大执行应用目录年龄的硬盘留空量,默认为 0.1
  • --hadoop_home=VALUE hadoop 安装目录,默认为空,会自动查找 HADOOP_HOME 或者从系统路径中查找
  • --hooks=VALUE 安装在 master 中的 hook 模块列表
  • --hostname=VALUE slave 节点使用的主机名
  • --isolation=VALUE 隔离机制,例如 posix/cpu,posix/mem(默认)或者 cgroups/cpu,cgroups/mem
  • --launcher_dir=VALUE mesos 可执行文件的路径,默认为 /usr/local/lib/mesos
  • --modules=VALUE 要加载的模块,支持文件路径或者 JSON
  • --perf_duration=VALUE perf 采样时长,必须小于 perf_interval,默认为 10secs
  • --perf_events=VALUE perf 采样的事件
  • --perf_interval=VALUE perf 采样的时间间隔
  • --recover=VALUE 回复后是否重连上旧的执行应用
  • --recovery_timeout=VALUE slave 恢复时的超时,太久则所有相关的执行应用将自行退出,默认为 15mins
  • --registration_backoff_factor=VALUE 跟 master 进行注册时候的重试时间间隔算法的因子,默认为 1secs,采用随机指数算法,最长 1mins
  • --resource_monitoring_interval=VALUE 周期性监测执行应用资源使用情况的间隔,默认为 1secs
  • --resources=VALUE 每个 slave 可用的资源
  • --slave_subsystems=VALUE slave 运行在哪些 cgroup 子系统中,包括 memory,cpuacct 等,缺省为空
  • --[no-]strict 是否认为所有错误都不可忽略,默认为 true
  • --[no-]switch_user 用提交任务的用户身份来运行,默认为 true
  • --fetcher_cache_size=VALUE fetcher 的 cache 大小,默认为 2 GB
  • --fetcher_cache_dir=VALUE fetcher cache 文件存放目录,默认为 /tmp/mesos/fetch
  • --work_dir=VALUE framework 的工作目录,默认为 /tmp/mesos

下面的选项需要配置 --with-network-isolator 一起使用

  • --ephemeral_ports_per_container=VALUE 分配给一个容器的临时端口,默认为 1024
  • --eth0_name=VALUE public 网络的接口名称,如果不指定,根据主机路由进行猜测
  • --lo_name=VALUE loopback 网卡名称
  • --egress_rate_limit_per_container=VALUE 每个容器的 egress 流量限制速率
  • --[no-]network_enable_socket_statistics 是否采集每个容器的 socket 统计信息,默认为 false

——————— 本文来自 yeasy 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yeasy/article/details/46683297?utm_source=copy

CentOS7 设置局域网固定IP

在局域网内PC通常都是采用自动获取IP的方式从路由器拿到局域网IP的,每次PC启动后分配到的局域网IP都不一定相同。但是出于某些特殊的需求,例如要在局域网内做端口映射,需要将PC设置成使用固定的局域网IP,即使PC重启了,其局域网IP仍然不变。在Windows下这个设置的过程很简单。那么在Linux下该如何设置呢?下面以CentOS7为例,介绍下Linux系统设置局域网固定IP的方法。

1 设置IP、子网掩码和网关
用文本编辑器(例如Vim)打开 /etc/sysconfig/network-scripts/ifcfg-p4p1,在文件末尾加入以下3行:

IPADDR=192.168.2.106
NETMASK=255.255.252.0
GATEWAY=192.168.1.1

2 设置开机启动网络
修改/etc/sysconfig/network-scripts/ifcfg-p4p1文件,将 ONBOOT 选项改为yes:

ONBOOT=yes

注:
实际该项可能已经是yes。若已经是 yes则不需要修改;若是no,改为yes。

3 设置NameServer
用文本编辑器打开 /etc/resolve.cnf 文件,将其中内容用##注释掉,增加以下行:

nameserver 192.168.1.1

其中,192.168.1.1 是路由器网关地址,用TP-Link路由器时,路由器网关地址基本都是这个。
注:
如果PC已经通过自动获取IP的方式能够上网,那么 /etc/resolve.cnf 文件中已经是正确的配置了,因此不需要修改。但是如果设置固定IP后发现不能上网,应该检查下该文件中nameserver设置是否正确。

4 重启网络
打开终端,输入以下命令重启网络:

sudo service network restart

5 测试网络
网络重启成功后,可以通过ping 命令测试下网络是否通了,例如 ping 百度

ping www.baidu.com

如果可以 ping 通,说明网络已经通了,可以正常上网了。
注:
上述设置过程中的 IPADDR (IP地址)、NETMASK (子网掩码)、GATEWAY (网关)可以在设置前通过 ifconfig 命令查询。

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

3.配置firewalld-cmd

查看版本: firewall-cmd –version
查看帮助: firewall-cmd –help
显示状态: firewall-cmd –state
查看所有打开的端口: firewall-cmd –zone=public –list-ports
更新防火墙规则: firewall-cmd –reload
查看区域信息:  firewall-cmd –get-active-zones
查看指定接口所属区域: firewall-cmd –get-zone-of-interface=eth0
拒绝所有包:firewall-cmd –panic-on
取消拒绝状态: firewall-cmd –panic-off
查看是否拒绝: firewall-cmd –query-panic
那怎么开启一个端口呢
添加
firewall-cmd –zone=public –add-port=80/tcp –permanent    (–permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd –reload
查看
firewall-cmd –zone= public –query-port=80/tcp
删除
firewall-cmd –zone= public –remove-port=80/tcp –permanent