文档章节

基于amoeba+keepalived+mmm实现mysql读写分离高可用架构

五大三粗
 五大三粗
发布于 2015/04/20 17:33
字数 2624
阅读 56
收藏 0
点赞 0
评论 0
   在上一篇已经通过mysql-mmm实现对mysql数据库的动态监控,这一篇我们将结合amoeba实现对数据库访问的读写分离,通过keepalived来实现amoeba的高可用[keepalived用于监控主机心跳,软件是否宕掉无法监测,我们默认如果出问题就是amoeba的主机崩溃]
一、本次环境拓扑图如下:

amoeba+mmm+keepalived

二、环境描述
   系统:red hat linux 6(2.6.32)
   数据库:mysql 5.1.61(这里直接使用rpm包安装,也不使用最新版本数据库)
   MMM:mysql-mmm  2.2.21
   DB server地址分配:
          192.168.1.100(master)
          192.168.1.101(master)
          192.168.1.102(slave)
          192.168.1.103(slave)
   MMM地址:
          192.168.1.104(monitor)
   虚拟IP地址(vip):
          192.168.1.12(write)
          192.168.1.13(read)
          192.168.1.14(read)
          192.168.1.15(read)
  amoeba1:192.168.1.112
  amoeba1:192.168.1.113
  amoeba vip:192.168.1.17(对外的ip地址)
       本次环境软件下载: http://www.kuaipan.cn/file/id_119710994921422893.htm
       我们这里的配置是基于上一篇的环境,也就是说mysql-mmm和mysql的主从复制都配置好了,下面主要描述amoeba和keepalived
三、配置演示:
      Keepalived简介:Keepalived是Linux下面实现VRRP 备份路由的高可靠性运行件,基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接,从而提高系统的可用性
      1.将需要的包传送到服务器并解压[我这里默认安装包已经上传到服务器家目录]
  1. # 在192.168.1.112/192.168.1.113上分别解压如下几个包  
  2. [root@client112 ~]# tar -xf keepalived-1.2.9.tar.gz  
  3. [root@client112 ~]# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/  
  4. # 在192.168.1.113  
  5. [root@client113 ~]# tar -xf keepalived-1.2.9.tar.gz  
  6. [root@client113 ~]# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/  

2.分别到192.168.1.112/192.168.1.113上配置java环境[这里只演示在112上的操作,113上重复此操作即可]

  1. [root@client112 ~]# cd /usr/local/  
  2. [root@client112 local]# mkdir java  
  3. # 将解压出来的内容移到java目录  
  4. [root@client112 local]# mv jdk1.7.0_15/* java  
  5. # 设置java环境变量  
  6. [root@client112 local]# echo $JAVA_HOME  
  7. [root@client112 local]# vim /etc/profile  
  8. # 在末尾添加  
  9. export JAVA_HOME=/usr/local/java  
  10. export AMOEBA_HOME=/usr/local/amoeba  
  11. export PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin  
  12. # 使变量生效  
  13. [root@centos local]# source /etc/profile  

3.分别到192.168.1.112/192.168.1.113上配置amoeba[这里只演示在112上的操作,113上重复此操作即可]

