部署keeplive

1、安装依赖

yum install -y openssl openssl-devel gcc

2、安装软件包

tar xvf keepalived-2.0.7.tar.gz
cd keepalived-2.0.7
./configure --prefix=/usr/local/keepalived
make && make install
完成后会在以下路径生成:
/usr/local/etc/keepalived/keepalived.conf
/usr/local/etc/sysconfig/keepalived
/usr/local/sbin/keepalived

3、 keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived

4、将keepalived主程序加入到环境变量(安装目录下)

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

5、keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用

cp  /usr/local/keepalived-2.0.20/keepalived/etc/init.d/keepalived  /etc/init.d/keepalived

6、 将配置文件放到默认路径下

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

7、基本设置

加为系统服务:chkconfig --add keepalived
开机启动:chkconfig keepalived on
查看开机启动的服务:chkconfig --list
启动、关闭、重启service keepalived start|stop|restart

8、编辑keepalived.conf文件

! Configuration File for keepalivedglobal_defs {notification_email {email地址
}
script_user root
enable_script_security
notification_email_from 发件人地址
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}
#检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
vrrp_script chk_mysql_port {script "/opt/chk_mysql.sh" #这里通过脚本监测interval 2   #脚本执行间隔,每2s检测一次weight -5  #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)rise 1   #检测1次成功就算成功。但不修改优先级}vrrp_instance VI_1 {state MASTERinterface ens33   #指定虚拟ip的网卡接口mcast_src_ip 192.168.1.20virtual_router_id 51  #路由器标识,MASTER和BACKUP必须是一致的priority 99  #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就>可以将VIP资源再次抢回来,但是我们这里使用的是非抢占模式 所以两台机器除去自己IP地址之外其他配置是一致的。advert_int 1authentication {auth_type PASSauth_pass 1111}
virtual_ipaddress {192.168.1.25}track_script {chk_mysql_port
}
}

9、添加MySQL检测文件/opt/chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep LISTEN|grep 3306|wc -l)
if [ ${counter} = 0 ]; then/etc/init.d/keepalived stop
fi

10、启动服务

/etc/init.d/keepalived start

配置邮件发送提醒

1、从个人邮箱内获取授权码
2、安装mailx发送邮件程序

yum install -y mailx

3、编辑邮箱认证文件

vi /etc/mail.rc
set from=xxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore

4、编写邮箱通知脚本

vim /etc/keepalived/notify.sh
contact='xxx@qq.com'function notify() {mailsubject="$(hostname) to be $1, vip转移"mailbody="$(date +'%F %T'): VRRP Transition, $(hostname) changed to be $1"echo "$mailbody" | mail -s "$mailsubject" $contact
}case $1 inmaster)notify master;;backup)notify backup;;fault)notify fault;;*)echo "Usage: $(basename$0) {master|backup|fault}"exit 100;;
esac

5、赋权

chmod +x notify.sh

6、配置文件内添加邮件发送执行脚本

virtual_ipaddress {172.30.1.100 dev eth1 label eth1:0172.30.1.200 dev eth1 label eth1:1}#定义通知脚本,当前节点成为主节点时触发的脚本notify_master "/etc/keepalived/notify.sh master"#定义通知脚本,当前节点转为备节点时触发的脚本notify_backup "/etc/keepalived/notify.sh backup"#定义通知脚本,当前节点转为“失败”状态时触发的脚本notify_fault "/etc/keepalived/notify.sh fault"

7、给所有服务都进行配置

keeplive配置说明

一、配置项

