首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

在Windows平台上搭建Docker开发环境

本文介绍的是如何在Windows系统上安装Docker运行环境。Docker官方提供了Windows平台上的安装包,这个安装包会打开Windows平台上的HyperV虚拟机。所以如果不喜欢使用HyperV虚拟机或者有需要使用其他虚拟机软件的话,可以自己在Linux虚拟机中安装Docker。 安装Docker 安装Docker For Windows 首先打开Docker下载页面,然后下载Docker For Windows安装包。注意这个安装包是针对最新的Windows 10系统的,如果使用Windows 8之类的,请下载旧版本的Docker。 安装之后可能会弹出这么一个对话框,提示我们说HyperV未开启,询问我们是否要开启HyperV,我们选择是,然后电脑会重启。之后一切就准备就绪了。 未开启HyperV 电脑重启之后,我们应该可以在任务栏上找到一个Docker图标,右键点击选择version会弹出这样的对话框。如此一来,Docker就安装完毕了。 Docker版本 安装Kitematic 右键点击Docker图标,会看到有一项名字叫 Kitematic,这是一个Docker可视化工具,推荐大家安装。我们点击这个菜单项,就会弹出一个对话框提示我们下载Kitematic,然后放到C:\Program Files\Dockder\Kitematic中。 然后打开Kitematic,我们可以看到如下的样子。在这里可以非常方便的下载、开启、关闭Docker镜像。如果你注册了Docker账号的话,还可以上传自己的Docker镜像,让大家一起使用。 Kitematic 使用Docker 设置阿里云加速器 在下载Docker之前,我们需要先配置一下加速器。由于Docker的服务器在国外,所以下载镜像的速度不太理想。国内因此有了很多加速服务,其中最好用的还是阿里云的。我们打开Docker 镜像服务,登录账号之后,获取自己创加速器地址。然后使用docker-machine创建一个新的虚拟机并使用加速器来加速。 docker-machine create --engine-registry-mirror=https://XXX.mirror.aliyuncs.com -d hyperv default 当然如果你有自己的代理的话,也可以直接在Docker设置中设置代理。 安装镜像 我们在Kitematic中搜索hello-world,然后安装。当然如果使用命令行的话也可以,输入docker pull hello-world即可。 docker hello-world 安装完成之后运行docker run hello-world即可看到如下的输出。 hello-world 进入镜像执行环境 在Kitematic中点击一个正在运行的镜像,然后点击右边的EXEC,就可以打开对应的执行环境了。 redis 默认情况下的shell是sh,不太好用。我们可以点击Kitematic下面的docker-cli右边的齿轮图标,然后将shell设置为bash。 docker-cli设置 配置镜像 在镜像右边还有一个车Settings标签,点进来之后可以对镜像进行各种配置,如设置端口号、设置数据分区等等。 配置镜像 利用Docker,我们可以做很多事情。由于很多软件例如Redis之类的,主要设计为在Linux下工作,虽然有Windows下的版本,但是仍然有很多不足之处。利用Docker,我们可以在Linux环境下运行这些程序,又可以在Windows下开发,简直两全其美!

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

[Docker系列·12] 搭建Kafka服务器

