首页 文章 精选 留言 我的

精选列表

搜索[应用/实战],共10012篇文章
优秀的个人博客,低调大师

Docker入门基础之应用实战

当我们掌握了Docker镜像和容器的基本用法后,我们现在能做些什么事情呢?现在我们就来看看使用Docker容器如何安装常见的软件,然后运行一个动态网站。 下面我们来学习: 1、安装Nginx 2、安装PHP 3、使用MySQL服务 4、运行wordpress博客 安装Nginx运行一个Alpine的容器,选择Alpine作为系统基础镜像是因为Alpine轻巧的体积,基础镜像只有5.53MB,相比ubuntu镜像的88.9MB要小十几倍。 root@ubuntu:~# docker run -it -p 8080:80 alpine sh 安装nginx apk add nginx 修改nginx配置 vi /etc/nginx/conf.d/default.conf default.conf内容如下: server { listen 80 default_server; ​ root /home/www; index index.php index.html; } 创建Hello World mkdir /home/www && echo "Hello World" > /home/www/index.html 创建/run/nginx目录 mkdir /run/nginx 启动nginx nginx 在浏览器中访问 http://192.168.43.122:8080 nginx安装成功,WEB服务访问正常! 安装PHP现在我们来安装PHP,方法还是一样,使用 apk add 命令来安装php7,php-fpm以及相关扩展。 apk add --no-cache php7 php7-fpm php7-ftp php7-pdo php7-mysqli php7-simplexml php7-xmlwriter php7-zlib php7-imagick php7-memcached php7-sockets php7-mcrypt php7-zip php7-pgsql php7-pdo_odbc php7-odbc php7-curl php7-iconv php7-xml php7-json php7-gd php7-session php7-opcache php7-pdo_sqlite php7-mbstring php7-common php7-pdo_mysql 以上顺带安装了很多php扩展,可根据实际需求增减。 现在启动php-fpm7 php-fpm7 修改nginx配置,添加php支持 vi /etc/nginx/conf.d/default.conf 内容如下 server { listen 80 default_server; root /home/www; index index.php index.html; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /home/www$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } 在网站目录中创建phpinfo.php echo "<?php phpinfo(); ?>" > /home/www/phpinfo.php 重启nginx nginx -s reload 在浏览器中访问 http://192.168.43.122:8080/phpinfo.php PHP安装成功,WEB服务访问正常! 使用MySQL服务我们不在Alpine里面安装MySQL,为了使用效率,这里我们直接使用官方镜像即可,新开一个ssh终端连接宿主机,在home目录下新建database目录 mkdir /home/database 使用官方mysql5.7镜像运行一个容器,root密码设置为123456,映射3306端口,并将宿主机/home/database目录挂载到容器/var/lib/mysql目录 docker run -dit -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /home/database:/var/lib/mysql mysql:5.7 docker ps查看容器 上图中看到,我们现在运行了2个容器,1个是安装了nginx和php的Alpine容器,1个是mysql5.7的容器 进入mysql容器 docker exec -it c8c85af64822 sh 登录并创建wordpress数据库 #用root用户登录 mysql -u root -p #创建wordpress数据库 mysql> CREATE DATABASE wordpress; 运行wordpress博客php网站环境和mysql数据库都准备好了,现在我们回到Alpine的ssh终端上,在容器内下载一个wordpress网站程序。 #进入网站目录 cd /home/www/ #下载wordpress wget https://wordpress.org/latest.tar.gz #解压 tar zxvf latest.tar.gz #将wordpress目录下的文件复制到www目录下 cp -ri /home/www/wordpress/* /home/www/ #设置777权限 chmod -R 777 /home/www/ 在浏览器中访问 http://192.168.43.122:8080,可以看到wordpres页面 填写数据库信息 安装完成,wordpress正常使用!

优秀的个人博客,低调大师

zabbix应用实战--Nginx监控详解