(1).配置amoeba中的dbServer.xml(后端mysql 服务器连接配置)

  1. # 建立相应amoeba目录  
  2. [root@client112 local]# mkdir /usr/local/amoeba  
  3. # 将压缩包解压到指定目录  
  4. [root@client112 local]# tar -xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba  
  5. [root@client112 local]# cd /usr/local/amoeba/  
  6. [root@client112 local]# cd conf/  
  7. # 配置后端mysql 服务器连接[dbServer.xml]  
  8. [root@client112 conf]# vim dbServers.xml  
  9. .........................(省略)  
  10.         <dbServer name="abstractServer" abstractive="true">  
  11.                 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">  
  12.                         <property name="manager">${defaultManager}</property>  
  13.                         <property name="sendBufferSize">64</property>  
  14.                         <property name="receiveBufferSize">128</property>  
  15. # 设置 mysql 数据库的端口  
  16.                         <!-- mysql port -->  
  17.                         <property name="port">3306</property>  
  18. # 设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,  
  19. # 不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver   
  20.                         <!-- mysql schema -->  
  21.                         <property name="schema">kongzhong</property>  
  22.  # 设置amoeba连接后端数据库服务器的账号和密码,需在后端数据库器上创建该用户,并授权amoeba连接   
  23. # 此处需要特别注意:**** 密码默认是注释掉,需要去掉注释!!!  
  24.                         <!-- mysql user -->  
  25.                         <property name="user">kongzhong</property>  
  26.                         <!--  mysql password -->  
  27.                         <property name="password">kongzhong</property>  
  28.                 </factoryConfig>  
  29.                 <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">  
  30.  # 最大连接数[默认]  
  31.                         <property name="maxActive">500</property>  
  32.  # 最大空闲连接数[默认]   
  33.                         <property name="maxIdle">500</property>  
  34.                         <property name="minIdle">10</property>  
  35.                         <property name="minEvictableIdleTimeMillis">600000</property>  
  36.                         <property name="timeBetweenEvictionRunsMillis">600000</property>  
  37.                         <property name="testOnBorrow">true</property>  
  38.                         <property name="testOnReturn">true</property>  
  39.                         <property name="testWhileIdle">true</property>  
  40.                 </poolConfig>  
  41.         </dbServer>  
  42.  # 设置一个后端的dbServer,名为master ,这个可以随便取,但是为了明确其含义,最好给予特殊含义的单词   
  43. # 下面指定的数据库IP地址,为mmm提供给对外访问的虚拟IP地址  
  44.  <dbServer name="master"  parent="abstractServer">  
  45. <factoryConfig>  
  46.  <!-- mysql ip -->  
  47.  <property name="ipAddress">192.168.1.12</property>  
  48.  </factoryConfig>  
  49. </dbServer>  
  50.  <dbServer name="slave1"  parent="abstractServer">  
  51. <factoryConfig>  
  52.  <!-- mysql ip -->  
  53.  <property name="ipAddress">192.168.1.13</property>  
  54. </factoryConfig>  
  55. </dbServer>  
  56. <dbServer name="slave2"  parent="abstractServer">  
  57. <factoryConfig>  
  58. <!-- mysql ip -->  
  59. <property name="ipAddress">192.168.1.14</property>  
  60. </factoryConfig>  
  61. </dbServer>  
  62. <dbServer name="slave3"  parent="abstractServer">  
  63. <factoryConfig>  
  64. <!-- mysql ip -->  
  65. <property name="ipAddress">192.168.1.15</property>  
  66. </factoryConfig>  
  67. </dbServer>  
  68. <dbServer name="slave4"  parent="abstractServer">  
  69. <factoryConfig>  
  70. <!-- mysql ip -->  
  71. <property name="ipAddress">192.168.1.16</property>  
  72. </factoryConfig>  
  73. </dbServer>  
  74.   
  75. # 指定一个虚拟的dbServer,将上面定义的dbserver加入这个虚拟的dbserver,相当于组成一个组[这里我们将读的数据库组成一个组]  
  76. # 这里 需要将 name="mul..." 改成自己想要取的名字,这个名字也需要有含义,后面会用到  
  77.         <dbServer name="virtualslave" virtual="true">  
  78.                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">  
  79.                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->  
  80. # 选择调度算法 1 是轮询 2 是权重 3 是HA 这里选择1 轮询  
  81.                         <property name="loadbalance">1</property>  
  82.                         <!-- Separated by commas,such as: server1,server2,server1 -->  
  83. # 负载均衡,slave1,slave2当成2个服务器进行调度,这模拟量加权的调度算法。  
  84. # 注意这里使用的dbserver必须是已经定义了的,可以写多个,如slave1,slave2  
  85.                         <property name="poolNames">slave1,slave2,slave3,slave4</property>  
  86.                 </poolConfig>  
  87.         </dbServer>  
  88. </amoeba:dbServers>  

