【数据库中间件】分布式组件 -数据库中间件集群

一、         ClusterDB 高可用集群部署

 

二、         软件版本信息

1. 单节点部署

资源文件地址:H:\Software\DevSoftware\Web Service\Haproxy

 

名称

IP

安装软件包

备注

Haproxy

9.8.1.101

haproxy-1.5.4-3.el6.x86_64.rpm

xinetd-2.3.14-39.el6_4.x86_64.rpm

Red Heat 6.5

ClusterDB1.6

9.8.1.99

JDK1.7

ClusterDB1.6

xinetd-2.3.14-40.el6_4.x86_64.rpm

Red Heat 6.5

ClusterDB1.6

9.8.1.125

JDK1.7

ClusterDB1.6

xinetd-2.3.14-40.el6_4.x86_64.rpm

Red Heat 6.5

ClusterDB1.6

9.8.1.101

JDK1.7

ClusterDB1.6

xinetd-2.3.14-40.el6_4.x86_64.rpm

Red Heat 6.5

MySQL

 

mysql-5.6.26.rpm

 

Oracle

 

 

 

 

操作系统:CentOS-6.6-x86_64

JDK版本:jdk1.7.0_79

HAProxy版本:haproxy-1.5.4-3.el6.x86_64.rpm

MyCat版本:ClusterDB-Service-1.6-release-20151019230038-linux.tar.gz

MySQL版本:mysql-5.6.26.rpm

Oracle版本: Oracle 11g

2. 主备集群模式

名称

IP

主机名

安装包

备注

HAProxy主机1

VIPI地址:

9.1.8.254

9.1.8.43

szyhapp10

 

 

HAProxy主机2

9.1.8.44

szyhapp11

 

 

ClusterDB主机1

 

9.1.8.42

 

 

 

ClusterDB主机2

 

9.1.8.43

 

 

 

ClusterDB主机3

 

9.1.8.44

 

 

 

 

三、        ClusterDB HA集群部署架构

   HAProxy负责将请求分发到ClusterDB上,起到负载均衡的作用,同时HAProxy也能检测到ClusterDB是否存活,HAProxy只会将请求转发到存活的ClusterDB上。如果一台ClusterDB服务器宕机,HAPorxy转发请求时不会转发到宕机的ClusterDB上,所以ClusterDB依然可用。

四、         代理模式组件部署

HAproxy

Haproxy 是一个开源的负载均衡和反向代理软件,其提供了高可用的网络服务。其一般是应用于web服务,但同时也能为SMTP和终端服务等提供可靠的支持。

         HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟

主机,它是免费、快速并且可靠的一种解决方案。

HAProxy目前主要有三个版本:1.4、1.5、1.6,CentOS6.6自带的RPM包为1.5的。

HAProxy1.5版开始,支持SSL、DDoS防护等功能,可看官网说明:

version 1.5 : the most featureful version, supports SSL, IPv6, keep-alive, DDoS protection, etc...

MyCat官方推荐使用HAProxy做MyCat的高可用负载均衡代理。

 

useradd haproxy;

passwd haproxy;

 

cd /usr/local/haproxy

chown -R haproxy.haproxy *

 

 

root 用户下执行:

cd /home/haproxy

 

Haproxy 单机部署

安装

rpm -ivh haproxy-1.5.4-3.el6.x86_64.rpm   -安装

 

 

配置

1>添加haproxy用户组和用户

# groupadd haproxy

# useradd -g haproxy haproxy

 

添加非本机IP邦定支持

# vi /etc/sysctl.conf   

net.ipv4.ip_nonlocal_bind = 1   

# sysctl -p

2>防火墙中打开端口

防火墙中打开3306端口和48800端口

# vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 48800 -j ACCEPT

重启防火墙

# service iptables restart

 

3>设置HAProxy开机启动

# chkconfig --add haproxy

# chkconfig haproxy on

4>haproxy.cfg 配置

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg

 

修改/etc/haproxy/happroxy.cfg为:

## global配置中的参数为进程级别的参数,通常与其运行的操作系统有关

global

log 127.0.0.1 local0 info ## 定义全局的syslog服务器,最多可以定义2个

### local0是日志设备,对应于/etc/rsyslog.conf中的配置,默认回收info的日志级别

#log 127.0.0.1 local1 info

chroot /usr/share/haproxy ## 修改HAProxy的工作目录至指定的目录并在放弃权限之前执行

### chroot() 操作,可以提升 haproxy 的安全级别

group haproxy ## 同gid,不过这里为指定的用户组名

user haproxy ## 同uid,但这里使用的为用户名

daemon ## 设置haproxy后台守护进程形式运行

