haproxy心跳检测_PXC+Haproxy+Keepalived测试环境搭建

一、

PXC简介

1、

Garela 介绍

2、

PXC介绍与搭建

二、

Haproxy实现负载均衡

三、

Keepalived避免单点故障

一、PXC简介

1、

Garela 介绍

blog_61d758500102vlw7.html

其中wsrep描述了以下的复制模型:首先应用(比如数据库)都有状态(对应于数据库的内容),这些都能被客户端所改变,状态改变是通过一系列的原子的改变表示的,这些改变就相当于数据库的一个事物,在一个集群中,所有的节点通过以相同的顺序复制应用这些改变来保证集群间的一致性

Galera wsrep provider 提供了下面的特性:

(1)、Galrea集群

(2)、节点存活检测

(3)、脑裂处理

(4)、流量控制

(5)、多个主节点间的操作

(6)、并行应用writeset.

2、PXC介绍与搭建

(1)、介绍

Percona XtraDB

Cluster为mysql用户提供了高可用和扩展性一套解决方案,它提供了以下特性:

- 同步复制,事物在所有节点或者提交或者不提交

- 多主复制,可以往任何节点写入

- 事件在从节点上可以并行应用

- 数据一致性,所有节点数据保持一致

介绍:

集群的节点推荐至少3个,虽然两个节点也可以工作,但是如果其中的一个节点宕机,整个集群将不可用。

每个节点拥有全部的数据,可以在任何节点上进行备份

blog_61d758500102vlw7.html

当你执行查询的时候,sql在本地执行,不需要去访问其他节点去

去中心化管理,任何时候节点脱离集群,其他集群通过投票算法形成新的集群,集群仍可用

可以分散读,可以把读操作分散到任何节点上去

(2)、安装

(1)、环境介绍

Ip:10.0.18.251,10.0.18.252,10.0.18.253

以下操作分别在三个节点节点操作:

因为需要用到yum源,所以首先安装下面的包,这样会自动添加yum源

$ rpm -Uhv

http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

查看下结果:

blog_61d758500102vlw7.html

已经安装了

接着安装Percona XtraDB Cluster的包:

$ yum install Percona-XtraDB-Cluster-server Percona-XtraDB-Cluster-client

完成后确实下是否安装成功

blog_61d758500102vlw7.html

已经安装了

(3)、配置文件

下面是三个节点上配置文件的内容

blog_61d758500102vlw7.html

---------------------------------------node2-------------------------------------------

blog_61d758500102vlw7.html-------------------------------------node3----------------------------------------------

blog_61d758500102vlw7.html

(4)、启动方式

在PXC中启动集群的方式有点不同具体如下:

如果是初始化集群或者是三个节点都停掉需要重启集群,这时候启动节点的时候集群不存在,所以需要制定wsrep_cluster_address=gcomm://,可以使用下面的方式启动:

/etc/init.d/mysql start --wsrep-cluster-address="gcomm://"

或者

/etc/init.d/mysql bootstrap-pxc

其余节点可以直接用:

/etc/init.d/mysql start

(5)、测试

首先在其中的某个节点上执行如下命令:

UPDATE mysql.user SET password=PASSWORD("hudong") where

user='root';

Flush privileges

修改root用户的密码为hudong

为了能够使xtrabackup成功的sst,需要创建相应的用户名和密码:

mysql@percona1> CREATE USER 'sstuser'@'localhost'

IDENTIFIED BY 's3cret';

mysql@percona1>GRANT RELOAD, LOCK TABLES, REPLICATION

CLIENT ON *.* TO 'sstuser'@'localhost';

mysql@percona1> FLUSH PRIVILEGES;

可以在某个节点上创建表然后进行测试,查看其余节点是否已经同步。

二、Haproxy实现负载均衡

集群安装完成后,需要一个负载均衡器来分发连接,我们这里采用haproxy,这也是percona推荐的方式

1、 首先下载并安装haproxy

我们这里选用10.0.198.252来安装haproxy,选用手动编译的方式进行,下载haproxy的稳定版haproxy-1.4.24,接着就可以开始进行编译安装了

