centos7 搭建keepalived+Nginx+tomcat
准备1台 192.168.2.224 安装Nginx,2台安装tomcat 192.168.2.222 192.168.2.223
1、安装Nginx:
上传pcre-8.36.tar.gz、zlib-1.2.8.tar.gz到服务器
下载地址:pcre-8.36.tar.gz https://o3cex9zsl.qnssl.com/libs/nginx/pcre-8.36.tar.gz
zlib-1.2.8.tar.gz https://o3cex9zsl.qnssl.com/libs/nginx/zlib-1.2.8.tar.gz
#######新建nginx用户和nginx组
[root@nginx]# groupadd -r nginx && useradd -r -g nginx -s /bin/false -M nginx
#######yum安装nginx必须的依赖库
[root@nginx]#yum -y install openssl openssl-devel libxml2-devel libxslt-devel perl-devel perl-ExtUtils-Embed
#######官网下载Nginx1.9.0的tar包,然后解压到服务器上
[root@nginx jason]# wget -c http://nginx.org/download/nginx-1.9.0.tar.gz
[root@nginx jason]# tar -zxf nginx-1.9.0.tar.gz && cd nginx-1.9.0
上传pcre-8.36.tar(支持Nginx的Rewrite功能)、zlib-1.2.8.tar(支持Nginx的Gzip压缩功能)
#######新建Nginx1.9.0安装时所需要的目录
[root@nginx nginx-1.9.0]# cd /var/tmp/ && mkdir -p/var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
[root@nginx tmp]# mkdir -p /var/run/nginx && cd /home/jason/nginx-1.9.0
[root@nginxnginx-1.9.0]#
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --conf-path=/usr/local/nginx/conf/nginx.conf --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --sbin-path=/usr/sbin/nginx
具体的含义:
[root@nginx nginx-1.9.0]make && make install
上传脚本Nginx到/etc/init.d 并赋予只读权限,将Nginx服务添加到启动项并给予开机自动启动,启动Nginx服务
Nginx
1 #! /bin/bash2 #3 # nginx -this script starts and stops the nginx daemon4 #5 # chkconfig: - 85 15 6 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \7 # proxy and IMAP/POP3 proxy server8 #9 # processname: nginx10 # config: /etc/nginx/nginx.conf11 # pidfile: /var/run/nginx/nginx.pid12 13 # Source functionlibrary.14 . /etc/rc.d/init.d/functions15 16 # Source networking configuration.17 . /etc/sysconfig/network18 19 # Check that networking is up.20 [ "$NETWORKING" = "no" ] && exit 0 21 22 nginx="/usr/sbin/nginx" 23 prog=$(basename$nginx)24 25 NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" 26 27 [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx28 29 lockfile=/var/lock/nginx.lock30 31 start() {32 [ -x $nginx ] || exit 5 33 [ -f $NGINX_CONF_FILE ] || exit 6 34 echo -n $"Starting $prog:" 35 daemon $nginx -c $NGINX_CONF_FILE36 retval=$? 37 echo 38 [ $retval -eq 0 ] && touch $lockfile 39 return $retval40 }41 42 stop() {43 echo -n $"Stopping $prog:" 44 killproc $prog -QUIT45 retval=$? 46 echo 47 [ $retval -eq 0 ] && rm -f $lockfile 48 return $retval49 }50 51 restart() {52 configtest || return $? 53 stop54 sleep 1 55 start56 }57 58 reload() {59 configtest || return $? 60 echo -n $"Reloading $prog:" 61 killproc $nginx -HUP62 RETVAL=$? 63 echo 64 }65 66 force_reload() {67 restart68 }69 70 configtest() {71 $nginx -t -c $NGINX_CONF_FILE72 }73 74 rh_status() {75 status $prog76 }77 78 rh_status_q() {79 rh_status >/dev/null 2>&1 80 }81 82 case "$1" in 83 start)84 rh_status_q && exit 0 85 $1 86 ;;87 stop)88 rh_status_q || exit 0 89 $1 90 ;;91 restart|configtest)92 $1 93 ;;94 reload)95 rh_status_q || exit 7 96 $1 97 ;;98 force-reload)99 force_reload100 ;;101 status)102 rh_status103 ;;104 condrestart|try-restart)105 rh_status_q || exit 0 106 ;;107 *)108 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 109 exit 2 110 esac
[root@nginx init.d]chkconfig --add nginx
[root@nginx init.d]chkconfig nginx on
[root@nginx init.d]service nginx start
查看安装的Nginx1.9.0的详细信息
[root@nginx init.d]# nginx -V
nginx version: nginx/1.9.0
built by gcc 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC)
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --conf-path=/usr/local/nginx/conf/nginx.conf --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --sbin-path=/usr/sbin/nginx
2、安装tomcat
查看现有版本、卸载并安装jdk1.8
[root@nginx jason]# java -version
java version "1.7.0_51"
[root@nginx jason]# rpm -qa |grep jdk
[root@nginx jason]# yum remove java-1.7.0-openjdk
[root@nginx jason]# ls
apache-tomcat-9.0.4.tar.gz Desktop Documents Downloads jdk-8u11-linux-x64.rpm Music Pictures Public Templates Videos
[root@nginx jason]# rpm -ivh jdk-8u11-linux-x64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jdk-2000:1.8.0_11-fcs ################################# [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
jfxrt.jar...
[root@nginx jason]# java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
[root@nginx jason]# cd /usr/local/
[root@nginx local]# mkdir tomcat
[root@nginx local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat
解压apache-tomcat-9.0.4并移动到/usr/local/tomcat/
[root@nginx jason]# mv apache-tomcat-9.0.4 /usr/local/tomcat/
打开文件 /etc 目录下的 profile 文件,将如下代码追加到 profile 文件末尾:
# idea - tomcat9 config start - 2018-7-24export CATALINA_HOM=/usr/local/tomcat/apache-tomcat-9.0.4export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-9.0.4export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-9.0.4# idea - tomcat9 config end - 2018-7-24
修改 tomcat 的端口号和字符编码
vim /usr/local/tomcat/apache-tomcat-9.0.4/conf/server.xml
找到如下代码:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
将其中的 8080 改成 HTTP 协议的默认端口 80,改后的代码如下:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
增加 manager-gui 图形化管理界面的访问权限(不需要的话,此步骤可忽略):
[root@nginx tomcat]# cd apache-tomcat-9.0.4/conf/
[root@nginx conf]# ls
catalina.policy catalina.properties context.xml jaspic-providers.xml jaspic-providers.xsd logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml
[root@nginx conf]# vim tomcat-users.xml
- 在 </tomcat-users> 标签前加入如下代码:
<role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="tomcat" password="mytomcatadmin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
进入
[root@nginx apache-tomcat-9.0.4]# cd webapps/manager/META-INF/
[root@nginx META-INF]# vi context.xml
进入
[root@nginx]#cd /usr/local/tomcat/apache-tomcat-9.0.4/webapps/host-manager/META-INF/
[root@nginx META-INF]# vim context.xml
(或者和上面的一样注释掉)
这里设置的 username 是tomcat;password 都是 mytomcatadmin,角色为 manager-gui;
如果要某网段可以访问tomcat
在tomcat-users.xml里添上几句即可
打开webapps下的host-manager和manager,都有一个共同的文件夹META-INF,里面都有context.xml,这个文件的内容是:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1" />
</Context>
通过查看官方文档,知道,这段代码的作用是限制来访IP的,127.d+.d+.d+|::1|0:0:0:0:0:0:0:1,是正则表达式,表示IPv4和IPv6的本机环回地址,所以这也解释了,为什么我们本机可以访问管理界面,但是其他机器确403。
找到原因了,那么修改一下这里的正则表达式即可,比如我们只允许内网网段192.168.2访问管理页面,那么改成这样就可以:
<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.2.*" />
</Context>
修改完毕,关闭浏览器,重新打开tomcat,问题解决!
进入到 /usr/local/tomcat/apache-tomcat-9.0.0.M4/bin 目录中:
cd ../bin/
打开 vi catalina.sh 文件:
在 # OS specific support. 上面一行加入如下代码(不能有空格):
JAVA_HOME=/usr/java/jdk1.8.0_11/
JRE_HOME=$JAVA_HOME/jre
查看java_home目录
[root@nginx bin]# rpm -qa|grep jdk
jdk-1.8.0_11-fcs.x86_64
[root@nginx bin]# rpm -ql jdk-1.8.0_11-fcs.x86_64
启动 tomcat 服务:
./startup.sh
打印如下信息则表明启动 Tomcat 服务成功:
[root@nginx bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-9.0.4
Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-9.0.4
Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.4/temp
Using JRE_HOME: /usr/java/jdk1.8.0_11//jre
Using CLASSPATH: /usr/local/tomcat/apache-tomcat-9.0.4/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.4/bin/tomcat-juli.jar
Tomcat started.
打开浏览器输入 IP(修改测试页面)
进入
/usr/local/tomcat/apache-tomcat-9.0.4/webapps/ROOT
修改index.jsp
简化启动服务
cd /etc/init.d/
vim tomcat
# idea - tomcat config start - 2018-2-1#!/bin/bash# description: Tomcat Start Stop Restart# processname: tomcat# chkconfig:2345 20 80JAVA_HOME=/usr/java/jdk1.8.0_11/export JAVA_HOMEPATH=$JAVA_HOME/bin:$PATHexport PATHCATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.4case $1 instart)sh $CATALINA_HOME/bin/startup.sh;;stop)sh $CATALINA_HOME/bin/shutdown.sh;;restart)sh $CATALINA_HOME/bin/shutdown.shsh $CATALINA_HOME/bin/startup.sh;;esacexit0#chmod 755tomcat#chkconfig--add tomcat#chkconfig--level 2345tomcat on#chkconfig--list tomcat# idea- tomcat config end - 2018-2-1
[root@nginx conf] chmod +x tomcat
[root@nginx conf]chkconfig --add tomcat
[root@nginx conf]chkconfig tomcat on
启动tomcat
进入/usr/local/tomcat/apache-tomcat-9.0.4/bin
[root@python bin]# ./startup.sh
[root@python bin]# ./shutdown.sh (更改配置文件之后重新加载需要停止tomcat再启用)
开机自动启动
vi /etc/rc.d/rc.local 添加
/usr/local/tomcat/apache-tomcat-9.0.4/bin/startup.sh
linux 系统中的 /etc 目录表示“设备”,意为与硬件设备相关的信息;
/etc/init.d 目录下的文件表示当前设备的初始化配置信息;
命令 chkconfig 表示添加(--add)、删除(--del)、查看(--list)
3、修改Nginx配置文件(192.168.2.224
cd /usr/local/nginx/conf
vim nginx.conf
在server配置的上面新增upstream 配置,后面的“server_tomcat”相当于该配置别名,供后面的“proxy_pass”配置使用。
upstream 里面配置的就是2个tomcat的访问地址,IP:端口号,不用写http:// 。
proxy_pass 转发定位到upstream 里面配置的多台服务器proxy_pass 配置的http:// 必须要写。(不是https)
修改完成后,重新加载nginx服务的配置
nginx -s reload
看到这,肯定会有人有疑问,如果有一台服务器突然挂掉了怎么办?别急,这种情况nginx已经给我们处理了,当有台服务器挂掉了,nginx默认不会访问挂掉的服务,继续访问其他正在运行的服务,提供了很好的容错机制。
能不能让两台服务器访问的概率不一样了?能,nginx给我们提供了 weight这个属性,可以给各个服务器分配权重,配置如下:
weight 默认为1.weight越大,负载的权重就越大。
通过上面的配置,刷新页面,会发现访问tomcat1的概率明显比访问tomcat2的概率大。
PS:upstream目前支持5种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
-
upstream bakend {
-
server 192.168.0.14 weight=10;
-
server 192.168.0.15 weight=10;
-
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
-
upstream bakend {
-
ip_hash;
-
server 192.168.0.14:88;
-
server 192.168.0.15:80;
-
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
-
upstream backend {
-
server server1;
-
server server2;
-
fair;
-
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
-
upstream backend {
-
server squid1:3128;
-
server squid2:3128;
-
hash $request_uri;
-
hash_method crc32;
-
}
-
tips:
-
upstream bakend{#定义负载均衡设备的Ip及设备状态
-
ip_hash;
-
server 127.0.0.1:9090 down;
-
server 127.0.0.1:8080 weight=2;
-
server 127.0.0.1:6060;
-
server 127.0.0.1:7070 backup;
-
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配。可以进行重定向或者进行新的代理 负载均衡
3、安装keepalive
yum install -y keepalived
修改config文件
vim /etc/keepalived\keepalived.conf
keepalived.conf各项的含义
MASTER
! Configuration File forkeepalived#全局配置 global_defs {#keepalived切换的时候,发消息到指定的email,可配置多个email notification_email {feinik1@foxmail.comfeinik2@foxmail.com}#通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com#通知邮件的smtp地址 smtp_server smtp.exmail.qq.com#连接smtp服务器的超时时间,单位秒 smtp_connect_timeout30#Keepalived的机器标识,一个网络内保持唯一 router_id nginx-master}#执行脚本配置 vrrp_script chk_nginx {#脚本所在路径 script"/home/project/keepalived/check_nginx.sh"#脚本执行间隔时间,秒 interval2#优先级 weight2}#keepalived实例配置 vrrp_instance VI_1 {#指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写 state MASTER#实例绑定的网卡 interface ens33#虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同 virtual_router_id51#优先级,数值愈大,优先级越高 priority100#MASTER与BACKUP之间同步检查的时间间隔,单位为秒 advert_int1#通信验证 authentication {auth_type PASSauth_pass feinik}#追踪外围脚本 track_script {#这里配置vrrp_script的名称 chk_nginx}#虚拟ip配置,可配置多个 virtual_ipaddress {192.168.10.200}}
BACKUP
! Configuration File forkeepalived#全局配置 global_defs {#keepalived切换的时候,发消息到指定的email,可配置多个email notification_email {feinik1@foxmail.comfeinik2@foxmail.com}#通知邮件从哪个地址发出 notification_email_from feinik@foxmail.com#通知邮件的smtp地址 smtp_server smtp.exmail.qq.com#连接smtp服务器的超时时间,单位秒 smtp_connect_timeout30#Keepalived的机器标识,一个网络内保持唯一 router_id nginx-master}#执行脚本配置 vrrp_script chk_nginx {#脚本所在路径 script"/home/project/keepalived/check_nginx.sh"#脚本执行间隔时间,秒 interval2#优先级 weight2}#keepalived实例配置 vrrp_instance VI_1 {#指定实例的初始状态,MASTER或BACKUP两种状态,并且需要大写 state BACKUP#实例绑定的网卡 interface ens33#虚拟路由标识,是一个数字,整个VRRP内唯一,如果keepalived配置了主备,需要相同 virtual_router_id51#优先级,数值愈大,优先级越高 priority99#MASTER与BACKUP之间同步检查的时间间隔,单位为秒 advert_int1#通信验证 authentication {auth_type PASSauth_pass feinik}#追踪外围脚本 track_script {#这里配置vrrp_script的名称 chk_nginx}#虚拟ip配置,可配置多个 virtual_ipaddress {192.168.10.200}}
我的实验配置
master
! Configuration File forkeepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server192.168.200.1smtp_connect_timeout30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0}vrrp_script chk_nginx {script"/etc/keepalived/nginx_check.sh"interval3weight2} vrrp_instance VI_1 {state MASTER interface enp0s17virtual_router_id51priority100advert_int1authentication {auth_type PASauth_pass1111}track_script {chk_nginx}virtual_ipaddress {192.168.2.226}}
backup
! Configuration File forkeepalivedglobal_defs {... }rrp_script chk_nginx {script"/etc/keepalived/nginx_check.sh"interval3weight2}vrrp_instance VI_1 {state BACKUPinterface enp0s17virtual_router_id51priority90advert_int1authentication {auth_type PASSauth_pass1111}track_script {chk_nginx}virtual_ipaddress {192.168.2.226} }
查看VIP(ip addr)
nginx_check.sh脚本(赋予只读权限 chmod +x nginx_check.sh)
如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:
#!/bin/bash A=`ps -C nginx –no-header |wc -l`if [ $A -eq 0 ];then/home/wangzi/soft/nginx/sbin/nginxsleep5if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi fi
测试
centos7 搭建keepalived+Nginx+tomcat相关推荐
- 搭建Keepalived+Nginx高可用负载均衡服务器
一.服务器搭建策略 单机模式: 只有一台应用服务器,组成一个单机模式 优点:简单方便(搭建.运营.维护) 缺点:不能出故障(停电.断网.系统崩溃.硬件老化.性能瓶颈) 应用场景:小型项目(几十个人) ...
- 架构系列三:使用Keepalived+Nginx+tomcat实现集群部署
架构系列三:使用Keepalived+Nginx+tomcat实现集群部署 介绍了通过Nginx配置Tomct集群,当其中一个Tomcat服务停止后,Nginx可自动识别并选择另一个服务器响应用户请求 ...
- CentOS7搭建keepalived+DRBD+NFS高可用共享存储
CentOS7搭建keepalived+DRBD+NFS高可用共享存储 一.服务器信息 IP地址 类型 主机名 操作系统 内存 磁盘 172.25.10.100 主服务器 node1 centos7 ...
- keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...
前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...
- keepalived+nginx+tomcat实现高可靠集群
工具及软件 1. centos 7.x (安装在 vm 中) 不会可以百度 2. nginx -1.6.2 不会 请看这里 3. tomcat7 不会请看这里 4. jdk ...
- lvs+keepalived+nginx+tomcat高可用高性能集群部署
为什么80%的码农都做不了架构师?>>> 2台前端 keepalived+lvs,热备的方式,保证一台lvs前端能正常访问就行,如果一台down,另外一台热备升级到master ...
- njx如何实现负载均衡_LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- lvs+keepalived+nginx+tomcat
# 拓扑如下所示 # 节点分布情况 LVS-dr-master eth0: 192.168.146.141 LVS-dr-slave eth0: 192.168.146.142 nginx1: eth ...
- nginx集群_windows环境下搭建简单Nginx+Tomcat集群
通俗点将,负载均衡就是因为访问流量太大,导致项目访问不流畅.甚至宕掉,所以通过一种分流的方式来缓解这种情况. 一. 工具 nginx-1.8.0 apache-tomcat-6.0.33 二. 目标 ...
最新文章
- parseInt 与 parseFloat 解析
- HDOJ 1509 Windows Message Queue
- 克隆 Linux系统盘,linux系统克隆系统盘
- BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)
- VDI序曲十五 配置 RemoteFX 以获得最佳体验
- ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
- Hadoop平台简述
- nodejs的一些日常操作
- Qi v1.2.4协议 之 9 Stand-by Power 【英文翻译】
- littlevgl之roller 滚动轴控件
- 8086CPU各寄存器及其简介
- Printf 输出格式总结
- 树莓派 ubuntu gpio_玩转GPIO之点亮三色信号灯(非树莓派)
- win10系统同时设置静态IP和动态IP
- Chromium扩展(Extension)机制简要介绍和学习计划
- 统计学之算术平均数、调和平均数、几何平均数、位置平均数详解
- 这个夏天,飞到北纬18°去玩海——带着小样儿去三亚(二)
- 软考中级哪个科目比较容易考?
- 配置软路由-同时连接内网和外网
- Chrome 制作绿色便携版
热门文章
- VMware中的三种网络模式-----Host-only模式
- C和指针---第八章:数组
- 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~二 DBContext实例中,表实体对象是怎么被加入的...
- 怎么用程序实现调用Android手机的拍照功能
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)
- Oracle 数据库、实例、表空间、用户、数据库对象
- Linux下mysql备份 恢复
- nginx学习(一):基本安装
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 32岁了学python来的及吗_为什么每个人都应该在2020年学习Python?