首页 文章 精选 留言 我的

精选列表

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

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回应的网络接口来进行发送.

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

ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程

环境:OS X 10.10.5 + JDK 1.8 步骤: 一、下载ELK的三大组件 Elasticsearch下载地址: https://www.elastic.co/downloads/elasticsearch (目前最新版本:2.1.1) Logstash下载地址:https://www.elastic.co/downloads/logstash(目前最新版本:2.1.1) Kibana下载地址:https://www.elastic.co/downloads/kibana(目前最新版本:4.3.1) 下载后将其解压到某个目录即可,本文中的解压目录为: ~/app/elasticsearch-2.1.1 ~/app/logstash-2.1.1 ~/app/kibana-4.3.1-darwin-x64 注:这3个组件相互之间的关系及作用如下: Logstash(收集服务器上的日志文件) --》然后保存到 ElasticSearch(搜索引擎) --》Kibana提供友好的web界面(从ElasticSearch读取数据进行展示) 二、启动elasticsearch 2.1 进入elasticsearch目录\bin ./elasticsearch 顺利的话,启动成功后,在浏览器里输入http://localhost:9200/ 应该能看到类似下面的输出: 1 { 2 "name" : "Atalanta", 3 "cluster_name" : "elasticsearch", 4 "version" : { 5 "number" : "2.1.1", 6 "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71", 7 "build_timestamp" : "2015-12-15T13:05:55Z", 8 "build_snapshot" : false, 9 "lucene_version" : "5.3.1" 10 }, 11 "tagline" : "You Know, for Search" 12 } 2.2 安装kopf插件 先按Ctrl+C停止elasticsearch,接下来准备安装插件,elasticsearch有大量插件资源,用于增加其功能,bin目录下,输入 ./plugin list 可以查看当前安装的插件列表,我们刚刚全新安装,输出的是一个空列表,继续输入 ./plugin install lmenezes/elasticsearch-kopf 将会联网安装kopf插件,安装完成后,再次用./plugin list确认下: Installed plugins in /Users/yjmyzz/app/elasticsearch-2.1.1/plugins: - .DS_Store - kopf 如果输出上述类似,表明kopf安装成功。 然后重启elasticsearch,浏览器里输入http://localhost:9200/_plugin/kopf,将会看到类似下面的界面,可以很直观的看到elasticsearch的一些运行状况 以上操作都ok后,建议Ctrl+C关掉,改用nohup ./elasticsearch & 将其做为后台进程运行,以免退出。 三、logstash的启动与配置 3.1 新建索引配置文件 ~/app/logstash-2.1.1/bin 下 mkdir conf vi conf/logstash-indexer.conf 内容如下: 1 input { 2 file { 3 path => ["/var/opt/log/a.log","/var/opt/log/b.log"] 4 } 5 } 6 7 output { 8 elasticsearch { hosts => ["localhost:9200"] } 9 stdout { codec => rubydebug } 10 } 上面几个步骤的意思就是创建一个名为logstash-indexer.conf的配置文件,input{file{...}}部分指定的是日志文件的位置(可以多个文件),一般来说就是应用程序log4j输出的日志文件。output部分则是表示将日志文件的内容保存到elasticsearch,这里hosts对应的是一个数组,可以设置多个elasticsearch主机,相当于一份日志文件的内容,可以保存到多个elasticsearch中。 至于第9行的stdout,则表示终端的标准输出,方便部署时验证是否正常运行,验证通过后,可以去掉。 3.2 启动 继续保持在logstash的bin目录下,输入 ./logstash -f conf/logstash-indexer.conf 稍等片刻,如果看到Logstash startup completed,则表示启动成功。然后另开一个终端窗口,随便找个文本编辑工具(比如:vi),向/var/opt/log/a.log里写点东西,比如:hello world之类,然后保存。观察logstash的终端运行窗口,是否有东西输出,如果有以下类似输出: 1 { 2 "message" => "hello world", 3 "@version" => "1", 4 "@timestamp" => "2016-01-08T14:35:16.834Z", 5 "host" => "yangjunmingdeMacBook-Pro.local", 6 "path" => "/var/opt/log/a.log" 7 } 说明logstash工作正常,此时浏览http://localhost:9200/_search?pretty 也应该能看到一堆输出,表明elasticsearch接收到logstash的数据了。 四、kibana的配置及启动 4.1 修改配置文件 ~/app/kibana-4.3.1-darwin-x64/config 下有一个配置文件kibana.yml,大概在12行的位置,改成下面这样: 1 # The Elasticsearch instance to use for all your queries. 2 elasticsearch.url: "http://localhost:9200" 即:指定elasticsearch的访问位置 4.2 启动 ~/app/kibana-4.3.1-darwin-x64/bin 下,输入: ./kibana 注:如果启动不成功,请检查版本是否为4.3.1,kibana必须与elasticsearch的版本匹配,一般说来,都从官网下载最新版即可。 启动完成后,在浏览器里输入http://localhost:5601/ 即可看到kibana界面,首次运行,会提示创建index,直接点击Create按钮即可。 然后,就能看到类似下面的界面了: 参考文章: http://baidu.blog.51cto.com/71938/1676798?utm_source=tuicool&utm_medium=referral https://www.elastic.co/products http://www.cnblogs.com/yjf512/p/4199105.html http://kibana.logstash.es/content/

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