(1)、make

TARGET=linux26 PREFIX=/usr/local/haproxy

(2)、make

install PREFIX=/usr/local/haproxy

在/usr/local/haproxy/目录下创建conf文件夹,mkdir

–p /usr/local/haproxy/conf

在conf目下下创建haproxy.cfg文件,内容如下:

global

log 127.0.0.1 local0

log 127.0.0.1 local1

notice

maxconn 4096

#chroot

/usr/share/haproxy

user haproxy

group haproxy

daemon

defaults

log global

mode http

option tcplog

option dontlognull

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

frontend pxc-front

bind *:3307

mode tcp

default_backend

pxc-back

frontend stats-front

bind *:80

mode http

default_backend

stats-back

frontend

pxc-onenode-front

bind *:3333

mode tcp

default_backend

pxc-onenode-back

backend pxc-back

mode tcp

balance leastconn

option httpchk

server c1 10.0.18.251:3306

check port 9200 inter 12000 rise 3 fall 3

server c2 10.0.18.252:3306

check port 9200 inter 12000 rise 3 fall 3

server c3 10.0.18.253:3306

check port 9200 inter 12000 rise 3 fall 3

backend stats-back

mode http

balance roundrobin

stats uri

/haproxy/stats

stats auth

pxcstats:secret

backend

pxc-onenode-back

mode tcp

balance leastconn

option httpchk

server c1 10.0.18.251:3306

check port 9200 inter 12000 rise 3 fall 3

server c2 10.0.18.252:3306

check port 9200 inter 12000 rise 3 fall 3 backup

server c3 10.0.18.253:3306 check port 9200 inter 12000 rise 3

fall 3 backup

编辑vi /etc/syslog.conf增加如下内容:

local0.*

/var/log/haproxy.log

local1.*

/var/log/haproxy.log

编辑vim /etc/sysconfig/syslog:

修改SYSLOGD_OPTIONS="-r -m 0"

Chmod 777 /var/log/haproxy.log

上述两项完成后,重新启动:service syslog restart

这样haproxy的日志将会记录在/var/log/haproxy.log中

添加haproxy用户

Useradd haproxy

负载方式:最少连接

balance leastconn

登陆用户名为pxcstats,密码secret

stats auth pxcstats:secret

check port 9200 –代表haproxy进程会对9200进行频率为12000的检测,当连续三次检测成功的时候就任务此服务可用,如果连续三次失败就认为不可用,检测方式为httpchk.

server c1 10.0.18.251:3306 check port 9200 inter 12000

rise 3 fall 3

back表示处于incative模式

server c2 10.0.18.252:3306 check port 9200 inter 12000

rise 3 fall 3 backup

这样haproxy已经配置完成了,接下来需要在三个节点上进行配置

首先在集群中的节点,如果由于某些原因而脱离节点,haproxy是没法直接检测的,所以节点之间必须有某种方式来表示自己现在不属于集群,这样haproxy才有可能知道哪个节点属于集群而那些不属于集群了,具体如下:

集群套件中默认会安装clustercheck命令,这个命令会返回http格式的内容

以10.0.18.251为例:

[root@oracle-n2 conf]# clustercheck

HTTP/1.1 200 OK

Content-Type: text/plain

Connection: close

Content-Length: 40

Percona XtraDB Cluster Node is synced.

接着通过创建clustercheck为一个服务并且通过守护进程来管理

编辑vi /etc/xinetd.d/mysqlchk,内容如下:

# default: on

# description: mysqlchk

service mysqlchk

{

# this is a config for xinetd, place it in

/etc/xinetd.d/

disable = no

flags

= REUSE

socket_type

= stream

port

= 9200

wait

= no

user

= nobody

server

= /usr/bin/clustercheck

log_on_failure += USERID

only_from

= 0.0.0.0/0

# recommended to put the IPs that need

# to connect exclusively (security purposes)

per_source

= UNLIMITED

}

在/etc/services中添加如下内容

mysqlchk

9200/tcp

# mysqlchk