1 Docker-Ubuntu-Kafka 工作目录:/home/erichan/docker-room/ubuntu-kafka 1.1 制作镜像 erichan@ubuntu14_04_1-pd:~/docker-room/ubuntu-zookeeper$ nano Dockerfile # Version: 0.0.1 FROM feuyeux/ubuntu-java7 MAINTAINER Eric Han "feuyeux@gmail.com" RUN apt-get update && apt-get install -y wget unzip git RUN wget -q http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/kafka_2.10-0.8.1.1.tgz RUN tar -xzf kafka_2.10-0.8.1.1.tgz -C /opt ENV KAFKA_HOME /opt/kafka_2.10-0.8.1.1 ADD start-kafka.sh /usr/bin/start-kafka.sh RUN chmod 777 /usr/bin/start-kafka.sh CMD start-kafka.sh start-kafka.sh sed -r -i "s/(zookeeper.connect)=(.*)/\1=$ZK_PORT_2181_TCP_ADDR/g" $KAFKA_HOME/config/server.properties sed -r -i "s/(broker.id)=(.*)/\1=$BROKER_ID/g" $KAFKA_HOME/config/server.properties sed -r -i "s/#(advertised.host.name)=(.*)/\1=$HOST_IP/g" $KAFKA_HOME/config/server.properties sed -r -i "s/^(port)=(.*)/\1=$PORT/g" $KAFKA_HOME/config/server.properties if [ "$KAFKA_HEAP_OPTS" != "" ]; then sed -r -i "s/^(export KAFKA_HEAP_OPTS)=\"(.*)\"/\1=\"$KAFKA_HEAP_OPTS\"/g" $KAFKA_HOME/bin/kafka-server-start.sh fi $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties start-broker.sh #!/bin/bash ZOOKEEPER=`sudo docker ps -a | awk '{print $NF}' | grep "zk346$"` ZOOKEEPER_RUNNING=$? if [ $ZOOKEEPER_RUNNING -eq 0 ] ; then echo "ZooKeeper is already running" else echo "Starting Zookeeper" sudo docker run -p 49181:2181 -h zookeeper --name zk346 -d feuyeux/zookeeper:3.4.6 fi ID=$1 PORT=$2 HOST_IP=$3 echo "BROCKER-ID=$ID KAFKA=$HOST_IP:$PORT" sudo docker run -p $PORT:$PORT --name kafka081_$4 --link zk346:zk -e BROKER_ID=$ID -e HOST_IP=$HOST_IP -e PORT=$PORT -d feuyeux/kafka:0.8.1 erichan@ubuntu14_04_1-pd:~/docker-room/ubuntu-kafka$ chmod +x start-broker.sh 1.2 创建镜像 erichan@ubuntu14_04_1-pd:~/docker-room/ubuntu-kafka$ d build -t feuyeux/kafka:0.8.1 . 1.3 测试镜像 d kill $(d ps -q) && d rm $(d ps -a -q) cd ~/docker-room/ubuntu-kafka ./start-broker.sh 101 9093 10.16.41.135 1 ./start-broker.sh 102 9094 10.16.41.135 2 脚本自动执行:d run -p 49181:2181 -h zookeeper --name zk346 -d feuyeux/zookeeper:3.4.6 d ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78a84862a311 feuyeux/kafka:0.8.1 "/bin/sh -c start-ka 3 seconds ago Up 3 seconds 22/tcp, 0.0.0.0:9094->9094/tcp kafka081_2 951ff2d3296a feuyeux/kafka:0.8.1 "/bin/sh -c start-ka 12 seconds ago Up 11 seconds 22/tcp, 0.0.0.0:9093->9093/tcp kafka081_1 efbd8d713866 feuyeux/zookeeper:3.4.6 "/opt/zookeeper-3.4. 12 seconds ago Up 12 seconds 2888/tcp, 3888/tcp, 22/tcp, 0.0.0.0:49181->2181/tcp kafka081_1/zk,kafka081_2/zk,zk346 erichan@ubuntu14_04_1-pd:~/docker-room/ubuntu-kafka$ 参考 https://github.com/wurstmeister/kafka-docker https://github.com/apache/kafka/tree/0.8.1/examples/src/main/java/kafka/examples

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

opencv 人脸识别 环境搭建---java版-----1

代码下载地址http://download.csdn.net/detail/u013378306/9656546 1.首先下载OpenCV2.4.6,下载的时候,选择windows版的。然后安装 2.其实安装的过程就是解压的过程,并没有什么安装向导之类的,安装完成后,我们最关心的是这个目录:opencv\build\java 如下图所示 注意:opencv-246.jar是需要在opencv的java类库,但是,真正的实现是opencv_java246.dll(X86和X64之分,关键看你的计算机是多少位的) 3.建立一个Java项目 4.新建一个Java类,代码如下: packagecom.njupt.zhb.test; importorg.opencv.core.CvType; importorg.opencv.core.Mat; publicclassMain{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub System.loadLibrary("opencv_java246"); Matm=Mat.eye(3,3,CvType.CV_8UC1); System.out.println("m="+m.dump()); } } 5.引入所需要的jar包,即:opencv-246.jar 6.设置项目的native库,即opencv_java246.dll所在的路径 7.运行结果为:

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

