前言

有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作。

本文集中讲haproxy 和 keeplived 的环境安装配置与访问。

mariadb galera cluster搭建点这里的传送门 《MyCat 学习笔记 第五篇 . Mycat 1.5 集成 Galera Cluster 10.1.10 读写分离 Centos 7》

HAProxy是高性能的代理服务器,其可以提供7层和4层代理,具有healthcheck,负载均衡等多种特性,性能卓越,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用

KeepAlived是 一个高可用方案,通过VIP(即虚拟IP)和心跳检测来实现高可用。其原理是存在一组(两台)服务器,分别赋予Master,Backup两个角色,默认 情况下Master会绑定VIP到自己的网卡上,对外提供服务。Master,Backup会在一定的时间间隔向对方发送心跳数据包来检测对方的状态,这 个时间间隔一般为2秒钟,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,把VIP绑定到自己的网卡,此时Backup对 外提供服务,实现自动化的故障转移,当Master恢复的时候会重新接管服务。

环境说明

由于本地环境有限,因此将mysql集群环境与ha环境安装在相同的服务器上,具体情况如下所示

192.168.31.187  galera cluster db1 haproxy + keeplived

192.168.31.212  galera cluster db2 haproxy + keeplived

192.168.31.150  galera cluster db3 无ha环境

环境安装与配置

HAProxy 1.6.3  下载地址:http://www.haproxy.org/download/1.6/src/haproxy-1.6.3.tar.gz

haproxy.org 有可能会被黑名单,FQ下载即可( lantern 懂的入~ )

习惯性在 /usr/local 目录下安装应用程序

[root@miwifi-r1cm-srv haproxy]# tar xvf haproxy-1.6.3.tar.gz

[root@miwifi-r1cm-srv haproxy-1.6.3]# make TARGET=linux26 PREFIX=/usr/local/haproxy ARCH=x86_64

[root@miwifi-r1cm-srv haproxy-1.6.3]# make install PREFIX=/usr/local/haproxy

install -d "/usr/local/haproxy/sbin"
install haproxy "/usr/local/haproxy/sbin"
install -d "/usr/local/haproxy/share/man"/man1
install -m 644 doc/haproxy.1 "/usr/local/haproxy/share/man"/man1
install -d "/usr/local/haproxy/doc/haproxy"
for x in configuration management architecture cookie-options lua proxy-protocol linux-syn-cookies network-namespaces close-options intro; do \
install -m 644 doc/$x.txt "/usr/local/haproxy/doc/haproxy" ; \
done

[root@miwifi-r1cm-srv haproxy]# pwd
/usr/local/haproxy
[root@miwifi-r1cm-srv haproxy]# touch haproxy.cfg

[root@miwifi-r1cm-srv haproxy]# vi haproxy.cfg

global
  log 127.0.0.1 local0 #日志记录功能
  maxconn 4096
  chroot /usr/local/haproxy
  user root #最好是haproxy用户
  group root #最好是haproxy用户
  daemon

defaults
  log global
  option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
  option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
  retries 3
  maxconn 2000
  contimeout 5000
  clitimeout 50000
  srvtimeout 50000

frontend galera_front #描述允许客户端连接的监听套接字 本机接收的服务端口
  bind *:23306
  mode tcp
  default_backend galera_back #当没有匹配use_backend时,默认的backend

frontend stats_front
  bind *:80
  mode http
  default_backend stats_back

backend galera_back #描述进来的连接将转发到哪些后端服务器
  mode tcp
  option tcplog
  option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
  option httpchk #启用HTTP协议检查服务器监控状态,通过调用脚本检查节点的状态
  balance leastconn #负载均衡算法,使用最少连接算法,适合长连接应用
  server cluster_187 192.168.31.187:13306 check port 19200 inter 5s rise 2 fall 3
  server cluster_212 192.168.31.212:13306 check port 19200 inter 5s rise 2 fall 3
  server cluster_150 192.168.31.150:13306 check port 19200 inter 5s rise 2 fall 3 #fall连续3次检查错误后,将表明服务器死亡,默认为3;inter连续两次检查的间隔时间值,单位为毫秒,默认为2s;rise连续3次检查成功,表明服务可用
  srvtimeout 20000