global_defs{notification_email{#指定keepalived在发生切换时需要发送email到的对象,一行一个
sysadmin@fire.loc
}
notification_email_fromAlexandre.Cassen@firewall.loc#指定发件人
smtp_serverlocalhost#指定smtp服务器地址
smtp_connect_timeout30#指定smtp连接超时时间
router_idLVS_DEVEL#运行keepalived机器的一个标识
}
vrrp_sync_groupVG_1{#监控多个网段的实例
group{inside_network#实例名
outside_network
}
notify_master/path/xx.sh#指定当切换到master时,执行的脚本
notify_backup/path/xx.sh#指定当切换到backup时,执行的脚本
notify_fault"path/xx.shVG_1"#故障时执行的脚本
notify/path/xx.sh
smtp_alert#使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}#因为Keepalived在转换状态时会依照状态来呼叫:
#当进入Master状态时会呼叫notify_master
#当进入Backup状态时会呼叫notify_backup
#当发现异常情况时进入Fault状态呼叫notify_fault
vrrp_instanceinside_network{stateBACKUP#指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决
定
interfaceeth0#设置实例绑定的网卡VRRP心跳包从哪块网卡发出
dont_track_primary#忽略vrrp的interface错误(默认不设置)
track_interface{#设置额外的监控,里面那个网卡出现问题都会切换
eth0
eth1
}
mcast_src_ip#发送多播包的地址,如果不设置默认使用绑定网卡的primaryip
garp_master_delay#在切换到master状态后,延迟进行gratuitousARP请求
virtual_router_id50#VPID标记相同VRID的LVS属于同一组,根据优先级选举出一个主
priority99#优先级,高优先级竞选为master
advert_int10#检查间隔,默认1秒VRRP心跳包的发送周期,单位为s组播信息发送间隔,两个节点设置必须一样(实际并不一定完全是10秒,测试结果是小于10秒的随机值)
nopreempt#设置为不抢占注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高首先nopreemt必须在state为BACKUP的节点上才生效(因为是BACKUP节点决定是否来成为MASTER的),其次要实现类似于关闭autofailback的功能需要将所有节点的state都设置为BACKUP,或者将master节点的priority设置的比BACKUP低。我个人推荐使用将所有节点的state都设置成BACKUP并且都加上nopreempt选项,这样就完成了关于autofailback功能,当想手动将某节点切换为MASTER时只需去掉该节点的nopreempt选项并且将priority改的比其他节点大,然后重新加载配置文件即可(等MASTER切过来之后再将配置文件改回去再reload一下)。
preempt_delay#抢占延时,默认5分钟
debug#debug级别
authentication{#设置认证
auth_typePASS#认证方式
auth_pass111111#认证密码(密码只识别前8位)
}
virtual_ipaddress{#设置vip
192.168.202.200
}
}
virtual_server192.168.202.20023{delay_loop6#健康检查时间间隔(实际并不一定完全是6秒,测试结果是小于6秒的随机值?)
lb_algorr#lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kindDR#负载均衡转发规则NAT|DR|RUN
persistence_timeout5#会话保持时间
protocolTCP#使用的协议
persistence_granularity<NETMASK>#lvs会话保持粒度
virtualhost<string>#检查的web服务器的虚拟主机(host:头)
sorry_server<IPADDR><port>#备用机,所有realserver失效后启用
real_server192.168.200.523{weight1#默认为1,0为失效
inhibit_on_failure#在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
notify_up<string>|<quoted-string>#在检测到serverup后执行脚本
notify_down<string>|<quoted-string>#在检测到serverdown后执行脚本TCP_CHECK{connect_timeout3#连接超时时间
nb_get_retry3#重连次数
delay_before_retry3#重连间隔时间
connect_port23健康检查的端口的端口
bindto<ip>
}
HTTP_GET|SSL_GET{url{#检查url,可以指定多个
path/
digest<string>#检查后的摘要信息
status_code200#检查的返回状态码
}
connect_port<port>
bindto<IPADD>
connect_timeout5
nb_get_retry3
delay_before_retry2
}SMTP_CHECK{host{connect_ip<IPADDRESS>
connect_port<port>#默认检查25端口
bindto<IPADDRESS>
}
connect_timeout5
retry3
delay_before_retry2
helo_name<string>|<quoted-string>#smtphelo请求命令参数,可选
}
MISC_CHECK{misc_path<string>|<quoted-string>#外部脚本路径
misc_timeout#脚本执行超时时间
misc_dynamic#如设置该项,则退出状态码会用来动态调整服务器的权重,返回0正常,不修改;返回1,检查失败,权重改为0;返回2-255,正常,权重设置为:返回状态码-2
}
}

1、其他配置项说明
keepalived的核心就是将IPVS配置成高可用,生成ipvs规则来完成负载均衡效果。

virtualserver(虚拟服务)的定义:
virtual_serverIPport#定义虚拟主机IP地址及其端口
virtual_serverfwmarkint#ipvs的防火墙打标,实现基于防火墙的负载均衡集群
virtual_servergroupstring#将多个虚拟服务器定义成组,将组定义成虚拟服务
lb_algo{rr|wrr|lc|wlc|lblc|lblcr}#定义LVS的调度算法
lb_kind{NAT|DR|TUN}#定义LVS的模型
presitence_timeout#定义支持持久连接的时长
protocolTCP#规则所能支持的协议
sorry_server#如果所有real_server都出现故障了,利用此返回信息

二、术语
虚拟路由器

由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当作默认网关;

VRID

虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器;

Master路由器

虚拟路由器中承担报文转发任务的路由器;

Backup路由器

Master路由器出现故障时,能够代替Master路由器工作的路由器;

虚拟IP地址

虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址;

IP地址拥有者

接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者;

虚拟MAC地址

一个虚拟路由器拥有一个虚拟MAC地址。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址;

优先级

VRRP根据优先级来确定虚拟路由器中每台路由器的地位;

非抢占方式

如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器;

抢占方式

如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态.

三、高级使用
1、介绍

Keeaplived主要有两种应用场景,一个是通过配置keepalived结合ipvs做到负载均衡(LVS+Keepalived)。另一个是通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。

以下内容主要针对Keepalived+MySQL双主实现双机热备为根据,主要讲解keepalived的状态转换通知功能,利用此功能可有效加强对MySQL数据库监控。此文不再讲述Keepalived+MySQL双主部署过程,有需求者可参考以往博文:http://blog.jobbole.com/94643/

2、keepalived主要作用
keepalived采用VRRP(virtualrouterredundancyprotocol),虚拟路由冗余协议,以软件的形式实现服务器热备功能。通常情况下是将两台linux服务器组成一个热备组(master-backup),同一时间热备组内只有一台主服务器(master)提供服务,同时master会虚拟出一个共用IP地址(VIP),这个VIP只存在master上并对外提供服务。如果keepalived检测到master宕机或服务故障,备服务器(backup)会自动接管VIP成为master,keepalived并将master从热备组移除,当master恢复后,会自动加入到热备组,默认再抢占成为master,起到故障转移功能。

3、工作在三层、四层和七层原理
Layer3:工作在三层时,keepalived会定期向热备组中的服务器发送一个ICMP数据包,来判断某台服务器是否故障,如果故障则将这台服务器从热备组移除。

Layer4:工作在四层时,keepalived以TCP端口的状态判断服务器是否故障,比如检测mysql3306端口,如果故障则将这台服务器从热备组移除。

示例:

!ConfigurationFileforkeepalived
global_defs{notification_email{xxx@163.com
}
notification_email_fromexample@example.com
smtp_server127.0.0.1
smtp_connect_timeout30
router_idMYSQL_HA
}vrrp_instanceVI_1{stateBACKUP
interfaceeth1
virtual_router_id50
nopreempt#当主down时,备接管,主恢复,不自动接管
priority100
advert_int1
authentication{auth_typePASS
ahth_pass123
}virtual_ipaddress{192.168.1.200#虚拟IP地址
}}virtual_server192.168.1.2003306{delay_loop6
#lb_algorr
#lb_kindNAT
persistence_timeout50
protocolTCP
real_server192.168.1.2013306{#监控本机3306端口
weight1
notify_down/etc/keepalived/kill_keepalived.sh#检测3306端口为down状态就执行此脚本(只有keepalived关闭,VIP才漂移)
TCP_CHECK{#健康状态检测方式,可针对业务需求调整(TTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK)
connect_timeout3
nb_get_retry3
delay_before_retry3
}}}

Layer7:工作在七层时,keepalived根据用户设定的策略判断服务器上的程序是否正常运行,如果故障则将这台服务器从热备组移除。

示例:

!ConfigurationFileforkeepalived
global_defs{notification_email{xxx@163.com
}
notification_email_fromexample@example.com
smtp_server127.0.0.1
smtp_connect_timeout30
router_idMYSQL_HA
}vrrp_scriptcheck_nginx{script/etc/keepalived/check_nginx.sh#检测脚本
interval2#执行间隔时间
}vrrp_instanceVI_1{stateBACKUP
interfaceeth1
virtual_router_id50
nopreempt#当主down时,备接管,主恢复,不自动接管
priority100
advert_int1
authentication{auth_typePASS
ahth_pass123
}
virtual_ipaddress{192.168.1.200#虚拟IP地址
}
track_script{#在实例中引用脚本
check_nginx
}
}

脚本内容如下:

#cat/etc/keepalived/check_nginx.sh
Count1=`netstat-antp|grep-vgrep|grepnginx|wc-l`
if[$Count1-eq0];then
/usr/local/nginx/sbin/nginx
sleep2
Count2=`netstat-antp|grep-vgrep|grepnginx|wc-l`
if[$Count2-eq0];then
servicekeepalivedstop
else
exit0
fi
else
exit0
fi

4、健康状态检测方式
4.1HTTP服务状态检测

HTTP_GET或SSL_GET{url{path/index.html#检测url,可写多个
digest24326582a86bee478bac72d5af25089e#检测效验码
#digest效验码获取方法:genhash-sIP-p80-uhttp://IP/index.html
status_code200#检测返回http状态码
}
connect_port80#连接端口
connect_timeout3#连接超时时间
nb_get_retry3#重试次数
delay_before_retry2#连接间隔时间
}

4.2TCP端口状态检测(使用TCP端口服务基本上都可以使用)

TCP_CHECK{connect_port80#健康检测端口,默认为real_server后跟端口connect_timeout5nb_get_retry3delay_before_retry3}

4.3邮件服务器SMTP检测
SMTP_CHECK{#健康检测邮件服务器smtp

host{connect_ipconnect_port}connect_timeout5retry2delay_before_retry3hello_name"mail.domain.com"}

4.4用户自定义脚本检测real_server服务状态

MISC_CHECK{misc_path/script.sh#指定外部程序或脚本位置misc_timeout3#执行脚本超时时间!misc_dynamic#不动态调整服务器权重(weight),如果启用将通过退出状态码动态调整real_server权重值}

5、状态转换通知功能
keepalived主配置邮件通知功能,默认当real_server宕机或者恢复时才会发出邮件。有时我们更想知道keepalived的主服务器故障切换后,VIP是否顺利漂移到备服务器,MySQL服务器是否正常?那写个监控脚本吧,可以,但没必要,因为keepalived具备状态检测功能,所以我们直接使用就行了。
主配置默认邮件通知配置模板如下:

global_defs#Blockid
{notification_email#To:
{admin@example1.com
...}#From:fromaddressthatwillbeinheadernotification_email_fromadmin@example.comsmtp_server127.0.0.1#IPsmtp_connect_timeout30#integer,secondsrouter_idmy_hostname#stringidentifyingthemachine,#(doesn'thavetobehostname).enable_traps#enableSNMPtraps}

5.1实例状态通知

a)notify_master:节点变为master时执行

b)notify_backup:节点变为backup时执行

c)notify_fault:节点变为故障时执行

5.2虚拟服务器检测通知

a)notify_up:虚拟服务器up时执行