iOS - XMPP Openfire 服务器的搭建

前言 提前下载好相关软件,且安装目录最好安装在全英文路径下。如果路径有中文名,那么可能会出现一些莫名其妙的问题。 提前准备好的软件: jdk-8u91-macosx-x64.dmg mysql-5.7.17-macos10.12-x86_64.dmg mysql-workbench-community-6.3.9-osx-x86_64.dmg openfire_4_1_1.dmg Openfire 官网 MySQL 官网 JDK 官网 在安装配置 Openfire 或其他 xmpp 服务器前,需要先安装 MySQL 数据库。 MySQL 安装具体讲解见 iOS - MySQL 的安装配置。 1、下载安装 Openfire 在 Openfire 官网下载最新的 Mac 版本 Openfire 安装包。 下载完后双击安装包,点击 pkg 文件,在安装引导下进行傻瓜式安装。安装完成后,进入系统偏好设置,点击 Openfire 图标。 进入 Openfire 偏好设置界面。点击 Start Openfire,让 OpenFire 服务开始启动(默认是启动的),启动完毕后,我们就可以点击 Administration 下的按钮,进入服务器后台,然后会要求输入管理员账号密码。 Openfire 服务启动不了问题解决 安装好之后,第一次是可以启动 openfire 服务器的,但是电脑重启后,就再也不能启动服务器了,每次一点击 “Start Openfire”,然后加载一下,状态还是 “Start Openfire” 没变化,有时甚至还会跳出错误提示框,提示 “Could not start the Openfire server”。 解决方案如下: 1)首先需要确认是否已经安装了 Java 的运行环境,以及 JAVA jdk 是否与当前 OS 系统版本,Openfire 版本成对应,如果不是,就请先安装相匹配对应的软件。 在终端中输入 java -version,就可以查看电脑有没有安装 JAVA 运行环境。 2)如果软件,环境对应的,最终的解决办法是 打开终端,输入以下命令: // 获取 Openfire 目录的访问权限 sudo chmod -R 777 /usr/local/openfire/bin // 以超级管理员的权限运行脚本 sudo su cd /usr/local/openfire/bin // 设置 Java 的环境变量 export JAVA_HOME=`/usr/libexec/java_home` // 输出检验环境变量的值 echo $JAVA_HOME 输入上面的命令后回车,就会出现后面的这些语句 /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home 接着在终端,输入以下命令: cd /usr/local/openfire/bin // 运行 Openfire shell 脚本 ./openfire.sh 输入上面的命令后回车,就会出现后面的这些语句 Openfire 4.1.2 [2016-2-21 2:47:51] 管理平台开始监听: http://jhq0228-macbookair.local:9090 https://jhq0228-macbookair.local:9091 Successfully loaded plugin 'admin'. 执行完这些命令之后,服务器就可以启动了,每次开机后,都启动不了的话,都试下这个方法。 2、配置 Openfire 在 Openfire 偏好设置界面中,点击 Open Admin Console,进入 web 配置页面,开始配置 Openfire 服务器。 2.1 选择语言 简体中文 2.2 服务器设置 域:如果只是本地机器上登录,可以设置为本地的域 127.0.0.1。需要远端登录的话,设置为相应的 IP 地址或域名即可。此处设置为 Mac 的机器名。 Server Host Name (FQDN):服务器名,不能为 IP 地址。 2.3 数据库设置 1、选择数据库 如果要设置外部数据库(推荐,比如:MySQL),选择标准数据库连接。 前期 MySQL 数据库准备工作 MySQL 安装具体讲解见 iOS - MySQL 的安装配置。 1)设置 /usr/local/openfire 文件夹的访问权限为可读写 方法1:在 finder 中前往文件夹 /usr/local/,右键 openfire 文件夹,显示简介,点击如图右下角中的锁图标解锁,并设置权限为可以读写。 方法2:打开终端,输入如下命令 $ sudo chmod 777 /usr/local/openfire 其中 777 表示授权可读写权限,000 表示无访问权限。 2)在终端中登陆 MySQL,输入以下命令,然后输入数据库的 root 密码登录 $ mysql -u root -p 回车后,终端输出 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 946 Server version: 5.7.17 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 3)在终端输入以下命令,创建数据库 openfire create database openfire; 回车后,终端输出 Query OK, 1 row affected (0.03 sec) 4)在终端输入以下命令,导入 openfire 资源文件夹 resources/database 下的数据表 use openfire; source /usr/local/openfire/resources/database/openfire_mysql.sql 在终端出现一排导入过程 5)在终端输入以下命令,刷新权限 flush privileges; 回车后,终端输出 Query OK, 0 rows affected (0.07 sec) 6)在终端输入以下命令,退出 MySQL exit 2、设置数据库连接 设置标准数据库连接 1)数据库驱动选项 选择 MySQL,前提是已安装 MySQL。 2)JDBC 驱动程序类 默认不变,默认为: com.mysql.jdbc.Driver 3)数据库 URL 形式如下: jdbc:mysql://你的主机名:端口号/数据库名称 jdbc:mysql://[host-name]:3306/[database-name]?rewriteBatchedStatements=true [host-name] :主机名 [database-name]:数据库名称 这里设置为: jdbc:mysql://localhost:3306/openfire 其中主机名 [host-name] 改为 localhost。 其中数据库名称 [database-name] 改为 openfire。 解决数据库字符编码问题,可以在后面加 ?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8 最终的 url 形式是 jdbc:mysql://localhost:3306/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8 注意:前提是已存在一个名为 openfire 的数据库,否则会报如下错误,连接配置不成功。openfire 数据库的创建具体见前面所讲的 “前期 MySQL 数据库准备工作”。 The Openfire database schema does not appear to be installed. Follow the installation guide to fix this error. 4)用户名和密码 这里的用户名密码,是访问 MySQL 数据库时使用的帐号:root,和安装 MySQL 设置的 root 密码。 2.4 特性设置 如果不打算使用 LDAP,则保持默认设置即可。 特性设置时出错问题解决 解决方法 在 OpenFire 偏好设置中重启 OpenFire,然后重新进入 OpenFire web 配置页面,重新开始配置 Openfire 服务器即可。 2.5 管理员账户设置 可以随便填写一个管理员邮箱,输入要设置的密码即可。管理员账号默认为 "admin",如果不设置密码,则默认密码为 "admin"。 自定义管理员账户名方法 在终端输入以下命令,输入数据库的 root 密码,登陆具体的数据库(openfire) mysql -u root -p openfire 删除表 “ofUser” 中的 admin 帐户 delete from ofUser where username = 'admin'; 创建自定义管理员(用户名:qianchia,密码:123456) insert into ofUser (username, plainPassword, encryptedPassword, name, email, creationDate, modificationDate) values('qianchia','123456','123456','Administrator','qianchia@icloud.com','0','0'); 查看用户 select * from ofUser; 如果可以往数据库里插入用户但是在用户摘要却没有数据,这是因为 openfire 的数据库驱动包太旧了,而安装的数据库太新了,把 openfire 里的驱动包换成新的就行了,路径:/usr/local/openfire/lib。 2.6 登陆管理控制台 完成安装后可以输入用户名和密码登陆管理控制台 默认的管理员帐号是 “admin”,默认管理员密码 “admin”,如果上面设置了新密码,则管理员密码是新密码。如果重设了用户名,必须重启 openfire 服务器。 无法登录管理控制平台问题解决 安装 Openfire 后 admin 无法登录管理控制平台。登录时提示:Login failed:make sure your username and password are correct and that you’re an admin or moderator。 解决方案如下: 1)使用 MySQL 查看工具进入数据库,进入表 “ofuser”,将该表清空,然后执行该 SQL INSERT INTO ofUser (username, plainPassword, name, email, creationDate, modificationDate) VALUES ('admin', 'admin', 'Administrator', 'admin@example.com', '0', '0'); 2)关闭 Openfire 服务,就是从其控制台 stop 然后再 start,再用用户名:admin,密码:admin 登录即可。 每次重启 Mac 电脑都需要重新配置 Openfire 问题解决 解决方法: 打开 /usr/local/openfire/conf/ 文件夹。 将 openfire.xml 和 security.xml 两个文件的权限设置为读与写。 重新完成 Openfire 配置。 3、卸载 Openfire 方法 1、卸载之前首先要停止 Openfire 服务。 系统偏好中点击 Openfire 图标,如下图 在 Openfire 偏好设置界面中,点击 Stop Openfire。 2、删除 Openfire 文件。 在终端里,输入以下三条命令执行即可。 sudo rm -rf /Library/PreferencePanes/Openfire.prefPane 以上执行后需要输入管理员密码。 sudo rm -rf /usr/local/openfire sudo rm /Library/LaunchDaemons/org.jivesoftware.openfire.plist 4、测试服务器 4.1 添加测试账户 服务器配置完成之后,我们可以创建几个用户,然后客户端可以使用这些用户信息登录,互相传输消息。 4.2 XMPP 客户端设置与使用 有许多通信聊天客户端可以支持 XMPP 协议,比如,Mac 电脑就自带了一个 “信息” app,“信息” app 就支持 jabber 通信协议(XMPP 的别名)。 打开 Mac 的 “信息” app,点击菜单 信息 -> 添加账户,选择其他 “信息” 账户... 选择 jabber 账户类型,填写相关信息 账户类型:Jabber 用户名:上边添加的测试账户名,格式必须为:名称@openfire服务器名称 密码:用户名对应的密码 服务器:openfire 服务器地址,可以使用自动查找服务器和端口 端口:openfire 服务器客户端端口 然后,提示验证证书,选择继续。 登录成功。 登录成功后在 openfire 服务器端可以看到用户的登录状态。

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