(2).配置 Amoeba 监听端口[amoeba.xml]

  1. [root@client112 conf]# vim amoeba.xml  
  2. .........................(省略)  
  3.         <proxy>  
  4.                 <!-- service class must implements com.meidusa.amoeba.service.Service -->  
  5.                 <service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager">  
  6.                         <!-- port -->  
  7.  # 设置amoeba监听的端口(这里如果默认,后面测试需要指定端口,就是这里的端口)  
  8.                         <property name="port">3306</property>  
  9.                         <!-- bind ipAddress -->  
  10.                         <!--  
  11.  # 设置监听的接口,如果不设置,则监听所有的IP[选择默认]   
  12.                         <property name="ipAddress">127.0.0.1</property>  
  13.                          -->  
  14. .........................(省略)  
  15.                         <property name="authenticator">  
  16.                                 <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">  
  17. # 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)  
  18.                                         <property name="user">kongzhong123</property>  
  19. # 提供客户端连接amoeba时需要使用这里设定的密码  
  20.                                         <property name="password">kongzhong123</property>  
  21.                                         <property name="filter">  
  22.                                                 <bean class="com.meidusa.amoeba.server.IPAccessController">  
  23.                                                         <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>  
  24.                                                 </bean>  
  25.                                         </property>  
  26.                                 </bean>  
  27.                         </property>  
  28.                 </service>  
  29. .........................(省略)  
  30.         <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">  
  31.                 <property name="ruleLoader">  
  32.                         <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">  
  33.                                 <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>  
  34.                                 <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>  
  35.                         </bean>  
  36.                 </property>  
  37.                 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>  
  38.                 <property name="LRUMapSize">1500</property>  
  39.                 <property name="defaultPool">master</property>  
  40.                 <!--                 -->  
  41. # 把默认注释掉的读写分离选项,把注释去掉并readpool修改成virtualslave(这个名字,我们前面在dbServer.xml里设置一个读数据库组,这里是作为只读池)   
  42.                 <property name="writePool">master</property>  
  43.                 <property name="readPool">virtualslave</property>  
  44.                 <property name="needParse">true</property>  
  45.         </queryRouter>  

(3).配置amoeba及JAVA的环境变量[这个上面配置java时配置过,如果没有配置参照下面]

  1. [root@client112 local]# vim /etc/profile  
  2. # 在末尾添加  
  3. export JAVA_HOME=/usr/local/java   
  4. export AMOEBA_HOME=/usr/local/amoeba   
  5. export PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin    
  6. # 使变量生效  
  7. [root@centos local]# source /etc/profile  

(4)登陆数据库授权相应用户权限

  1. #  登陆任意一个主master,授权amoeba用到登陆用户(kongzhong需要授权,kongzhong123用于给前端登陆的不需要授权)  
  2. mysql> create database kongzhong;  
  3. mysql> grant all privileges on kongzhong.* to 'kongzhong'@'192.168.1.%' identified by 'kongzhong';  
  4. mysql> flush privileges;  

(5).启动amoeba测试

  1. # 如果确认能够正常启动,就加>>/dev/null 否则还是看一下提示信息  
  2. [root@centos conf]# amoeba start & >>/dev/null   
  3. # 检测启动情况  
  4. [root@centos conf]# netstat -tulnp |grep java  
  5. # 停止amoeba测试指令是否可用  
  6. [root@centos conf]# amoeba stop  

(6).利用amoeba登陆测试[任何一台具有mysql客户端,出现以下提示即为正常]

  1. [root@client100 ~]# mysql -h192.168.1.112 -ukongzhong123 -pkongzhong123  
  2. Welcome to the MySQL monitor.  Commands end with ; or \g.  
  3. Your MySQL connection id is 1201340161  
  4. Server version: 5.1.45-mysql-amoeba-proxy-2.2.0 Source distribution  
  5.   
  6. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.  
  7.   
  8. Oracle is a registered trademark of Oracle Corporation and/or its  
  9. affiliates. Other names may be trademarks of their respective  
  10. owners.  
  11.   
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
  13.   
  14. mysql> show databases;  
  15. +--------------------+  
  16. | Database           |  
  17. +--------------------+  
  18. | information_schema |  
  19. | kongzhong          |  
  20. | test               |  
  21. +--------------------+  

(7).在192.168.1.113配置amoeba,这里就不再延迟,重复上面配置amoeba的操作