storm实时流式计算框架集群搭建过程

http://blog.csdn.net/comaple/article/details/7896167 这几天在其他同事的帮助下,调研了twitter的开源流式计算框架storm的使用,下面分享一下storm集群的安装配置过程。以作备忘之用。 我的实验机器为:195和196 如果转载请注明出处:comaple的博客 首先:安装依赖包 1, ZeroMQ 2.1.7 2, JZMQ 3, Java 4, Python 5, Unzip 这里只需要安装1,2就可以了。下面是遇到的一些问题: 安装zeroMQ 下载zeroMQ2.1.7 http://www.zeromq.org/area:download 解压:tar –xvf zeromq-2.1.7.tar.gz Cd 到bin目录: ./autogen.sh 如果没有找到configure文件时要运行这一步。 ./configure configure: error: cannot link with -luuid, install uuid-dev. 运行时如果报这个错解决方案如下: yum install uuid-dev 提示找不到该依赖包 yum install uuid* 直接用* ok ./configure 再次运行configure还是报错 configure: error: cannot link with -luuid, install uuid-dev.上网搜索可能是还缺另外一个包 yum install e2fsprogs* ok make install 安装JZMQ a)下载jzmq.zip https://github.com/nathanmarz/jzmq b)Cd到bin目录./autogen.sh c)./configure d) make install 安装storm集群 配置说明:10.10.249.195:nimbus 10.10.249.196: supervisor Storm集群需要zookeeper集群的支持所以应该先安装zookeeper集群。再配置storm集群,下面是storm集群的配置: 10.10.249.195上的配置: a)下载storm-0.7.4.zip https://github.com/nathanmarz/storm/downloads b)解压后修改conf/storm.yaml文件, storm.zookeeper.servers: - "10.10.249.195" - "10.10.249.196" c)# nimbus.host:"nimbus" 这个不用改,nimbus负责提交任务,分配任务。相当于namenode节点。 配置好以后到bin目录下: ./storm nimbus 启动storm主节点服务 ./storm ui 启动storm监控页面:监控地址:http://hostname:8080 10.10.249.196上的配置: 1,修改storm.yaml 文件: storm.zookeeper.servers: -"10.10.249.195" -"10.10.249.196" nimbus.host: "10.10.249.195" #这个是storm将要启动几个本地work,一个端口对应一个work。 supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703 2,启动supervisor ./storm supervisor 提交任务: 10.10.249.195上面: ./storm jar stormWork.jar SearchKeywordTopNTopology"word-count" 这里有用到的jar文件大家可以试一试:stormWork.jar 监控storm运行情况:

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

