一、
PXC简介
1、
Garela 介绍
2、
PXC介绍与搭建
二、
Haproxy实现负载均衡
三、
Keepalived避免单点故障
一、PXC简介
1、
Garela 介绍
其中wsrep描述了以下的复制模型:首先应用(比如数据库)都有状态(对应于数据库的内容),这些都能被客户端所改变,状态改变是通过一系列的原子的改变表示的,这些改变就相当于数据库的一个事物,在一个集群中,所有的节点通过以相同的顺序复制应用这些改变来保证集群间的一致性
Galera wsrep provider 提供了下面的特性:
(1)、Galrea集群
(2)、节点存活检测
(3)、脑裂处理
(4)、流量控制
(5)、多个主节点间的操作
(6)、并行应用writeset.
2、PXC介绍与搭建
(1)、介绍
Percona XtraDB
Cluster为mysql用户提供了高可用和扩展性一套解决方案,它提供了以下特性:
- 同步复制,事物在所有节点或者提交或者不提交
- 多主复制,可以往任何节点写入
- 事件在从节点上可以并行应用
- 数据一致性,所有节点数据保持一致
介绍:
集群的节点推荐至少3个,虽然两个节点也可以工作,但是如果其中的一个节点宕机,整个集群将不可用。
每个节点拥有全部的数据,可以在任何节点上进行备份
当你执行查询的时候,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
查看下结果:
已经安装了
接着安装Percona XtraDB Cluster的包:
$ yum install Percona-XtraDB-Cluster-server Percona-XtraDB-Cluster-client
完成后确实下是否安装成功
已经安装了
(3)、配置文件
下面是三个节点上配置文件的内容
---------------------------------------node2-------------------------------------------
-------------------------------------node3----------------------------------------------
(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
查看服务是否已经启动
接着在其中的某个节点上创建用户:
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
结论:连接的端口是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