nbproc 1 ## 指定启动的haproxy进程个数,

### 只能用于守护进程模式的haproxy;默认为止启动1个进程,

### 一般只在单进程仅能打开少数文件描述符的场中中才使用多进程模式

maxconn 4096 ## 设定每个haproxy进程所接受的最大并发连接数,

### 其等同于命令行选项"-n","ulimit-n"自动计算的结果正式参照从参数设定的

# pidfile /var/run/haproxy.pid ## 进程文件(默认路径 /var/run/haproxy.pid)

node edu-haproxy-01 ## 定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时

description edu-haproxy-01 ## 当前实例的描述信息

## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定

defaults

log global ## 继承global中log的定义

mode http ## mode:所处理的模式 (tcp:四层 , http:七层 , health:状态检查,只会返回OK)

### tcp: 实例运行于纯tcp模式,在客户端和服务器端之间将建立一个全双工的连接,

#### 且不会对7层报文做任何类型的检查,此为默认模式

### http:实例运行于http模式,客户端请求在转发至后端服务器之前将被深度分析,

#### 所有不与RFC模式兼容的请求都会被拒绝

### health:实例运行于health模式,其对入站请求仅响应“OK”信息并关闭连接,

#### 且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求

option httplog

retries 3

option redispatch ## serverId对应的服务器挂掉后,强制定向到其他健康的服务器

maxconn 2000 ## 前端的最大并发连接数(默认为2000)

### 其不能用于backend区段,对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,

### 从而避免无法应答用户请求。当然,此最大值不能超过“global”段中的定义。

### 此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓存的大小为8KB,

### 再加上其他的数据,每个连接将大约占用17KB的RAM空间,这意味着经过适当优化后,

### 有着1GB的可用RAM空间时将维护40000-50000并发连接。

### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,

### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默认为2000

timeout connect 5000ms ## 连接超时(默认是毫秒,单位可以设置us,ms,s,m,h,d)

timeout client 50000ms ## 客户端超时

timeout server 50000ms ## 服务器超时

## HAProxy的状态信息统计页面

listen admin_stats

bind :48800 ## 绑定端口

stats uri /admin-status ##统计页面

stats auth admin:admin ## 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可

mode http

option httplog ## 启用日志记录HTTP请求

## listen: 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对TCP流量有用

listen mycat_servers

bind :3306 ## 绑定端口

mode tcp

option tcplog ## 记录TCP请求日志

option tcpka ## 是否允许向server和client发送keepalive

option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www ## 后端服务状态检测

### 向后端服务器的48700端口(端口值在后端服务器上通过xinetd配置)发送 OPTIONS 请求

### (原理请参考HTTP协议) ,HAProxy会根据返回内容来判断后端服务是否可用.

### 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。

balance roundrobin ## 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默认为轮询方式

server mycat_01 192.168.1.203:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10

server mycat_02 192.168.1.204:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10

## 格式:server <name> <address>[:[port]] [param*]

### serser 在后端声明一个server,只能用于listen和backend区段。

### <name>为此服务器指定的内部名称,其将会出现在日志及警告信息中

### <address>此服务器的IPv4地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的IPV

4地址

### [:[port]]指定将客户端连接请求发往此服务器时的目标端口,此为可选项

### [param*]为此server设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:

#### weight:权重,默认为1,最大值为256,0表示不参与负载均衡

#### backup:设定为备用服务器,仅在负载均衡场景中的其他server均不可以启用此server

#### check:启动对此server执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定

#### inter:设定监控状态检查的时间间隔,单位为毫秒,默认为2000,

##### 也可以使用fastinter和downinter来根据服务器端专题优化此事件延迟

#### rise:设置server从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为2)

#### fall:设置server从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为3)

#### cookie:为指定server设定cookie值,此处指定的值将会在请求入站时被检查,

 

操作命令

启动命令

注意:启动haproxy前必须先启动keepalived,否则启动不了

 

/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg

 

service haproxy start

 

停止命令

ps -ef | grep sbin/haproxy | grep -v grep |awk '{print $2}'|xargs kill -s 9

 

service haproxy stop

验证

ps -ef | grep haproxy

 

http://9.1.8.101:48800/admin-status

 

 

syslog

后续补充

 

ClusterDB

ClusterDB 服务部署

Hosts配置

# vi /etc/hosts

9.1.8.99   clusterdb_01 

9.1.8.125  clusterdb_02

9.1.8.101  clusterdb_03

安装部署

查看ClusterDB安装部署手册。

配置监听ClusterDB是否存活