backend stats_back #开启haproxy的状态页面
  mode http
  option httplog
  balance roundrobin
  stats uri /haproxy/stats #定义访问统计信息的URI
  stats auth admin:admin #设置查看统计信息的用户名和密码
  stats admin if TRUE #管理界面,如果认证成功了,可通过webui管理节点
  stats refresh 30s #统计页面自动刷新时间

galera cluster 验证9200端口的配置

[root@miwifi-r1cm-srv ~]# sudo yum install xinetd -y

/etc/xinetd.conf

defaults
{
instances = 60
#log_type = SYSLOG authpriv
log_type = FILE /var/adm/xinetd.log
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d

[root@miwifi-r1cm-srv ~]# wget -O /usr/bin/clustercheck https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

[root@miwifi-r1cm-srv ~]# sudo chmod 755 /usr/bin/clustercheck

[root@miwifi-r1cm-srv ~]# sudo cat > /etc/xinetd.d/mysqlchk <<EOF

# default: on
# description: mysqlchk
service mysqlchk
{
disable = no
flags = REUSE
socket_type = stream
port = 19200
wait = no
user = nobody
server = /usr/bin/clustercheck
log_on_failure += USERID
only_from = 0.0.0.0/0
bind = 192.168.31.187
per_source = UNLIMITED
}

EOF

手动将mysql验证加入services,以供xinetd守护进程调用,更多xinetd相关介绍见本文底部相关链接。

[root@miwifi-r1cm-srv ~]# sudo echo "mysqlchk   19200/tcp" | tee -a /etc/services

重启服务的2种方法,建议首次启动时先用第2种方案,手动启动后方便排查异常情况

[root@miwifi-r1cm-srv ~]# sudo service xinetd restart

或可将filelog配置到 /etc/xinetd.conf 的default域里

[root@miwifi-r1cm-srv xinetd.d]# /usr/sbin/xinetd -filelog /var/adm/xinetd.log -f /etc/xinetd.conf

19200检测脚本配置完成后记录要调整具体的数据库用户及相关配置信息

/usr/bin/clustercheck

MYSQL_USERNAME="clustercheckuser"
MYSQL_PASSWORD="clustercheckpassword!"
AVAILABLE_WHEN_DONOR="0"
#ERR_FILE="/tmp/maria_db_check_19200.err" 如果脚本验证失败则可以选择打印错误原因
ERR_FILE="/dev/null"
AVAILABLE_WHEN_READONLY="1"
DEFAULTS_EXTRA_FILE="/usr/local/mariadb/mariadb-10.1.10-13306/my.cnf"

进入数据库配置访问用户

MariaDB [mysql]> grant process on *.* to 'clustercheckuser'@'%' identified by 'clustercheckpassword!';

验证脚本是否正常

[root@miwifi-r1cm-srv ~]# sh /usr/bin/clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.

手动查询下服务是否可以使用

[root@miwifi-r1cm-srv xinetd.d]# netstat -alpn |grep 19200
tcp 0 0 192.168.31.187:19200 0.0.0.0:* LISTEN 11449/xinetd
tcp 0 0 192.168.31.187:19200 192.168.31.187:59248 TIME_WAIT -

[root@miwifi-r1cm-srv xinetd.d]# telnet 192.168.31.187 19200
Trying 192.168.31.187...
Connected to 192.168.31.187.
Escape character is '^]'.
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40

Percona XtraDB Cluster Node is synced.
Connection closed by foreign host.

HAProxy使用syslog作用日志记录,需要额外安装与配置

[root@miwifi-r1cm-srv sbin]# yum –y install rsyslog

针对haproxy进行日志参数配置

修改

vi /etc/rsyslog.conf

# Save boot messages also to boot.log
local7.* /var/log/boot.log
local0.* /usr/local/haproxy/logs/haproxy.log

配置完成后重启rsyslog服务

启动haproxy

cd /usr/local/haproxy/sbin
./haproxy -f /usr/local/haproxy/haproxy.cfg

访问 http://192.168.31.187/haproxy/stats

admin/admin

回头把相关的配置在 212 服务器上再配置一次,即可准备安装keeplived,上篇完。

参考文档

这个比较赞-->MySQL-Galera Cluster With HAproxy  http://www.sebastien-han.fr/blog/2012/04/08/mysql-galera-cluster-with-haproxy/

http://my.oschina.net/anthonyyau/blog/277450

Linux守护进程(init.d和xinetd) http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html

【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇的更多相关文章

  1. Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)

    (注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一  搭建环境: 1 Ubuntu16.04版本(系 ...

  2. Redis Cluster集群搭建<原>

    一.环境配置 一台window 7上安装虚拟机,虚拟机中安装的是centos系统. 二.目标     Redis集群搭建的方式有多种,根据集群逻辑的位置,大致可以分为三大类:基于客户端分片的Redis ...

  3. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  4. 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

    Hello 大家好,我是TANZAME,我们又见面了.今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品. 随着业务增长,线上环境的QPS暴增,自然而然将当前的单 ...

  5. Docker MariaDB 10.3 Galera Cluster 集群同步复制 多主 Docker Haproxy 负载均衡

    mariadb 现有动态列,支持json格式存储,类似mongodb的bson,但是操作能力较为尴尬,中间件有spider,我非常感兴趣的一个东西 关于spider 这里有一篇很好的博文,有时间一定得 ...

  6. MongoDB3.X单机及shading cluster集群的权限管理(基于3.4.5)

    mongodb集群的权限管理分为两部分,一部分是最常用的Role-Based Access Control,也就是用户名密码方式,这种验证方式一般出现在单机系统,或者集群中client端连接Mongo ...

  7. 基于keepalived搭建MySQL的高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  8. centos7 mysql cluster集群搭建基于docker

    1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...

  9. EasyDSS RTMP流媒体服务器基于RTMP拉模式和转推模式搭建公网全平台全终端直播集群的方案

    近期,我们有一位EasyDSS流媒体用户在需求中提出:如何搭建一个用户量巨大的讲座直播,提供给普通用户免费观看,每天上午和下午分别有几场讲座同时直播,持续几天时间. 推荐方案 ★ 由于甲方是中国移动运 ...

随机推荐

  1. IE11之F12 Developer Tools--DOM Explorer

    使用DOM Explorer工具查看网页的DOM状态.检查HTML结构和CSS样式,并测试更改以解决显示问题.这可以在元素位置错误或行为异常时帮助你诊断问题,然后解决问题. DOM Explorer图 ...

  2. (旧)子数涵数·DW——网页制作的流程

    PS:这是我很早以前的一个废掉的项目. 当时用的还是table排版,现在基本都是div了吧. 这个项目前段时间,我还抢救过一次,后来还是放弃了. 先行.网页制作的流程分为哪些呢? 一.网站策划(当时, ...

  3. sphinx使用随笔

    为什么需要进行全文搜索呢? 一个表中有a.b.c多个字段.我们使用sql进行like搜索的时候,往往只能匹配某个字段.或者是这样的形式:a LIKE “%关键词%”or b LIKE “关键词” 这样 ...

  4. [经验][JS]如何观察网站,进而模仿

    应该存在着一类人: 1.看到美丽的网站时,就会F12,看看他是怎么实现的 2.看到网站数据是自己需要的时候,就会F12,看看他是怎么拿到数据的 3.看到网站一个有趣的模块时,,就会F12,看看他是怎么 ...

  5. SharePoint 2013 开启访问请求

    1.通常,我们进入SharePoint 2013站点,如果没权限会提示该站点未被共享,而没有切换账号或者申请访问,实在是很流氓:其实,SharePoint为我们提供了访问请求页面,但是可能需要手动开启 ...

  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q73-Q76)

    Question 73You create a Web Part that calls a function named longCall.You discover that longCall tak ...

  7. Android 设计模式一:EIT造型

    前言:首先不提造型,我们先来学习公式. 思绪回到于十七世纪中,牛顿提出了简单公式:F=ma:让人们能轻易理解物体运动的复杂<关系>. 再如,于二十世纪初,爱因斯坦发表了简单公式:E=MC平 ...

  8. Docker: 解决Centos 7中Permission Denied的问题

    当用docker -v挂载volume后,会出现Permission Denied的问题,这有时是因为SeLinux导致的.解决方法如下: chcon -Rt svirt_sandbox_file_t ...

  9. Android用路径api在内部存储读写文件

    复制并修改原有项目 复制之前创建的项目CC+CV操作 需要改动的地方: * 项目名字 * 应用包名 * R文件重新导包 接着修改件/AndroidManifest.xml中的包名:package=&q ...

  10. Fragments之间的交互(实现参数传递)

    Fragments之间的交互(实现参数传递) 日常开发中,通常Fragments之间可能需要交互,比如基于用户事件改变Fragment的内容.所有Fragment之间的交互需要通过他们关联的Activ ...