重启xinetd

service xinetd restart

查看服务是否已经启动

blog_61d758500102vlw7.html

接着在其中的某个节点上创建用户:

grant all on sbtest.* to 'hudong'@'10.0.18.%' identified

by 'sbpass';

flush privileges;

进行测试:

只连接node1:

mysql -uhudong -phudong -h 10.0.18.252 -P 3333

按照最小连接分配连接:

mysql -uhudong -phudong -h 10.0.18.252 -P 3307

三、Keepalived避免单点故障

现在我们可以通过HARPOXY分发连接对数据库进行访问,但是现在有个问题就是HAPROXY是属于单点故障的,如果这台服务器出现问题可能就会对数据库的访问产生影响了,所以接着我们在10.0.18.253上再安装HAPROXY,然后两给服务器之间通过KEEPALIVED进行心跳检测,如果其中的某个机器出现问题,其中的一台将会接管,对用户来说整个过程透明

1、 安装

tar -xvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure

--prefix=/usr/local/keepalived

make && make install

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived

/etc/init.d/keepalived

cp /usr/local/keepalived/sbin/keepalived

/usr/sbin/

cp /usr/local/keepalived/etc/sysconfig/keepalived

/etc/sysconfig/

mkdir -p /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf

/etc/keepalived/keepalived.conf

chmod +x /etc/init.d/keepalived

2、 配置文件

10.0.18.252:

[root@oracle-n2 sysconfig]# cat

/etc/keepalived/keepalived.conf

global_defs {

router_id

LVS_DEVEL

}

vrrp_script chk_haproxy

{

script "killall -0 haproxy"

检查脚本

interval 2

检查间隔

weight 2

}

vrrp_instance VI_1 {

state MASTER

节点状态

interface eth0

网卡接口

virtual_router_id 51

priority 101

优先级

advert_int 1

心跳检测

mcast_src_ip 10.0.18.252 通过此地址进行广播

authentication {

auth_type PASS

验证方式

auth_pass 1111

验证密码

}

track_script {

chk_haproxy

}

virtual_ipaddress {

10.0.18.33

虚拟IP

}

}

10.0.18.253:

global_defs {

router_id

LVS_DEVEL

}

vrrp_script chk_haproxy {

script

"/usr/local/keepalived/chk_haproxy.sh"

interval

2

weight

2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 100

advert_int 1

mcast_src_ip 10.0.18.253

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_haproxy

}

virtual_ipaddress {

10.0.18.33

}

}

这样当处于master的挂掉后,处于backup的keepalived可以自动接管,当master启动后vip会自动偏移过来。

测试:

在其中某台机子上关闭keepalived服务,/etc/init.d/keepalived

stop,在经过1s的心跳检测后,会自动切换到另一台机子上,可以通过/var/log/messages进行查看

Mysqlslap测试:

(1)用200、400个并发,一共运行20000次查询(dml),

mysqlslap -a

--concurrency=200,400 --number-of-queries 20000

--iterations=8 --debug-info

--user=hudong --password=hudong --host=10.0.18.252

--port=3333

--engine=innodb

(2)运行300,500个并发,一共运行40000次查询

mysqlslap -a

--concurrency=300,500 --number-of-queries 40000 --debug-info

--user=hudong --password=hudong --host=10.0.18.252

--port=3333

--engine=innodb

出现了死锁。。。

(3)、单独运行500并发

mysqlslap -a

--concurrency=500 --number-of-queries 40000 --debug-info

--user=hudong --password=hudong --host=10.0.18.252

--port=3333

--engine=innodb

blog_61d758500102vlw7.html

结论:连接的端口是3307,所以所有的连接都会指向10.0.18.251上,整体表现良好,在200,,300,400,500的并发情况下,

MYSQL5.6安装

1、安装repository

yum install

http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

2、安装集群

yum install Percona-XtraDB-Cluster-56

报错:需要安装socat

解决方法:

yum install rsync

wget --no-cache

http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo

-O /etc/yum.repos.d/convirt.repo

yum makecache

yum install socat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值