在ClusterDB节点主机上配置 ,ClusterDB 服务主机(ClusterDB_01、ClusterDB_02、ClusterDB_03)上需要增加ClusterDB服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对ClusterDB的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测ClusterDB的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd + tcp_wrapper的功能,但是更加强大和安全。xinetd为linux系统的基础服务)

Xinetd

检查

1、查看是否安装了xinetd软件包

 [root@akvmts178 ~]# rpm -q xinetd

xinetd-2.3.14-10.el5

 

2、查看xinetd服务是否在运行

    运行状态      [root@akvmts178 ~]# service xinetd status

                          xinetd (pid  9396) 正在运行...

    关闭状态      [root@akvmts178 ~]# service xinetd status

                          xinetd 已停

3、查看服务是否自动开启

     服务在runlevel 3 4 5级别自动开启

      [root@akvmts178 ~]# chkconfig --list|grep xinetd

        xinetd          0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭

  

     服务未开启

      [root@akvmts178 ~]# chkconfig --list|grep xinetd

       xinetd          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

如果服务已经开启了,那么使用chkconfig的时候,除了可以看到xinetd的状态,在命令输出的最后,也可以看到inetd中包含的其他网络服务,例如:

基于 xinetd 的服务:

        chargen-dgram:  关闭

        chargen-stream: 关闭

        cvs:            关闭

        daytime-dgram:  关闭

        daytime-stream: 关闭

        discard-dgram:  关闭

        discard-stream: 关闭

        echo-dgram:     关闭

        echo-stream:    关闭

        eklogin:        关闭

        ekrb5-telnet:   关闭

        gssftp:         关闭

        klogin:         关闭

        krb5-telnet:    关闭

        kshell:         关闭

        rmcp:           关闭

        rsync:          关闭

        tcpmux-server:  关闭

        tftp:           关闭

        time-dgram:     关闭

        time-stream:    关闭

4. 查看安装位置

whereis xinetd

 

安装

1、如果xinetd还没有安装,可使用如下命令安装:

# yum install xinetd

#Rpm包安装

#rpm -ivh xinetd-2.3.14-40.el6.x86_64.rpm

 

配置

1、检查/etc/xinetd.conf的配置

检查/etc/xinetd.conf的末尾是否有 includedir /etc/xinetd.d ,

没有就加上

# vi /etc/xinetd.conf

 

2、检查 /etc/xinetd.d 目录

检查 /etc/xinetd.d 目录是否存在,不存在刚创建

# mkdir /etc/xinetd.d/

3、增加ClusterDB存活状态检测服务配置

# touch /etc/xinetd.d/clusterdb_status

# vi /etc/xinetd.d/clusterdb_status

增加以下内容:

service clusterdb_status

{

flags = REUSE## 使用该标记的socket_type为stream,需要设置wait为no

socket_type = stream ## 封包处理方式,Stream为TCP数据包

port = 48700 ## 服务监听端口

wait = no ## 表示不需等待,即服务将以多线程的方式运行

user = root ## 执行此服务进程的用户

server =/usr/local/bin/clusterdb_status_sh ## 需要启动的服务脚本

log_on_failure += USERID ## 登录失败记录的内容

disable = no ## 要启动服务,将此参数设置为no

}

具体配置文件请使用:xinetd文件夹下的clusterdb_status文件

4、添加 clusterdb_status_sh 服务脚本

添加 /usr/local/bin/clusterdb_status_sh 服务脚本

# touch /usr/local/bin/clusterdb_status_sh

# vi /usr/local/bin/clusterdb_status_sh

增加以下内容:

#!/bin/bash

#/usr/local/bin/clusterdb_status_sh.sh

# This script checks if a mycat server is healthy running on localhost.

# It will return:

# "HTTP/1.x 200 OK\r" (if mycat is running smoothly)

# "HTTP/1.x 503 Internal Server Error\r" (else)

mycat=`/home/clusterdb/bin/mycat status | grep 'not running' | wc -l`

if [ "$mycat" = "0" ]; then

/bin/echo -e "HTTP/1.1 200 OK\r\n"

else

/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

fi

5、给新增脚本赋予可执行权限

# chmod a+x /usr/local/bin/clusterdb_status_sh

6、在 /etc/services 中加入 clusterdb_status 服务

:$ 用这个命令 到文件尾
:1到文件头是

# vi /etc/services

或用如下方式:

# echo "clusterdb_status  48700/tcp   #clusterdb_status"  >>  /etc/services

 

在末尾加入:

clusterdb_status 48700/tcp   # clusterdb_status

保存后,重启xinetd服务

# service xinetd restart

 

 

7、将xinetd加入自启动服务

chkconfig --add xinetd

chkconfig --level 2345 xinetd on

 