b)notify_down:虚拟服务器down时执行

示例:

!ConfigurationFileforkeepalived
global_defs{notification_email{example@163.com
}notification_email_fromexample@example.com
smtp_server127.0.0.1
smtp_connect_timeout30
router_idMYSQL_HA
}
vrrp_instanceVI_1{stateBACKUP
interfaceeth1
virtual_router_id50
nopreempt#当主down时,备接管,主恢复,不自动接管
priority100
advert_int1
authentication{auth_typePASS
ahth_pass123
}
virtual_ipaddress{192.168.1.200
}
notify_master/etc/keepalived/to_master.sh
notify_backup/etc/keepalived/to_backup.sh
notify_fault/etc/keepalived/to_fault.sh
}virtual_server192.168.1.2003306{delay_loop6persistence_timeout50protocolTCPreal_server192.168.1.2013306{weight1notify_up/etc/keepalived/mysql_up.shnotify_down/etc/keepalived/mysql_down.shTCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3}}}

状态参数后可以是bash命令,也可以是shell脚本,内容根据自己需求定义,以上示例中所涉及状态脚本如下:
1)当服务器改变为主时执行此脚本

#!/bin/bash
Date=$(date+%F""%T)
IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}')
Mail="baojingtongzhi@163.com"
echo"$Date$IPchangetomaster."|mail-s"Master-BackupChangeStatus"$Mail