样例视频教程参考: http://www.roncoo.com/course/view/fb3050a5b34b42f39ccad83ebebc89c1 龙果运维平台开源地址:https://github.com/roncoo/roncoo-cmdb 一、nginx监控说明: 1、监控指标: 基本活动指标 错误指标 性能指标 2、nginx 处理请求流程(图形): 注释:Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)、Waiting(等待)、Reading(读)、Writing(写)随着请求量而增减 名称 描述 指标类型 Accepts(接受) NGINX 所接受的客户端连接数 资源: 功能 Handled(已处理) 成功的客户端连接数 资源: 功能 Active(活跃) 当前活跃的客户端连接数 资源: 功能 Dropped(已丢弃,计算得出) 丢弃的连接数(接受 – 已处理) 工作:错误* Requests(请求数) 客户端请求数 工作:吞吐量 NGINX worker 进程接受 OS 的连接请求时 Accepts 计数器增加,而Handled 是当实际的请求得到连接时(通过建立一个新的连接或重新使用一个空闲的)。这两个计数器的值通常都是相同的,如果它们有差别则表明连接被Dropped, 往往这是由于资源限制,比如已经达到 NGINX 的worker_connections的限制。 二、监控配置: 1、主要是基于nginx的status模块.在编译安装时候加上--with-http_stub_status_module.模块编译 2、修改配置文件开启nginx_status: location /nginx_status { stub_status on; access_log off; allow 192.168.1.100; 访问IP deny all; } 3、打开web 监控: 注释: Active:当前活跃的连接数。 Accepts:接受的请求数 Handled:处理的请求数(正常服务器响应,这两项应该是可以相等的) Requests:客户端处理的请求数。(吞吐量) Reading:当接收到请求时,连接离开 Waiting 状态,并且该请求本身使 Reading 状态计数增加。在这种状态下 NGINX 会读取客户端请求首部。请求首部是比较小的,因此这通常是一个快速的操作。 Writing:请求被读取之后,其使 Writing 状态计数增加,并保持在该状态,直到响应返回给客户端。这意味着,该请求在 Writing 状态时, 一方面 NGINX 等待来自上游系统的结果(系统放在 NGINX “后面”),另外一方面,NGINX 也在同时响应。请求往往会在 Writing 状态花费大量的时间。 Waiting:活跃的连接也可以处于 Waiting 子状态,如果有在此刻没有活跃请求的话。新连接可以绕过这个状态并直接变为到 Reading 状态,最常见的是在使用“accept filter(接受过滤器)” 和 “deferred accept(延迟接受)”时,在这种情况下,NGINX 不会接收 worker 进程的通知,直到它具有足够的数据才开始响应。如果连接设置为 keep-alive ,那么它在发送响应后将处于等待状态 三、添加监控: 1、添加脚本: [root@BJ-monitor-h-01 scripts]# cat nginx_status.sh #!/bin/bash # Script to fetch nginx statuses for tribily monitoring systems # Author: xiaoluo function active { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| grep 'Active' | awk '{print $NF}' } function reading { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| grep 'Reading' | awk '{print $2}' } function writing { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| grep 'Writing' | awk '{print $4}' } function waiting { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } function accepts { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| awk NR==3 | awk '{print $1}' } function handled { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| awk NR==3 | awk '{print $2}' } function requests { /usr/bin/curl "http://192.168.10.234/status" 2>/dev/null| awk NR==3 | awk '{print $3}' } # Run the requested function $1 2、zabbix配置文件添加自定义监控: UserParameter=nginx[*],/usr/local/zabbix/scripts/nginx_status.sh $1 3、web界面添加item即可,以链接状态为例(类似的添加即可): 总结,导出nginx监控添加已经完成。 更多课程信息,请关注 龙果学院 官方网站http://www.roncoo.com/ 或关注 龙果 微信公众号 RonCoo_com

优秀的个人博客,低调大师

《Greenplum企业应用实战》一导读

前 言 为什么写作本书 阿里巴巴是国内最早使用Greenplum作为数据仓库计算中心的公司。从2009年到2012年Greenplum都是阿里巴巴B2B最重要的数据计算中心,它替换掉了之前的Oracle RAC,有非常多的优点。 Greenplum的性能在数据量为TB级别时表现非常优秀,单机性能相比Hadoop要快好几倍。 Greenplum是基于PostgreSQL的一个完善的数据库,在功能和语法上都要比Hadoop上的SQL引擎Hive好用很多,对于普通用户来说更加容易上手。 Greenplum有着完善的工具,相比Hive,整个体系都比较完善,不需要像Hive一样花太多的时间和精力进行改造,非常适合作为一些大型的数据仓库解决方案。 Greenplum能够方便地与Hadoop进行结合,可直接把数据写在Hadoop上,还可以直接在数据

优秀的个人博客,低调大师

KVM虚拟化应用实战(1)