4.安装和配置keepalived

  1. # keepalived需要openssl依赖包  
  2. [root@client112 ~]# yum -y install openssl* gcc make  
  3. # 建立keepalived安装目录  
  4. [root@client112 ~]# mkdir /usr/local/keepalived  
  5. [root@client112 ~]# cd keepalived-1.2.9  
  6. [root@client112 keepalived-1.2.9]# ./configure --prefix=/usr/local/keepalived  
  7. [root@client112 keepalived-1.2.9]# make  
  8. [root@client112 keepalived-1.2.9]# make install  
  9. # 复制相应文件到指定目录  
  10. [root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/  
  11. [root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/  
  12. [root@client112 keepalived-1.2.9]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/  
  13. [root@client112 keepalived-1.2.9]# mkdir /etc/keepalived  
  14. [root@client112 keepalived-1.2.9]# cd /etc/keepalived/  
  15.   
  16. # 以上的关于keepalived操作,请重复在192.168.1.113操作一遍  
  17. # 以下操作,根据提示操作  
  18. # 编辑配置文件[192.168.1.112上的配置文件]  
  19. [root@client112 keepalived]# vim keepalived.conf  
  20. bal_defs {  
  21. notification_email  
  22. {  
  23. # 设置报警邮件地址,每行一个  
  24. # 需开启本机sendmail服务[这里可以暂时忽略]  
  25. cloud_data@163.com  
  26. }  
  27. #设置邮件发送地址  
  28. notification_email_from cloud_data@163.com  
  29. #设置smtp server 地址  
  30. smtp_server 127.0.0.1  
  31. #设置连接 smtp server超时时间  
  32. smtp_connect_timeout 30  
  33. #运行Keepalived服务器的一个标志,邮件主题中显示  
  34. router_id client112  
  35. }  
  36. # vrrp实例定义部分  
  37. vrrp_instance VI_1 {  
  38. # 指定keepalived的角色,MASTER表示此主机是主服务器  
  39. # BACKUP表示是备用服务器  
  40. state MASTER  
  41. # 指定HA监测网络的接口  
  42. interface eth0  
  43. # 虚拟路由标志,同一个vrrp实例使用一个唯一标志  
  44. # 即同一个vrrp_instance下,MASTER和BACKUP一致  
  45. virtual_router_id 51  
  46. # 优先级,数字越大优先级越高,MASTER必须大于BACKUP  
  47. priority 100  
  48. # MASTER和BACKUP同步检查间隔,秒  
  49. advert_int 1  
  50. smtp_alert  
  51. # 设定验证类型和密码  
  52. authentication {  
  53. # 验证类型,PASS和HA  
  54. auth_type PASS  
  55. # 验证密码,MASTER和BACKUP密码相同才能进行通信  
  56. auth_pass kongzhong  
  57. }  
  58. # 虚拟ip地址  
  59. virtual_ipaddress  
  60. {  
  61. 192.168.1.17  
  62.   
  63. }  
  64. }  
  65.   
  66. # 编辑配置文件[192.168.1.113上的配置文件]  
  67. [root@client113 keepalived]# vim keepalived.conf  
  68. bal_defs {  
  69.   
  70. notification_email  
  71. {  
  72. cloud_data@163.com  
  73. }  
  74. notification_email_from cloud_data@163.com  
  75. smtp_server 127.0.0.1  
  76. smtp_connect_timeout 30  
  77. router_id client113  
  78. }  
  79.   
  80. vrrp_instance VI_1 {  
  81. # 这里和192.168.1.112上不同,修改为BACKUP  
  82. state BACKUP  
  83. interface eth0  
  84. virtual_router_id 51  
  85. # 这里和192.168.1.112上不同,修改为80  
  86. priority 80  
  87. advert_int 1  
  88. smtp_alert  
  89. authentication {  
  90. # 这里需要和192.168.1.112上的一样,不然,无法切换的  
  91. auth_type PASS  
  92. auth_pass kongzhong  
  93. }  
  94. virtual_ipaddress  
  95. {  
  96. 192.168.1.17  
  97. }  
  98. }  
  99.   
  100. # 分别在192.168.1.112和192.168.1.113上启动keepalived  
  101. [root@client112 keepalived]# /etc/init.d/keepalived start  
  102. Starting keepalived: [ OK ]  
  103. # 检查虚拟ip是否绑定网卡[这里ip默认会在优先级比较高的机器上,就是刚才设置的100和80]  
  104. [root@client112 keepalived]# ip add | grep 192.168.1.17  
  105. inet 192.168.1.17/32 scope global eth0  
  106. # 192.168.1.113上启动keepalived  
  107. [root@client113 keepalived]# /etc/init.d/keepalived start  
  108. Starting keepalived: [ OK ]  
  109. # 113上如果需要看到ip需要关闭keepalived,也就是模拟112宕机  
  110. [root@client113 keepalived]# ip add | grep 192.168.1.17  
  111. # 停掉192.168.1.112的keepalived,看看虚拟IP192.168.1.17会不会自动切换到192.168.1.113上  

5.现在就可以测试了:

简单测试:

(1).使用amoeba的真实ip登陆

  1. [root@client100 ~]# mysql -h192.168.1.112 -ukongzhong123 -pkongzhong123  
  2. [root@client100 ~]# mysql -h192.168.1.113 -ukongzhong123 -pkongzhong123  

(2).使用keepalived提供的虚拟ip访问

  1. [root@client100 ~]# mysql -h192.168.1.17 -ukongzhong123 -pkongzhong123  

(3).模拟宕掉一台amoeba[即关闭keepalived],看还能否使用keepalived提供的虚拟ip访问

  1. # 这时虚拟ip应该切换到另外一台好的amoeba上  
  2. [root@client100 ~]# mysql -h192.168.1.17 -ukongzhong123 -pkongzhong123  

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 157
博文 2215
码字总数 4578339
作品 0
广州
程序员
探索MySQL高可用架构之MHA(5)

探索MySQL高可用架构之MHA(5) -----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构的AB复制操作! 本篇文章主要介绍本次架构中的Atlas读写分离! 为什么要分库、分表、读写分离? 现在...

顺境其生
2015/07/22
0
0
浅谈MySQL集群高可用架构

前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块...

English0523
2017/12/15
0
0
浅淡MySQL集群高可用架构

前言高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都...

民工哥
2017/12/21
0
0
基于amoeba+keepalived+mmm实现mysql读写分离高可用架构

更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn) 在上一篇已经通过mysql-mmm实现对mysql数据库的动态监控,这一篇我们将结合amoeba实现对数据库访问的读写分离,通过keepali...

xcga_wise
2013/12/17
0
0
MySQL5.6主从复制及读写分离的实现

MySQL5.6主从复制及读写分离的实现 MySQL 5.6 基于GTID的主从复制及使用amoeba配置实现读写分离 一、amoeba 简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba forMysql软件。...

bdstravel
2015/01/27
0
0
MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制、读写分离、高可用集群搭建 一、服务介绍 1.1 Keepalived Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中。K...

PowerMichael
2017/08/04
0
0
mysql高可用架构设计,处理高并发,大流量!

  主要介绍:复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等   mysql复制功能介绍   mysql复制功能提供分担读负载   复制解决的问...

思梦教育
06/26
0
0
MySQL架构的优化

mysql的复制: mysql的二进制日志:记录了所有对MySQL数据库的数据增删查改和对表和数据库的修改 binlog命令行的工具进行查看 二进制日志格式:

Panda_Jerry
2017/11/12
0
0
maxscale配合MHA搭建读写分离的高可用架构(基于GTID replication主从架构,mysql5.6)

基于GTID的主从replication并配合MHA搭建高可用架构,请参考之前的博客:http://linzhijian.blog.51cto.com/1047212/1906434。这里只叙述如何在此基础上增加maxscale中间件,实现读写分离的功...

Jenkin_lin
2017/04/07
0
0
Mycat学习实战-Mycat基本功能

Mycat学习实战-Mycat基本功能 Mycat学习实战-Mycat基本功能 1. Mycat高可用-读写分离 2. Mycat高可用-多主切换 3 注解 1. Mycat高可用-读写分离 1.1 读写分离配置参数 Schema.dataHost 参数b...

ygqygq2
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

fiddle 4 初始化

下载 配置fiddle 4 如果证书导出失败,执行下面脚本 D:\programs\Fiddler>makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.c......

柯里昂
4分钟前
0
0
rabbitmq学习记录(六)交换机Exchange-direct

实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机...

人觉非常君
20分钟前
0
0
Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
29分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
45分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
今天
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
今天
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部