2)当服务器改变为备时执行此脚本

#!/bin/bash
Date=$(date+%F""%T)
IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}')
Mail="baojingtongzhi@163.com"
echo"$Date$IPchangetobackup."|mail-s"Master-BackupChangeStatus"$Mail

3)当服务器改变为故障时执行此脚本

#!/bin/bash
Date=$(date+%F""%T)
IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}')
Mail="baojingtongzhi@163.com"
echo"$Date$IPchangetofault."|mail-s"Master-BackupChangeStatus"$Mail

4)当检测TCP端口3306为不可用时,执行此脚本,杀死keepalived,实现切换

#!/bin/bash
Date=$(date+%F""%T)
IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}')
Mail="baojingtongzhi@163.com"
pkillkeepalived
echo"$Date$IPThemysqlservicefailure,killkeepalived."|mail-s"Master-BackupMySQLMonitor"$Mail

5)当检测TCP端口3306可用时,执行此脚本

#!/bin/bash
Date=$(date+%F""%T)
IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}')
Mail="baojingtongzhi@163.com"
echo"$Date$IPThemysqlserviceisrecovery."|mail-s"Master-BackupMySQLMonitor"$Mail

keeplive安装部署相关推荐

  1. 2021年大数据Flink(三):​​​​​​​Flink安装部署 Local本地模式

    目录 Flink安装部署 Local本地模式 原理 操作 测试 Flink安装部署 Flink支持多种安装模式 - Local-本地单机模式,学习测试时使用 - Standalone-独立集群模式,F ...

  2. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  3. 【SVN】1. SVN 安装部署

    一. SVN概述 1. SVN 简介   Subversion 版本控制系统 简称 SVN.   SVN 是一个跨平台开放源代码的集中式版本控制系统,可以实现文件及目录的保存及版本回溯.   SVN ...

  4. Docker概述和安装部署

    概述 Docker产生的背景 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后 ...

  5. DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...

    吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1 数字签名服务器v2.1.1 安装部署手册 (VSTK接口 COM版) V2.1.1 长 春 吉 大 正 元 信 息 技 术 ...

  6. Airflow安装部署

    Airflow安装部署 新闻信息是通过爬虫获取,使用scrapy框架进行爬虫任务:使用airflow工作流监控平台对爬虫任务进行管理.监控(可使用CeleryExecutor分布式,也可使用Local ...

  7. logicaldoc 6.5 结合postgresql 9.x安装部署—基于windows平台

    2019独角兽企业重金招聘Python工程师标准>>> 湘中朱生   2012年9月于深圳 说明:原创内容,请勿转载! <1> 从官网下载部署包 官方网站提供源码包和集成 ...

  8. Centos6.0 64位MySQL 5.5.20 CMake 安装部署

    Centos6.0 64位下 MySQL 5.5.20 CMake 安装部署 一.下载所需软件 linux用 wget 下载需要的软件,保存到目录 /usr/local/src 下 wget ftp: ...

  9. 【原创 HadoopSpark 动手实践 1】Hadoop2.7.3 安装部署实践

    目录: 第一部分:操作系统准备工作: 1. 安装部署CentOS7.3 1611 2. CentOS7软件安装(net-tools, wget, vim等) 3. 更新CentOS7的Yum源,更新软 ...

  10. DinnerNow - 如何安装部署

    DinnerNow - 如何安装部署  记得还是去年七月份.在微软的一次培训中,一位姓杨的讲师提到了这个DEMO.我后来回到公司就从相关站点 http://www.dinnernow.net 下载了一 ...

最新文章

  1. Problem 61 修改进程的显示名称
  2. ElasticSearch Shard——本质上是做分布式扩展,副本对于集群的稳定性有很强的影响...
  3. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理
  4. iOS动画编程-Layer动画[ 2 ] Getting Started with Layer Animations
  5. Java中使用Jedis连接Redis对String进行操作的常用命令
  6. UVA 10271 Chopsticks
  7. 编码:隐匿在计算机软硬件背后的语言(7)--存储器组织
  8. static class 静态类(Java)
  9. T5: Linux查看cpu信息,是否支持avx2指令集
  10. 一名前端 Leader 的转正述职记录
  11. 三相PWM整流器(simulink仿真搭建)
  12. 消费者洞察:一文看懂消费者是如何做选择的
  13. 【答学员问】虚拟机不能正常启动,提示找不到VMX二进制文件
  14. 【微信公众号】获取获取微信的access_token
  15. 中国求职者2亿私人简历泄露,APT情报资讯报告2018全球十大安全事件(10401字) (附PDF公号发“简历十大安全”下载)
  16. 网络基础知识之IP与子网掩码和网络地址
  17. 游戏夜读 | 简单认识一下爬虫
  18. iOS中调用短信、电话、邮件、Safari浏览器API
  19. 推荐系统实践读书笔记-05利用上下文信息
  20. 我彻底抛弃Windows,入坑MacBook

热门文章

  1. 机器学习入门实战——线性支持向量机实战digits数据集
  2. 深入浅出PHP amp; MySQL,深入浅出 PHP MySQL
  3. vsftp配置问题启示录
  4. linux连接小米随身wifi密码忘记了,小米随身wifi设置教程
  5. jquery 时间选择插件-jedate
  6. scrt远程连接工具怎么切换窗口
  7. 宏杉科技助力西安交大二附院:突破存储旧瓶颈、实现业务新成长
  8. 终极算法【6】——贝叶斯学派
  9. php word 简历模板,php程序员简历模板
  10. 万能启动的最后的传说:UD三分区法部署教程!UD加UEFI!