一、VNC的安装与使用 # yum -y install tigervnc-server 首次启动 # vncserver :1 会提示输入两次密码 然后编辑/root/.vnc/xstartup,将最后一行twm替换为gnome-session或者startkde 懒人可以直接用以下语句直接替换(执行任意一条即可,建议选择第一条稳定,但是占用内存较多) sed -i 's/twm/gnome-session/g' /root/.vnc/xstartup sed -i 's/twm/startkde/g' /root/.vnc/xstartup 重启vncserver # vncserver 客户端连接 vncclient里输入 vncserver-IP:1 可能出现的问题: vncserver 启动错误:could not open default font 'fixed'错误. 安装vncserver出现如下错误: vncext:VNCextensionrunning! vncext:ListeningforVNCconnectionsonallinterface(s),port5901 vncext:createdVNCserverforscreen0 Couldnotinitfontpathelement/usr/share/X11/fonts/misc,removingfromlist! Couldnotinitfontpathelement/usr/share/fonts/default/Type1,removingfromlist! Couldnotinitfontpathelementbuilt-ins,removingfromlist! 主要是缺少相关字体,通过yum安装即可 yuminstalllibXfont yuminstallxorg-x11-xfs yuminstallxorg-x11-xfs-utils yuminstallxorg-x11-xinit yuminstallxorg-x11-xdm yuminstallxorg-x11-fonts* 安装完后从新启动vnc服务即可。 二、查看是否支持虚拟化 vmware开启方式虚拟化方式如下图,虚拟机下面可以用VNC连接安装系统,如果服务器在idc机房,是连不上去的,另外kvm和桌面系统兼容性不清楚,有发生过卡死的情况,所以还是命令行,下面是一步一步的 操作过程,按着步骤肯定可以! 确定服务器是否支持虚拟化,如果没有查到,在bios里面开启 vmx属于inter处理器,svm属于amd处理器 egrep'vmx|svm'/proc/cpuinfo flags:fpuvmedepsetscmsrpaemcecx8apicsepmtrrpgemcacmov patpse36clflushdtsacpimmxfxsrssesse2sshttmpbesyscallnxpdpe1gb rdtscplmconstant_tscarch_perfmonpebsbtsrep_goodxtopologynonstop_tsc aperfmperfpnipclmulqdqdtes64monitords_cplvmxsmxesttm2ssse3cx16xtpr pdcmpciddcasse4_1sse4_2x2apicpopcnttsc_deadline_timeraesxsaveavx lahf_lmidaaratxsaveoptplnptsdtstpr_shadowvnmiflexpriorityeptvpid 三、安装kvm包 安装过程如下: yumgroupinstall"DevelopmentTools" yumgroupinstall"Virtualization""VirtualizationClient""VirtualizationPlatform" virtualization //提供虚拟机的环境,主要包含qumu-kvm virtualization-client//管理和安装虚拟机实例的客户端,主要有python-virtinst,virt-manager,virt-viewer virtualization-platform//提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client 四、检查安装后是否加载模块 lsmod|grepkvm kvm_intel5348412 kvm3165061kvm_intel 查看kvm正常运行 /etc/init.d/libvirtd start chkconfig libvirtd on 安装完成后,需要启动/etc/init.d/libvirtd服务,在启动过程中可能出现如下错误: 启动libvirtd有如下报错: [root@kvmmasterlib64]#servicelibvirtdrestart 正在关闭libvirtd守护进程:[失败] 启动libvirtd守护进程:libvirtd:relocationerror:libvirtd:symboldm_task_get_info_with_deferred_remove,versionBasenotdefinedinfilelibdevmapper.so.1.02withlinktimereference[失败] 解决方案如下: yum -y upgrade device-mapper-libs

优秀的个人博客,低调大师

LVS+keepalived高性能集群应用实战