HarmonyOS NEXT自由流转能力解析(基础

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-kaiyuanzhongguo&ha_sourceId=89000441 在HarmonyOS NEXT的生态体系中,自由流转能力是实现多设备协同的关键,它打破了设备之间的壁垒,让用户能够在不同设备间畅享无缝的操作体验。今天,咱们就来深入剖析一下这项强大的能力。 自由流转的核心概念(跨端迁移 vs 多端协同) 自由流转是HarmonyOS NEXT中跨多设备分布式操作的统称,其中跨端迁移和多端协同是两种重要的实现形式。 跨端迁移就像是一场应用的“设备之旅”。在用户使用设备的过程中,一旦使用情境发生变化,比如从室外回到室内,发现原本使用的手机在处理某些任务时不太方便,而身边的平板更合适,此时就可以借助跨端迁移,将正在手机上运行的应用“搬”到平板上继续使用。从开发角度来讲,就是A设备上运行的UIAbility迁移到B设备上,A设备上的UIAbility可根据实际需求选择是否退出。例如,在手机上观看视频时,回到家将视频迁移到智慧屏上继续播放,视频的播放进度、播放设置等都能原封不动地延续,给用户带来无缝的观看体验。 多端协同则更像是设备之间的“团队协作”。多个设备作为一个整体,共同为用户提供比单设备更高效、更沉浸的服务。多个设备上的不同UIAbility或ServiceExtensionAbility可以同时运行,也能交替运行来完成完整的业务。比如,在两台设备上同时打开备忘录的同一篇笔记进行协同编辑,设备A可以插入本地图库中的图片,设备B负责文字内容的编辑,不同设备各司其职,大大提升了用户的编辑效率和体验。 典型应用场景分析 1、 邮件跨设备编辑:这是跨端迁移的典型应用。当用户在手机上撰写邮件时,中途切换到电脑上继续编辑。HarmonyOS NEXT的自由流转能力会保存邮件的编辑状态,包括已输入的内容、插入的附件以及设置的格式等。在电脑上打开邮件应用时,这些信息会被完整恢复,就好像用户一直在电脑上编辑一样。开发时,通过应用接续技术,在源端UIAbility的onContinue()接口中保存邮件数据,在目的端的onCreate()或onNewWant()接口中恢复数据,实现邮件编辑的无缝切换。 2、 多设备协同健身:在这个场景中,多端协同发挥得淋漓尽致。用户佩戴智能手表进行运动,手表实时采集心率、步数等数据。同时,手机或平板上的健身应用接收这些数据,并根据数据提供个性化的运动建议、展示运动课程视频等。手机还能作为控制中心,方便用户调整健身计划。开发过程中,需要实现不同设备间的数据实时传输和交互,确保各个设备上的应用能够协同工作,为用户提供全面的健身体验。 3、 多屏游戏:多屏游戏充分展现了自由流转的魅力。以一款冒险游戏为例,玩家在手机上进行游戏的前期探索和操作。当连接到大屏电视后,游戏画面自动切换到电视上,借助电视的大屏幕和高画质,玩家能获得更震撼的视觉体验。此时,手机可以作为游戏手柄,利用其传感器实现精准操控。这一过程中,跨端迁移实现了游戏画面和操作的无缝切换,多端协同让手机和电视共同为玩家打造出沉浸式的游戏体验。开发者需要解决设备间的图形同步、操作指令传输以及性能优化等问题,确保游戏在不同设备上都能流畅运行。 实战案例:如何让一个应用在多个设备上自由切换 下面通过一个简单的文本编辑器应用示例,展示如何实现应用在多个设备上的自由切换。 配置应用接续能力 在module.json5文件的abilities中,将continuable标签配置为true,表示该UIAbility可被迁移: 在源端保存数据 在源端UIAbility中实现onContinue()接口,保存文本编辑器中的内容: 在目的端恢复数据 在目的端UIAbility中实现onCreate()或onNewWant()接口,恢复文本编辑器的内容: 通过以上步骤,就可以实现一个简单的文本编辑器应用在多个设备上的自由切换,用户在不同设备上打开应用时,都能继续之前的编辑工作。当然,在实际应用开发中,还需要考虑更多的细节,如数据的一致性、设备兼容性等问题,但这个示例为大家提供了一个基本的实现思路。 HarmonyOS NEXT的自由流转能力为开发者提供了广阔的创新空间,通过合理运用跨端迁移和多端协同技术,我们可以打造出更加智能、高效的多设备应用,为用户带来前所未有的便捷体验。希望大家在实际开发中能够充分利用这一能力,创造出更多优秀的应用。(转载自51CTO,作者:SameX)

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

GaussDB SQL基础语法示例-循环语句

一、前言 SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。 本系列将以《云数据库GaussDB—SQL参考》为主线进行介绍。 二、GaussDB数据库总的循环语句 在GaussDB数据库中,循环语句是一种常用的控制流语句,用于在数据库查询中执行重复操作。通过使用循环语句,我们可以灵活地处理数据集中的每一行,并根据需要对数据进行转换、过滤或计算。循环语句在处理大规模数据、进行复杂计算和操作时具有显著的优势。 在GaussDB数据库中,循环语句主要包括LOOP、WHILE LOOP、FOR LOOP和FORALL等语句。这些语句用于在数据库查询中执行重复操作,并可以根据需要选择合适的循环类型来处理数据集中的每一行。 本文将介绍GaussDB数据库中的循环语句及其应用。 三、GaussDB中常用循环语句(语法 + 示例) 1、LOOP循环语句 LOOP循环是一个无限循环,直到显式地使用EXIT语句退出循环。在循环体内部,可以根据条件执行重复的查询操作。例如,可以使用IF语句在每次循环时检查条件,并执行相应的操作。 语法: LOOP statements END LOOP; Tip: 该循环必须要结合EXIT使用,否则将陷入死循环。 示例: ---插入多条数据,i是字段id起始值,j终止值。 CREATE OR REPLACE PROCEDURE proc_loop(i in integer,j in integer) AS BEGIN LOOP -- 执行重复的插数操作 INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp) ; --id值递增 +1 i := i+1; -- 退出循环的条件 IF i=j THEN EXIT; END IF; END LOOP; END; / CALL proc_loop(1,5); SELECT * FROM test_1; 2、WHILE … LOOP 循环语句 WHILE … LOOP循环是一个有条件的循环,只要满足指定的条件,循环就会继续执行。在循环体内部,可以执行重复的查询操作。当条件不再满足时,循环会终止。 语法: WHILE condition LOOP statements END LOOP; 示例: ---插入多条数据,i是字段id起始值,j终止值。 CREATE OR REPLACE PROCEDURE proc_loop_1(i in integer,j in integer) AS BEGIN WHILE i < j LOOP -- 执行重复的查询操作 INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp); --id值递增 +1 i := i+1; END LOOP; END; / CALL proc_loop_1(5,10); SELECT * FROM test_1; 3、FOR … LOOP循环语句(integer变量) FOR LOOP循环是按照指定的次数执行循环。在循环体内部,可以执行重复的查询操作。 语法: FOR name IN [REVERSE] lower_bound ..upper_bound [BY step] LOOP staements END LOOP; Tip: 变量name会自动定义为integer类型并且只在此循环里存在。变量name介于lower_bound和upper_bound之间。 当使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 示例: ---插入多条数据,i是字段id起始值,j终止值。 CREATE OR REPLACE PROCEDURE proc_loop_2(i in integer,j in integer) AS BEGIN FOR i IN i..j LOOP -- 执行重复的查询操作 INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp); END LOOP; END; / CALL proc_loop_2(10,15); SELECT * FROM test_1; 4、FORALL循环语句(批量查询) FORALL循环是一种并行化的循环,用于在数据集上执行并行操作。它适用于处理大规模数据集,可以利用多核处理器并行执行查询操作。 语法: FORALL index IN lower_bound .. upper_bound DML; Tip:变量index会自动定义为integer类型并且只在此循环里存在。index的取值介于low_bound和upper_bound之间。 示例: ---插入多条数据, CREATE OR REPLACE PROCEDURE proc_loop_3(i in integer,j in integer) AS BEGIN FORALL i IN i..j -- 执行重复的查询操作 INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp); END; / CALL proc_loop_3(16,20); SELECT * FROM test_1; 四、小结 本文介绍了GaussDB数据库中的循环语句及其使用方法。循环语句提供了灵活的数据处理能力。通过掌握循环语句的用法,我们可以更好地利用GaussDB数据库的功能,提高数据处理效率和查询性能。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

用户登录
用户注册