验证

1、 验证clusterdb_status服务是否成功启动

查看启动的端口

#grep 'clusterdb_status' /etc/services <==先看看端口是哪一号

 

# netstat -antup|grep 48700

 

注意:如果没有监听端口信息,如上图,就修个监听端口为49700或者检查配置文件是否多了空格或者注释。

 

能看到上图这样的信息,说明服务配置成功。

 

netstat  -tunlp | grep xine

 

 

netstat   -atnp 

 

telnet 9.1.8.100 48700

 

2、Clusterdb服务主机防火墙打开48700端口

# vi /etc/sysconfig/iptables

增加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 48700 -j ACCEPT

保存后重启防火墙

# service iptables restart

3、脚本测试:

# /usr/local/bin/clusterdb_status_sh

 

4、xinetd命令

    service xinetd start

  service xinetd stop

  service xinetd restart
    查看运行状态
    /etc/rc.d/init.d/xinetd status

 

--xinetd 启动,停止脚本

--启动脚本:

#!/bin/bash

/usr/local/xinetd-2.3.15/xinetd/xinetd -f /usr/local/xinetd-2.3.15/contrib/xinetd.d/mycat_status &

 

/usr/sbin/xinetd -f /etc/xinetd.d/clusterdb_status &

--停止脚本:

#!/bin/bash

ps -ef |grep xinetd |grep -v grep |awk '{print $2}'|xargs kill -s 9

 

 

Keepalived 安装

Keepalived 安装

Keepalived依赖安装

依赖检测

检查keepalived所需要的依赖包是否已经安装

# rpm -qa | grep popt       //(安装keepalived需要popt支持)
# rpm -qa | grep openssl     //(安装keepalived需要openssl支持)

在线安装依赖popt和 openssl

# yum install openssl  openssl-devel  popt popt-devel

离线安装依赖openssl安装

暂无,后续补充。

安装

使用安装包:keepalived-1.2.7-3.el6.x86_64.rpm

  #rpm -ivh keepalived-1.2.7-3.el6.x86_64.rpm

 

配置【Keepalived + HAProxy】

Master

mv keepalived.conf keepalived.conf.default

vi /etc/keepalived/keepalived.conf 

 

HAProxy状态检测脚本

vi /etc/keepalived/haproxy_check.sh

#!/bin/bash

START_HAPROXY="/etc/rc.d/init.d/haproxy start"

STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"

LOG_FILE="/usr/local/keepalived/log/haproxy-check.log"

HAPS=`ps -C haproxy --no-header |wc -l`

date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE

echo "check haproxy status" >> $LOG_FILE

if [ $HAPS -eq 0];then

echo $START_HAPROXY >> $LOG_FILE

$START_HAPROXY >> $LOG_FILE 2>&1

sleep 3

if [ `ps -C haproxy --no-header |wc -l` -eq 0];then

echo "start haproxy failed, killall keepalived" >> $LOG_FILE

killall keepalived

fi

fi

 

haproxy状态检查脚本授权

chmod +x /etc/keepalived/haproxy_check.sh

 

创建日志保存目录:

mkdir /usr/local/keepalived

mkdir /usr/local/keepalived/log

 

haproxy.cfg文件

添加 node clusterdb-haproxy-01

Backup

vi /etc/keepalived/keepalived.conf 

 

HAProxy状态检测脚本和Master一样。

vi /etc/keepalived/haproxy_check.sh

haproxy状态检查脚本授权

chmod +x /etc/keepalived/haproxy_check.sh

 

创建日志保存目录:

mkdir /usr/local/keepalived

mkdir /usr/local/keepalived/log

 

haproxy.cfg文件

添加 node clusterdb-haproxy-02

 

启动

 启动keepalived服务

# service keepalived start
如果keepalived已经启动,这时我们就可以查看以下命令查看启动情况:
# service keepalived status  

# ps aux | grep keepalived

开机启动:chkconfig keepalived on

 

Keepalived服务管理命令:

停止:service keepalived stop

启动:service keepalived start

重启:service keepalived restart

查看状态:service keepalived status

验证

 

五、         集群部署验证

 

六、         常见问题

问题1:*.sh文件执行 bad interpreter

 

上面错误的原因之一是脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 使用vim编辑器打开脚本, 运行:

:set ff

fileformat=dos  额 终于发现问题所在了  格式不兼容啊

可以看到DOS或UNIX的字样.

使用set ff=unix把它强制为unix格式的, 然后存盘退出, 即可.

再次执行  ok没问题了

问题2:

 

问题3:

转载于:https://my.oschina.net/fxdemon/blog/1595721

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值