[root@example~]#yuminstallipvsadm-y安装ip_vs管理工具 理论部分我们在上篇文章中详细介绍了,这次进入实操阶段 [root@example~]#modprobeip_vs加载ip_vs模块 [root@example~]#modprobeip_vs_rr [root@example~]#lsmod|grepip_vs ip_vs_rr14200 ip_vs1265342ip_vs_rr libcrc32c12461ip_vs ipv6335589271ip_vs [root@example~]#ipaddradd192.168.189.200/24deveth0labeleth0:1手动加vip地址 [root@example~]#ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:5a:e1:a3brdff:ff:ff:ff:ff:ff inet192.168.189.130/24brd192.168.189.255scopeglobaleth0 inet192.168.189.200/24scopeglobalsecondaryeth0:1 inet6fe80::20c:29ff:fe5a:e1a3/64scopelink valid_lftforeverpreferred_lftforever 本次环境规划如下 操作系统 centos6.7 [root@example~]#curl192.168.189.132 web01_192.168.189.132 [root@example~]#curl192.168.189.133 web02_192.168.189.133 手工执行配置lvs服务器并添加两台rs服务 查看相关的帮助命令 [root@example~]#ipvsadm--help ipvsadmv1.262008/5/15(compiledwithpoptandIPVSv1.2.1) Usage: ipvsadm-A|E-t|u|fservice-address[-sscheduler][-p[timeout]][-Mnetmask][--pepersistence_engine] ipvsadm-D-t|u|fservice-address ipvsadm-C ipvsadm-R ipvsadm-S[-n] ipvsadm-a|e-t|u|fservice-address-rserver-address[options] ipvsadm-d-t|u|fservice-address-rserver-address ipvsadm-L|l[options] ipvsadm-Z[-t|u|fservice-address] ipvsadm--settcptcpfinudp ipvsadm--start-daemonstate[--mcast-interfaceinterface][--syncidsid] ipvsadm--stop-daemonstate ipvsadm-h Commands: Eitherlongorshortoptionsareallowed. --add-service-Aaddvirtualservicewithoptions --edit-service-Eeditvirtualservicewithoptions --delete-service-Ddeletevirtualservice --clear-Cclearthewholetable --restore-Rrestorerulesfromstdin --save-Ssaverulestostdout --add-server-aaddrealserverwithoptions --edit-server-eeditrealserverwithoptions --delete-server-ddeleterealserver --list-L|-llistthetable --zero-Zzerocountersinaserviceorallservices --settcptcpfinudpsetconnectiontimeoutvalues --start-daemonstartconnectionsyncdaemon --stop-daemonstopconnectionsyncdaemon --help-hdisplaythishelpmessage [root@example~]#ipvsadm-C清空全部配置 [root@example~]#ipvsadm-A-t192.168.189.200:80-swrr指定vip并设定调度算法 [root@example~]#ipvsadm-a-t192.168.189.200:80-r192.168.189.132:80-g-w1添加rs [root@example~]#ipvsadm-a-t192.168.189.200:80-r192.168.189.133:80-g-w3 [root@example~]#ipvsadm-Ln IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn TCP192.168.189.200:80wrr ->192.168.189.132:80Route100 ->192.168.189.133:80Route300 手工在rs服务器上面绑定操作 第一台 [root@example~]#ifconfiglo:132192.168.189.200netmask255.255.255.255up [root@example~]#routeadd-host192.168.189.200devlo [root@example~]#ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet192.168.189.200/32brd192.168.189.200scopegloballo:132 inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:66:66:33brdff:ff:ff:ff:ff:ff inet192.168.189.132/24brd192.168.189.255scopeglobaleth0 inet6fe80::20c:29ff:fe66:6633/64scopelink valid_lftforeverpreferred_lftforever 第二台 [root@example~]#ipaddradd192.168.189.200/32devlolabello:133 [root@example~]#routeadd-host192.168.189.200devlo [root@example~]#ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet192.168.189.200/32scopegloballo:133 inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:6c:a9:25brdff:ff:ff:ff:ff:ff inet192.168.189.133/24brd192.168.189.255scopeglobaleth0 inet6fe80::20c:29ff:fe6c:a925/64scopelink valid_lftforeverpreferred_lftforever 手工在rs端抑制arp响应 第一台 [root@example~]#echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@example~]#echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@example~]#echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@example~]#echo"2">/proc/sys/net/ipv4/conf/all/arp_announce 第二台 [root@example~]#echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@example~]#echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@example~]#echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@example~]#echo"2">/proc/sys/net/ipv4/conf/all/arp_announce 测试访问,不停的刷新,同时打开web服务器的log观察 web01_132日志 [root@example~]#tail-f/var/log/httpd/access_log 192.168.189.1--[13/Aug/2016:14:34:21+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:24+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:25+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" web01_133日志 [root@example~]#tail-f/var/log/httpd/access_log 192.168.189.1--[13/Aug/2016:14:33:54+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:33:54+0800]"GET/favicon.icoHTTP/1.1"404290"http://192.168.189.200/""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:05+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:17+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:20+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:22+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:23+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:23+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:24+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:25+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:25+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:26+0800]"GET/HTTP/1.1"20022"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" 192.168.189.1--[13/Aug/2016:14:34:26+0800]"GET/HTTP/1.1"304-"-""Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/51.0.2704.106Safari/537.36" [root@example~]#ipvsadm-Ln--stats可以看到基本符合我们设定的权重1:3 IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortConnsInPktsOutPktsInBytesOutBytes ->RemoteAddress:Port TCP192.168.189.200:80663350444740 ->192.168.189.132:8016820109780 ->192.168.189.133:80502530334960 上面日志可能不够直观,最好再开一个客户端去执行for循环测试,这里就不在演示 以上手工创建只是为了让我更好的理解lvs的过程,好了下面开始我们的keepalived部分 安装keepalived [root@example~]#yuminstallkeepalived-y 配置keepalived 主节点上面 [root@example~]#cat/etc/keepalived/keepalived.conf global_defs{ notification_email{ 1335120568@qq.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server192.168.200.1 smtp_connect_timeout30 router_idLVS_01 } vrrp_instanceweb{ stateMASTER interfaceeth0 virtual_router_id51 priority150 advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 192.168.189.200/24 } } virtual_server192.168.189.20080{ delay_loop6 lb_algowrr lb_kindDR nat_mask255.255.255.0 persistence_timeout50 protocolTCP real_server192.168.189.13280{ weight1 TCP_CHECK{ connect_timeout8 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server192.168.189.13380{ weight1 TCP_CHECK{ connect_timeout8 nb_get_retry3 delay_before_retry3 connect_port80 } } } 备用节点上面keepalived配置 [root@example~]#cat/etc/keepalived/keepalived.conf global_defs{ notification_email{ 1335120568@qq.com } notification_email_fromAlexandre.Cassen@firewall.loc smtp_server192.168.200.1 smtp_connect_timeout30 router_idLVS_02 } vrrp_instanceweb{ stateBACKUP interfaceeth0 virtual_router_id51 priority100 advert_int1 authentication{ auth_typePASS auth_pass1111 } virtual_ipaddress{ 192.168.189.200/24 } } virtual_server192.168.189.20080{ delay_loop6 lb_algowrr lb_kindDR nat_mask255.255.255.0 persistence_timeout50 protocolTCP real_server192.168.189.13280{ weight1 TCP_CHECK{ connect_timeout8 nb_get_retry3 delay_before_retry3 connect_port80 } } real_server192.168.189.13380{ weight1 TCP_CHECK{ connect_timeout8 nb_get_retry3 delay_before_retry3 connect_port80 } } } 启动主备keepalived的观察log [root@example~]#/etc/init.d/keepalivedstart Startingkeepalived:[OK] 主节点上面 [root@examplekeepalived]#tail-f/var/log/messages Aug1315:11:10exampleKeepalived[45366]:StartingKeepalivedv1.2.13(03/19,2015) Aug1315:11:10exampleKeepalived[45367]:StartingHealthcheckchildprocess,pid=45369 Aug1315:11:10exampleKeepalived[45367]:StartingVRRPchildprocess,pid=45370 Aug1315:11:10exampleKeepalived_healthcheckers[45369]:NetlinkreflectorreportsIP192.168.189.130added Aug1315:11:10exampleKeepalived_vrrp[45370]:NetlinkreflectorreportsIP192.168.189.130added Aug1315:11:10exampleKeepalived_vrrp[45370]:NetlinkreflectorreportsIP192.168.189.200added Aug1315:11:10exampleKeepalived_vrrp[45370]:NetlinkreflectorreportsIPfe80::20c:29ff:fe5a:e1a3added Aug1315:11:10exampleKeepalived_vrrp[45370]:RegisteringKernelnetlinkreflector Aug1315:11:10exampleKeepalived_vrrp[45370]:RegisteringKernelnetlinkcommandchannel Aug1315:11:10exampleKeepalived_vrrp[45370]:RegisteringgratuitousARPsharedchannel Aug1315:11:10exampleKeepalived_healthcheckers[45369]:NetlinkreflectorreportsIP192.168.189.200added Aug1315:11:10exampleKeepalived_healthcheckers[45369]:NetlinkreflectorreportsIPfe80::20c:29ff:fe5a:e1a3added Aug1315:11:10exampleKeepalived_healthcheckers[45369]:RegisteringKernelnetlinkreflector Aug1315:11:10exampleKeepalived_healthcheckers[45369]:RegisteringKernelnetlinkcommandchannel Aug1315:11:10exampleKeepalived_vrrp[45370]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:11:10exampleKeepalived_vrrp[45370]:Configurationisusing:63278Bytes Aug1315:11:10exampleKeepalived_vrrp[45370]:UsingLinkWatchkernelnetlinkreflector... Aug1315:11:10exampleKeepalived_healthcheckers[45369]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:11:10exampleKeepalived_healthcheckers[45369]:Configurationisusing:14742Bytes Aug1315:11:10exampleKeepalived_vrrp[45370]:VRRPsockpool:[ifindex(2),proto(112),unicast(0),fd(10,11)] Aug1315:11:10exampleKeepalived_healthcheckers[45369]:UsingLinkWatchkernelnetlinkreflector... Aug1315:11:10exampleKeepalived_healthcheckers[45369]:Activatinghealthcheckerforservice[192.168.189.132]:80 Aug1315:11:10exampleKeepalived_healthcheckers[45369]:Activatinghealthcheckerforservice[192.168.189.133]:80 Aug1315:11:11exampleKeepalived_vrrp[45370]:VRRP_Instance(web)TransitiontoMASTERSTATE Aug1315:11:11exampleKeepalived_vrrp[45370]:VRRP_Instance(web)Receivedlowerprioadvert,forcingnewelection Aug1315:11:12exampleKeepalived_vrrp[45370]:VRRP_Instance(web)EnteringMASTERSTATE Aug1315:11:12exampleKeepalived_vrrp[45370]:VRRP_Instance(web)settingprotocolVIPs. Aug1315:11:12exampleKeepalived_vrrp[45370]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 Aug1315:11:17exampleKeepalived_vrrp[45370]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 Aug1315:13:36exampledhclient[1239]:DHCPREQUESToneth0to192.168.189.254port67(xid=0x3b1957c6) Aug1315:13:36exampledhclient[1239]:DHCPACKfrom192.168.189.254(xid=0x3b1957c6) Aug1315:13:38exampledhclient[1239]:boundto192.168.189.130--renewalin678seconds. 备用节点上面 [root@examplekeepalived]#tail-f/var/log/messages Aug1315:11:03exampleKeepalived[1937]:StartingKeepalivedv1.2.13(03/19,2015) Aug1315:11:03exampleKeepalived[1938]:StartingHealthcheckchildprocess,pid=1940 Aug1315:11:03exampleKeepalived[1938]:StartingVRRPchildprocess,pid=1941 Aug1315:11:03exampleKeepalived_vrrp[1941]:NetlinkreflectorreportsIP192.168.189.131added Aug1315:11:03exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIP192.168.189.131added Aug1315:11:03exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIPfe80::20c:29ff:feea:4c15added Aug1315:11:03exampleKeepalived_healthcheckers[1940]:RegisteringKernelnetlinkreflector Aug1315:11:03exampleKeepalived_healthcheckers[1940]:RegisteringKernelnetlinkcommandchannel Aug1315:11:03exampleKeepalived_vrrp[1941]:NetlinkreflectorreportsIPfe80::20c:29ff:feea:4c15added Aug1315:11:03exampleKeepalived_vrrp[1941]:RegisteringKernelnetlinkreflector Aug1315:11:03exampleKeepalived_vrrp[1941]:RegisteringKernelnetlinkcommandchannel Aug1315:11:03exampleKeepalived_vrrp[1941]:RegisteringgratuitousARPsharedchannel Aug1315:11:03exampleKeepalived_vrrp[1941]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:11:03exampleKeepalived_vrrp[1941]:Configurationisusing:63278Bytes Aug1315:11:03exampleKeepalived_vrrp[1941]:UsingLinkWatchkernelnetlinkreflector... Aug1315:11:03exampleKeepalived_vrrp[1941]:VRRP_Instance(web)EnteringBACKUPSTATE Aug1315:11:03exampleKeepalived_vrrp[1941]:VRRPsockpool:[ifindex(2),proto(112),unicast(0),fd(10,11)] Aug1315:11:03exampleKeepalived_healthcheckers[1940]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:11:03exampleKeepalived_healthcheckers[1940]:Configurationisusing:14742Bytes Aug1315:11:04exampleKeepalived_healthcheckers[1940]:UsingLinkWatchkernelnetlinkreflector... Aug1315:11:04exampleKeepalived_healthcheckers[1940]:Activatinghealthcheckerforservice[192.168.189.132]:80 Aug1315:11:04exampleKeepalived_healthcheckers[1940]:Activatinghealthcheckerforservice[192.168.189.133]:80 Aug1315:11:04examplekernel:IPVS:[wrr]schedulerregistered. Aug1315:11:07exampleKeepalived_vrrp[1941]:VRRP_Instance(web)TransitiontoMASTERSTATE Aug1315:11:08exampleKeepalived_vrrp[1941]:VRRP_Instance(web)EnteringMASTERSTATE Aug1315:11:08exampleKeepalived_vrrp[1941]:VRRP_Instance(web)settingprotocolVIPs. Aug1315:11:08exampleKeepalived_vrrp[1941]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 Aug1315:11:08exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIP192.168.189.200added Aug1315:11:10examplentpd[1525]:Listennormallyon6eth0192.168.189.200UDP123 Aug1315:11:11exampleKeepalived_vrrp[1941]:VRRP_Instance(web)Receivedhigherprioadvert Aug1315:11:11exampleKeepalived_vrrp[1941]:VRRP_Instance(web)EnteringBACKUPSTATE Aug1315:11:11exampleKeepalived_vrrp[1941]:VRRP_Instance(web)removingprotocolVIPs. Aug1315:11:11exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIP192.168.189.200removed Aug1315:11:13examplentpd[1525]:Deletinginterface#6eth0,192.168.189.200#123,interfacestats:received=0,sent=0,dropped=0,active_time=3secs 主节点vip地址情况 [root@example~]#ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:5a:e1:a3brdff:ff:ff:ff:ff:ff inet192.168.189.130/24brd192.168.189.255scopeglobaleth0 inet192.168.189.200/24scopeglobalsecondaryeth0:1 inet6fe80::20c:29ff:fe5a:e1a3/64scopelink valid_lftforeverpreferred_lftforever 备用节点vip地址情况 [root@example~]#ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link/loopback00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1/8scopehostlo inet6::1/128scopehost valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_faststateUPqlen1000 link/ether00:0c:29:ea:4c:15brdff:ff:ff:ff:ff:ff inet192.168.189.131/24brd192.168.189.255scopeglobaleth0 inet6fe80::20c:29ff:feea:4c15/64scopelink valid_lftforeverpreferred_lftforever rs服务器配置(两台都需要做) [root@example ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore [root@example ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce [root@example ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore [root@example ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce [root@example ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet 192.168.189.200/32 scope global lo:1 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:66:66:33 brd ff:ff:ff:ff:ff:ff inet 192.168.189.132/24 brd 192.168.189.255 scope global eth0 inet6 fe80::20c:29ff:fe66:6633/64 scope link valid_lft forever preferred_lft forever 高可用×××测试 高可用性是通过LVS的两个DirectorServer完成的,为了模拟故障,先将主DirectorServer 上面的Keepalived服务停止,然后观察备用DirectorServer上Keepalived的运行日志,信息如下: [root@example~]#/etc/init.d/keepalivedstop主节点 Stoppingkeepalived:[OK] 主节点日志 Aug1315:18:53exampleKeepalived[45367]:StoppingKeepalivedv1.2.13(03/19,2015) Aug1315:18:53exampleKeepalived_vrrp[45370]:VRRP_Instance(web)sending0priority Aug1315:18:53exampleKeepalived_vrrp[45370]:VRRP_Instance(web)removingprotocolVIPs. Aug1315:18:53exampleKeepalived_healthcheckers[45369]:NetlinkreflectorreportsIP192.168.189.200removed Aug1315:18:53exampleKeepalived_healthcheckers[45369]:Removingservice[192.168.189.132]:80fromVS[192.168.189.200]:80 Aug1315:18:53exampleKeepalived_healthcheckers[45369]:Removingservice[192.168.189.133]:80fromVS[192.168.189.200]:80 Aug1315:18:53examplekernel:IPVS:__ip_vs_del_service:enter Aug1315:18:54examplentpd[1525]:Deletinginterface#6eth0:1,192.168.189.200#123,interfacestats:received=0,sent=0,dropped=0,active_time=5131secs 备用节点日志 Aug1315:18:53exampleKeepalived_vrrp[1941]:VRRP_Instance(web)TransitiontoMASTERSTATE Aug1315:18:54exampleKeepalived_vrrp[1941]:VRRP_Instance(web)EnteringMASTERSTATE Aug1315:18:54exampleKeepalived_vrrp[1941]:VRRP_Instance(web)settingprotocolVIPs. Aug1315:18:54exampleKeepalived_vrrp[1941]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 Aug1315:18:54exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIP192.168.189.200added Aug1315:18:56examplentpd[1525]:Listennormallyon7eth0192.168.189.200UDP123 Aug1315:18:59exampleKeepalived_vrrp[1941]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 主节点keepalived恢复观察日志情况 [root@example~]#/etc/init.d/keepalivedstop Stoppingkeepalived:[OK] 主节点日志 Aug1315:22:04exampleKeepalived[45420]:StartingKeepalivedv1.2.13(03/19,2015) Aug1315:22:04exampleKeepalived[45421]:StartingHealthcheckchildprocess,pid=45423 Aug1315:22:04exampleKeepalived[45421]:StartingVRRPchildprocess,pid=45424 Aug1315:22:04exampleKeepalived_vrrp[45424]:NetlinkreflectorreportsIP192.168.189.130added Aug1315:22:04exampleKeepalived_vrrp[45424]:NetlinkreflectorreportsIPfe80::20c:29ff:fe5a:e1a3added Aug1315:22:04exampleKeepalived_vrrp[45424]:RegisteringKernelnetlinkreflector Aug1315:22:04exampleKeepalived_vrrp[45424]:RegisteringKernelnetlinkcommandchannel Aug1315:22:04exampleKeepalived_vrrp[45424]:RegisteringgratuitousARPsharedchannel Aug1315:22:04exampleKeepalived_healthcheckers[45423]:NetlinkreflectorreportsIP192.168.189.130added Aug1315:22:04exampleKeepalived_healthcheckers[45423]:NetlinkreflectorreportsIPfe80::20c:29ff:fe5a:e1a3added Aug1315:22:04exampleKeepalived_healthcheckers[45423]:RegisteringKernelnetlinkreflector Aug1315:22:04exampleKeepalived_healthcheckers[45423]:RegisteringKernelnetlinkcommandchannel Aug1315:22:05exampleKeepalived_vrrp[45424]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:22:05exampleKeepalived_vrrp[45424]:Configurationisusing:63278Bytes Aug1315:22:05exampleKeepalived_vrrp[45424]:UsingLinkWatchkernelnetlinkreflector... Aug1315:22:05exampleKeepalived_vrrp[45424]:VRRPsockpool:[ifindex(2),proto(112),unicast(0),fd(10,11)] Aug1315:22:05exampleKeepalived_healthcheckers[45423]:Openingfile'/etc/keepalived/keepalived.conf'. Aug1315:22:05exampleKeepalived_healthcheckers[45423]:Configurationisusing:14742Bytes Aug1315:22:05exampleKeepalived_healthcheckers[45423]:UsingLinkWatchkernelnetlinkreflector... Aug1315:22:05exampleKeepalived_healthcheckers[45423]:Activatinghealthcheckerforservice[192.168.189.132]:80 Aug1315:22:05exampleKeepalived_healthcheckers[45423]:Activatinghealthcheckerforservice[192.168.189.133]:80 Aug1315:22:05exampleKeepalived_vrrp[45424]:VRRP_Instance(web)TransitiontoMASTERSTATE Aug1315:22:05exampleKeepalived_vrrp[45424]:VRRP_Instance(web)Receivedlowerprioadvert,forcingnewelection Aug1315:22:06exampleKeepalived_vrrp[45424]:VRRP_Instance(web)EnteringMASTERSTATE Aug1315:22:06exampleKeepalived_vrrp[45424]:VRRP_Instance(web)settingprotocolVIPs. Aug1315:22:06exampleKeepalived_vrrp[45424]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 Aug1315:22:06exampleKeepalived_healthcheckers[45423]:NetlinkreflectorreportsIP192.168.189.200added Aug1315:22:07examplentpd[1525]:Listennormallyon7eth0192.168.189.200UDP123 Aug1315:22:11exampleKeepalived_vrrp[45424]:VRRP_Instance(web)SendinggratuitousARPsoneth0for192.168.189.200 备用节点 Aug1315:22:05exampleKeepalived_vrrp[1941]:VRRP_Instance(web)Receivedhigherprioadvert Aug1315:22:05exampleKeepalived_vrrp[1941]:VRRP_Instance(web)EnteringBACKUPSTATE Aug1315:22:05exampleKeepalived_vrrp[1941]:VRRP_Instance(web)removingprotocolVIPs. Aug1315:22:05exampleKeepalived_healthcheckers[1940]:NetlinkreflectorreportsIP192.168.189.200removed Aug1315:22:07examplentpd[1525]:Deletinginterface#7eth0,192.168.189.200#123,interfacestats:received=0,sent=0,dropped=0,active_time=191secs Aug1315:22:54exampledhclient[1239]:DHCPREQUESToneth0to192.168.189.254port67(xid=0x6d287b9) Aug1315:22:54exampledhclient[1239]:DHCPACKfrom192.168.189.254(xid=0x6d287b9) Aug1315:22:56exampledhclient[1239]:boundto192.168.189.131--renewalin680seconds. 可以看到备用节点的vip地址被移除了,一切都符合预期 负载均衡测试,打开浏览器测试访问lvs的vip地址 故障切换测试 故障切换是测试在某个节点出现故障后,Keepalived监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点上执行。 这里将real server 1节点服务停掉,假定这个节点出现故障,然后查看主、备机日志信息,相关日志如下: [root@example ~]# /etc/init.d/httpd stop Stopping httpd: [ OK ] 观察主节点keepalived日志情况 Aug1315:30:05exampleKeepalived_healthcheckers[45423]:TCPconnectionto[192.168.189.132]:80failed!!! Aug1315:30:05exampleKeepalived_healthcheckers[45423]:Removingservice[192.168.189.132]:80fromVS[192.168.189.200]:80 Aug1315:30:05exampleKeepalived_healthcheckers[45423]:RemoteSMTPserver[192.168.200.1]:25connected. Aug1315:30:35exampleKeepalived_healthcheckers[45423]:TimeoutreadingdatatoremoteSMTPserver[192.168.200.1]:25. 观察备用节点keepalived日志情况 Aug1315:30:04exampleKeepalived_healthcheckers[1940]:TCPconnectionto[192.168.189.132]:80failed!!! Aug1315:30:04exampleKeepalived_healthcheckers[1940]:Removingservice[192.168.189.132]:80fromVS[192.168.189.200]:80 Aug1315:30:04exampleKeepalived_healthcheckers[1940]:RemoteSMTPserver[192.168.200.1]:25connected. Aug1315:30:34exampleKeepalived_healthcheckers[1940]:TimeoutreadingdatatoremoteSMTPserver[192.168.200.1]:25. 通过日志可以看出,Keepalived监控模块检测到192.168.189.132这台主机出现故障后,将此节点从集群系统中剔除掉了。 此时访问http://192.168.189.200这个地址,应该只能看到“web02_192.168.189.133”了, 这是因为节点1出现故障,而Keepalived监控模块将节点1从集群系统中剔除了 再次重启web01服务观察主备keepalived日志情况 主节点keepalived日志情况 Aug1315:33:47exampleKeepalived_healthcheckers[45423]:TCPconnectionto[192.168.189.132]:80success. Aug1315:33:47exampleKeepalived_healthcheckers[45423]:Addingservice[192.168.189.132]:80toVS[192.168.189.200]:80 Aug1315:33:47exampleKeepalived_healthcheckers[45423]:RemoteSMTPserver[192.168.200.1]:25connected. Aug1315:34:17exampleKeepalived_healthcheckers[45423]:TimeoutreadingdatatoremoteSMTPserver[192.168.200.1]:25. 备用节点keepalived日志情况 Aug1315:33:46exampleKeepalived_healthcheckers[1940]:TCPconnectionto[192.168.189.132]:80success. Aug1315:33:46exampleKeepalived_healthcheckers[1940]:Addingservice[192.168.189.132]:80toVS[192.168.189.200]:80 Aug1315:33:46exampleKeepalived_healthcheckers[1940]:RemoteSMTPserver[192.168.200.1]:25connected. Aug1315:34:16exampledhclient[1239]:DHCPREQUESToneth0to192.168.189.254port67(xid=0x6d287b9) Aug1315:34:16exampledhclient[1239]:DHCPACKfrom192.168.189.254(xid=0x6d287b9) Aug1315:34:16exampleKeepalived_healthcheckers[1940]:TimeoutreadingdatatoremoteSMTPserver[192.168.200.1]:25. Aug1315:34:18exampledhclient[1239]:boundto192.168.189.131--renewalin778seconds. 从日志可知,Keepalived监控模块检测到192.168.189.132这台主机恢复正常后,又将此节点加入到集群系统中。 此时再次访问http://192.168.189.200这个地址,然后不断刷新此页面,应该又能分别看到“web01_192.168.189.132”和 “web01_192.168.189.133”页面了,这说明在web1节点恢复正常后,Keepalived监控模块将此节点加入到集群系统中。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册