CentOS下LVS DR模式详细搭建过程

1、LVS环境组网 由于是使用的VM环境,自己PC当作客户机(即公网地址),调度器与服务器都是VM中虚拟机,所以客户和所有服务器之间都是物理直接相连网络,逻辑拓扑图如下: 2、ipvsadm安装前准备 外部IP地址 内部IP地址 角色 10.211.55.16/24 192.168.1.3/24 LVS调度器(虚拟机) 10.211.55.15/24 192.168.1.4/24 RS1(虚拟机) 10.211.55.14/24 192.168.1.5/24 RS2(虚拟机) 10.211.55.19/24 无 客户机(自己电脑) 注:实际应用中RS1 RS2没有外部地址,当前环境中,没有物理双网卡环境,都采用一个网卡配置多个IP地址。 例: [root@LVS1~]#cp/etc/sysconfig/network-scripts/ifcfg-eth0/etc/sysconfig/network-scripts/ifcfg-eth0:0 [root@LVS1~]#vi/etc/sysconfig/network-scripts/ifcfg-eth0:0#修改后保存退出 DEVICE=eth0:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.3 NETMASK=255.255.255.0 [root@LVS1~]#/etc/init.d/networkrestart 3、httpd与ipvsadm下载 1)在各服务器上关闭防火墙和修改主机名: [root@LVS1~]#serviceiptablesstop [root@LVS1~]#hostnameLVS1 [root@RS1~]#serviceiptablesstop [root@RS1~]#hostnameRS1 [root@RS2~]#serviceiptablesstop [root@RS2~]#hostnameRS2 2)在RS1 RS2上安装httpd服务 [root@RS2~]#yuminstallhttpd&ndash;y [root@RS2~]#/etc/init.d/httpdstart [root@RS2~#ps-ef|grephttpd [root@RS1~]#yuminstallhttpd&ndash;y [root@RS1~]#/etc/init.d/httpdstart [root@RS1~#ps-ef|grephttpd<==查看httpd服务是否起来 [root@RS1~]#cat/etc/httpd/conf/httpd.conf|grepDocumentRoot<==查找系统站点目录路径 #DocumentRoot:Thedirectoryoutofwhichyouwillserveyour DocumentRoot"/var/www/html" #ThisshouldbechangedtowhateveryousetDocumentRootto. #DocumentRoot/www/docs/dummy-host.example.com [root@RS1~]#echo"RS1">/var/www/html/index.html [root@RS2src]#echo"RS2">/var/www/html/index.html Httpd服务测试: 3)下载ipvsadm wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz ln 我所使用的源包下载目录/usr/local/src 我的LVS环境: [root@LVS1~]#yum-yinstallkernel-develgccc++ [root@RS1src]#cat/etc/redhat-release CentOSrelease5.8(Final) [root@RS1src]#uname-rm 2.6.18-308.el5x86_64 ipvsadm-1.26对内核有要求,要求内核版本在2.6.28及以后的版本,如果符合了系统环境,还要安装依赖包yum install libnlpopt-y。 我的内核版本不满足,使用ipvsadm-1.24。 [root@LVS1src]#tar-zxfipvsadm-1.24.tar.gz [root@LVS1src]#ln-s/usr/src/kernels/2.6.18-348.12.1.el5-x86_64/usr/src/linux<==编译有使用的路径为/usr/src/linux,可在Makefile中查看,如果不做链接,会编译失败 [root@LVS1src]#ll/usr/src/ total16 drwxr-xr-x2rootroot4096May112011debug drwxr-xr-x3rootroot4096Aug503:53kernels lrwxrwxrwx1rootroot43Aug503:56linux->/usr/src/kernels/2.6.18-348.12.1.el5-x86_64<==要使用ll/usr/src/查看,如果软链接一闪一闪的,代表链接失败 [root@LVS1src]#cdipvsadm-1.24 [root@LVS1ipvsadm-1.24]#make&&makeinstall<==如果编译失败,请按上面步骤一步一步排错。 [root@LVS1ipvsadm-1.24]#lsmod|grepip_vs<==查看内核模块是否有ipvsadm [root@LVS1ipvsadm-1.24]#ipvsadm IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn 还有一种加载ipvsadm方法,用modprobe ip_vs [root@LVS1 ipvsadm-1.24]# lsmod |grep ip_vs <==查看内核模块,有代表ipvsadm加载进内核当中,此时LVS安装完毕ip_vs 122113 0 4、LVS负载均衡配置 1)配置VIP和DIP IP配置参考步骤2安装准备 [root@LVS1~]#ifconfigeth010.211.55.16netmask255.255.255.0#VIP [root@LVS1~]#ifconfigeth0:1192.168.1.3netmask255.255.255.0#DIP 2)添加真实服务器 [root@LVS1~]#ipvsadm&ndash;C<==手工清空原来表内容 [root@LVS1~]#ipvsadm--set30560<==设置连接超时值 [root@LVS1~]#ipvsadm-A-t10.211.55.16:80-swrr-p20<==-A添加地址,-t指定VIPTCP端口,-s指定调度算法–p会话保持时间 [root@LVS1~]#ipvsadm-L-n<==查看表内容,添加了一组VIP地址和端口 IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn TCP10.211.55.16:80wrrpersistent20 [root@LVS1~]#ipvsadm-a-t10.211.55.16:80-r192.168.1.4:80-g-w1<==-a指定真实服务器,-tlvs上VIP,-r真实服务器ip及端口,-w权重值,-g先择DR模式(-m为NAT模式) [root@LVS1~]#ipvsadm-a-t10.211.55.16:80-r192.168.1.5:80-g-w1 [root@LVS1~]#ipvsadm-L-n<==查看表内容,添加了两台负载转发的真实服务器 IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn TCP10.211.55.16:80wrrpersistent20 ->192.168.1.4:80Route100 ->192.168.1.5:80Route100 如果添加服务器地址写错了,可用如下命令删除,即大A添加改为大D删除,小a添加改为小d删除 ipvsadm&ndash;D&ndash;t10.211.55.16:80&ndash;swrr ipvsadm&ndash;d&ndash;t10.211.55.16:80&ndash;r192.168.1.4:80 5、真实WEB服务器配置及arp抑制 [root@RS1~]#ifconfigeth0|grep"inetaddr"<==此地址用来自己电脑用CRT软件登陆设备,同时也用来发送arp请求客户机MAC(因为是直接返回页面给客户机,而当前网络是同一物理网段,必须同网段才正常)。 inetaddr:10.211.55.15Bcast:10.211.55.255Mask:255.255.255.0 [root@RS1~]#ifconfigeth0:0192.168.1.4netmask255.255.255.0<==配置内部IP地址 [root@RS1~]#ifconfiglo10.211.55.16netmask255.255.255.255<==每台真实服务器都需要配置VIP 为什么要绑定VIP呢?因为DR模式原理是LVS调度器修改mac地址为真实服务器地址,报文的目的IP还是VIP没修改,,网卡只会把目的MAC和目的IP都是自己的报文上送CPU,所以真实服务器上必须配置VIP! 为什么使用lo口呢?因为lo口为本地环回口,防止本地局域网IP地址冲突! [root@RS2src]#ifconfieth0|grep"inetaddr"<==此地址用来自己电脑用CRT软件登陆设备,同时也用来发送arp请求客户机MAC(因为是直接返回页面给客户机,而当前网络是同一物理网段,必须同网段才正常)。 inetaddr:10.211.55.14Bcast:10.211.55.255Mask:255.255.255.0 [root@RS2src]#ifconfigeth0:0192.168.1.5netmask255.255.255.0<==配置内部IP地址 [root@RS2src]#ifconfiglo10.211.55.16netmask255.255.255.255 此时配置完成,只是测试时出现一个问题,再次登陆CRT中 10.211.55.16地址时,登陆到RS1上去了,再刷新,登陆到RS2上去了。怎么解决呢? 通过分析,得出,访问10.211.55.16时,会发送arp请求10.211.55.16的mac,而这个网络中有3个10.211.55.16地址,此时,那谁给的arp回应到客户机,访问的就是谁了。如果RS1的arp回应先到,就访问的RS1了 解决方法: 抑制ARP响应 该抑制只在真实服务器上配置 [root@RS1~]#echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@RS1~]#echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@RS1~]#echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@RS1~]#echo"2">/proc/sys/net/ipv4/conf/all/arp_announce [root@RS2src]#echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@RS2src]#echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@RS2src]#echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@RS2src]#echo"2">/proc/sys/net/ipv4/conf/all/arp_announce 1 2都代表什么内容,可在最后附录中查看,也可自己网上搜索 显示的值是RS1,则此时该链接是分配到192.168.1.4上 我们使用的是wrr调度算法,该算法中,谁的权重值高,会优先分配给谁 查看配置,发现权重值一样 [root@LVS1~]#ipvsadm-L-n IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn TCP10.211.55.16:80wrrpersistent20 ->192.168.1.4:80Route100 ->192.168.1.5:80Route100 由于有会话保持功能,接下来修改权重值 [root@LVS1~]#ipvsadm-d-t10.211.55.16:80-r192.168.1.5:80<==删除原来配置 [root@LVS1~]#ipvsadm-a-t10.211.55.16:80-r192.168.1.5:80-g-w2<==重新配置权重值为2 [root@LVS1~]#ipvsadm-L-n IPVirtualServerversion1.2.1(size=4096) ProtLocalAddress:PortSchedulerFlags ->RemoteAddress:PortForwardWeightActiveConnInActConn TCP10.0.0.30:80wrrpersistent20 ->192.168.1.5:80Route200 ->192.168.1.4:80Route100 再次进行测试: 7、附:arp抑制参数 arp响应限制 1)arp_ignore: 定义对目标地址为本地IP的ARP询问不同的应答模式0 0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 4-7 - 保留未使用 8 -不回应所有(本地地址)的arp查询 2)arp_announce: 对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

资源下载

更多资源
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应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册