返回顶部
首页 > 资讯 > 数据库 >PXC+haproxy+keepalived环境搭建
  • 432
分享到

PXC+haproxy+keepalived环境搭建

2024-04-02 19:04:59 432人浏览 安东尼
摘要

环境准备: 三节点PXC,部署过程见:Http://blog.itpub.net/30135314/viewspace-2219505/ 192.168.8.51 192.

环境准备:

三节点PXC,部署过程见:Http://blog.itpub.net/30135314/viewspace-2219505/

192.168.8.51

192.168.8.52

192.168.8.53 

haproxy+keepalived

192.168.8.59

192.168.8.61

工具包版本:

percona-xtrabackup-2.4.11-linux-x86_64.libGCrypt145.tar.gz

Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101.tar.gz

keepalived-2.0.5.tar.gz

haproxy-1.8.9.tar.gz

本文只介绍PXC+haproxy+keepalived环境搭建过程,各个工具包安装过程略。

一、添加集群检查用户


grant process on *.* to 'clustercheckuser'@'localhost' identified by 'Mysql';
flush privileges;
select user,host from mysql.user;

二、修改clustercheck脚本


#!/bin/bash 
#
# Script to make a proxy (ie HAProxy) capable of monitoring Percona XtraDB Cluster nodes properly
#
# Authors:
# Raghavendra Prabhu <raghavendra.prabhu@percona.com>
# Olaf van Zandwijk <olaf.vanzandwijk@nedap.com>
#
# Based on the original script from Unai Rodriguez and Olaf (https://GitHub.com/olafz/percona-clustercheck)
#
# Grant privileges required:
# GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassWord!';
if [[ $1 == '-h' || $1 == '--help' ]];then
    echo "Usage: $0 <user> <pass> <available_when_donor=0|1> <log_file> <available_when_readonly=0|1> <defaults_extra_file>"
    exit
fi
MYsql_USERNAME="${1-clustercheckuser}" 
MYSQL_PASSWORD="${2-mysql}" 
AVAILABLE_WHEN_DONOR=${3:-0}
ERR_FILE="${4:-/dev/null}" 
AVAILABLE_WHEN_READONLY=${5:-1}
DEFAULTS_EXTRA_FILE=${6:-/mysql/data/3306/my.cnf}
#Timeout exists for instances where mysqld may be hung
TIMEOUT=10
EXTRA_ARGS=""
if [[ -n "$MYSQL_USERNAME" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --user=${MYSQL_USERNAME}"
fi
if [[ -n "$MYSQL_PASSWORD" ]]; then
    EXTRA_ARGS="$EXTRA_ARGS --password=${MYSQL_PASSWORD}"
fi
if [[ -r $DEFAULTS_EXTRA_FILE ]];then 
    MYSQL_CMDLINE="/mysql/app/mysql/bin/mysql --defaults-extra-file=$DEFAULTS_EXTRA_FILE -nNE --connect-timeout=$TIMEOUT \
                    ${EXTRA_ARGS}"
else 
    MYSQL_CMDLINE="/mysql/app/mysql/bin/mysql -nNE --connect-timeout=$TIMEOUT ${EXTRA_ARGS}"
fi
#
# PerfORM the query to check the wsrep_local_state
#
WSREP_STATUS=($($MYSQL_CMDLINE -e "SHOW GLOBAL STATUS LIKE 'wsrep_%';"  \
    2>${ERR_FILE} | grep -A 1 -E 'wsrep_local_state$|wsrep_cluster_status$' \
    | sed -n -e '2p'  -e '5p' | tr '\n' ' '))
 
if [[ ${WSREP_STATUS[1]} == 'Primary' && ( ${WSREP_STATUS[0]} -eq 4 || \
    ( ${WSREP_STATUS[0]} -eq 2 && $AVAILABLE_WHEN_DONOR -eq 1 ) ) ]]
then 
    # Check only when set to 0 to avoid latency in response.
    if [[ $AVAILABLE_WHEN_READONLY -eq 0 ]];then
        READ_ONLY=$($MYSQL_CMDLINE -e "SHOW GLOBAL VARIABLES LIKE 'read_only';" \
                    2>${ERR_FILE} | tail -1 2>>${ERR_FILE})
        if [[ "${READ_ONLY}" == "ON" ]];then 
            # Percona XtraDB Cluster node local state is 'Synced', but it is in
            # read-only mode. The variable AVAILABLE_WHEN_READONLY is set to 0.
            # => return HTTP 503
            # shell return-code is 1
            echo -en "HTTP/1.1 503 Service Unavailable\r\n" 
            echo -en "Content-Type: text/plain\r\n" 
            echo -en "Connection: close\r\n" 
            echo -en "Content-Length: 43\r\n" 
            echo -en "\r\n" 
            echo -en "Percona XtraDB Cluster Node is read-only.\r\n" 
            sleep 0.1
            exit 1
        fi
    fi
    # Percona XtraDB Cluster node local state is 'Synced' => return HTTP 200
    # Shell return-code is 0
    echo -en "HTTP/1.1 200 OK\r\n" 
    echo -en "Content-Type: text/plain\r\n" 
    echo -en "Connection: close\r\n" 
    echo -en "Content-Length: 40\r\n" 
    echo -en "\r\n" 
    echo -en "Percona XtraDB Cluster Node is synced.\r\n" 
    sleep 0.1
    exit 0
else 
    # Percona XtraDB Cluster node local state is not 'Synced' => return HTTP 503
    # Shell return-code is 1
    echo -en "HTTP/1.1 503 Service Unavailable\r\n" 
    echo -en "Content-Type: text/plain\r\n" 
    echo -en "Connection: close\r\n" 
    echo -en "Content-Length: 57\r\n" 
    echo -en "\r\n" 
    echo -en "Percona XtraDB Cluster Node is not synced or non-PRIM. \r\n" 
    sleep 0.1
    exit 1
fi

三、xinetd 守护进程(PXC所有节点)


mount /dev/cdrom /media
yum -y install xinetd
yum -y install telnet
echo "mysqlchk 9200/tcp #add mysqlchk" >> /etc/services

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 = /mysql/app/mysql/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
}

chmod u+x /etc/xinetd.d/mysqlchk

负载均衡节点测试PXC三个端口状态


[root@node2 bin]# telnet 192.168.8.51 9200
Trying 192.168.8.51...
Connected to 192.168.8.51.
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


global
log 127.0.0.1 local0 notice
#user haproxy
#group haproxy
daemon
#quiet
nbproc 1
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
retries 3
option dontlognull
option Redispatch
maxconn 2000
timeout queue 1m
timeout http-request 10s
timeout connect 10s
timeout server 1m
timeout client 1m
timeout http-keep-alive 10s
timeout check 10s
balance roundrobin
listen mysql_pxc_gwpt1_read
bind 192.168.8.98:3307
mode tcp
balance leastconn
stats hide-version
option httpchk
server node1 192.168.8.51:3306 check port 9200 inter 12000 rise 3 fall 3
server node2 192.168.8.52:3306 check port 9200 inter 12000 rise 3 fall 3
server node3 192.168.8.53:3306 check port 9200 inter 12000 rise 3 fall 3
listen mysql_pxc_gwpt1_write
bind 192.168.8.98:3308
mode tcp
balance leastconn
stats hide-version
option httpchk
server node1 192.168.8.51:3306 check port 9200 inter 12000 rise 3 fall 3
server node2 192.168.8.52:3306 check port 9200 inter 12000 rise 3 fall 3 backup
server node3 192.168.8.53:3306 check port 9200 inter 12000 rise 3 fall 3 backup
listen haproxy_stats
mode http
bind *:8888
option httplog
stats refresh 5s
stats uri /haproxy-stat
stats realm www.zdd.com moritor
stats realm Haproxy Manager
stats auth haproxy:haproxy

/etc/rc.d/init.d/haproxy stop
/etc/rc.d/init.d/haproxy start
systemctl stop keepalived
systemctl start keepalived

五、从负载均衡节点访问PXC进行测试


[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3308 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3308 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3308 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3308 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node2      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node3      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node1      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node2      |
+------------+
[root@slave2 haproxy]# mysql -uroot -pmysql -h292.168.8.98 -P3307 -e "select @@hostname;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| node3      |
+------------+

可以看到,端口3307监控的是读操作,三个节点为轮询机制,访问3308一直访问到node1,因为node2和node3为backup,只有node1宕掉时候才会被访问到。

六、查看haproxy控制台状态

http://192.168.8.98:8888/haproxy-stat

PXC+haproxy+keepalived环境搭建













您可能感兴趣的文档:

--结束END--

本文标题: PXC+haproxy+keepalived环境搭建

本文链接: https://lsjlt.com/news/46493.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PXC+haproxy+keepalived环境搭建
    环境准备: 三节点PXC,部署过程见:http://blog.itpub.net/30135314/viewspace-2219505/ 192.168.8.51 192....
    99+
    2024-04-02
  • 怎么用KeepAlived搭建MySQL高可用环境
    本篇内容介绍了“怎么用KeepAlived搭建MySQL高可用环境”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • MySQL主从配置及haproxy和keepalived搭建过程解析
    目录docker 小知识创建harpoxy、Keepalive 的容器下载MySQLMySQL主主配置172.17.0.2 MySQL 配置172.17.0.2的配置执行sql命令M...
    99+
    2024-04-02
  • 在流复制主备环境下怎么使用HAProxy搭建负载均衡环境
    这篇文章主要介绍“在流复制主备环境下怎么使用HAProxy搭建负载均衡环境”,在日常操作中,相信很多人在在流复制主备环境下怎么使用HAProxy搭建负载均衡环境问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • 详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
    主要思路: 简单说,实现mysql主备复制-->利用mycat实现负载均衡。 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定。 以下基于centos7操作系统进行演示。 架构图 以下是这次搭建的架构图。 ...
    99+
    2022-04-13
    详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
  • Mac环境python + selenium 环境搭建
    文章主要讲解Mac环境下如何搭建selenium环境。作者也是测试初学者,对selenium目前是一无所知的状态,希望从搭建环境开始对它逐步了解。 环境准备 本文采用的环境:• Python 3.7.3 PS: Mac环境会默认自带Pyth...
    99+
    2023-08-31
    python macos selenium 测试工具 单元测试
  • 搭建 LAMP 环境
    搭建 LAMP 环境一、环境介绍二、必装依赖软件三、编译安装 httpd-2.2.27四、二进制安装 mysql-5.5.33五、编译安装 PHP-5.3.27六、检测 apache与mysql apach...
    99+
    2024-04-02
  • LAMP环境搭建
    Lamp环境搭建:(将解压后的lamp目录移动到“/”目录下)一、准备工作 1、安装编译工具gcc、gcc-c++注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘做为yum源——1)...
    99+
    2024-04-02
  • 搭建Pytorch环境
    注:在测试是否安装好的过程中奉行缺啥补啥 注:本安装步骤中带水印的都是网图,对比自己的安装步骤进行就好了,没有水印的都是我自己已经安装好的结果图,因为在安装过程中也是反复碰壁就没有截图用网图代替 第一步:安装Anaconda 装anacon...
    99+
    2023-09-06
    pytorch python 人工智能
  • python3环境搭建
    安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-deve...
    99+
    2023-01-30
    环境
  • python环境搭建
    下载Python Python官网:https://www.python.org/ python文档下载:https://www.python.org/doc/   安装Python 单击链接进入Python官网,选择相应的系统版本进行下...
    99+
    2023-01-30
    环境 python
  • 01-环境搭建
    MTVmodel:模型负责业务数据对象与数据库对象template:模板,负责展示数据view:视图,负责业务逻辑MVCmodel:模型负责业务数据对象与数据库对象view:视图,负责与用户交互的页面controller:控制器,接收用户...
    99+
    2023-01-31
    环境
  • Python3 环境搭建
    Python3 环境搭建   这里介绍在windows、Linux(CentOS7)两个平台上,python开发环境的搭建方法  主要使用miniconda作为python的开发,测试环境一、windows平台上的python环境搭建  1...
    99+
    2023-01-31
    环境
  • Python搭建环境
         小白开启Python之门啦啦啦!!!!!      学习任何一种语言,第一步就是环境的搭建,小白python之旅开始啦!!!加油加油,抬头挺胸齐步走~~~     目前大家开发系统主要是,windows、Mac OS 、Linux...
    99+
    2023-01-31
    环境 Python
  • flutter 环境搭建
    一、简介 Flutter 是谷歌开发的一款开源、免费的,基于 Dart 语言的U1框架,可以快速在i0S和Android上构建高质量的原生应用。 它最大的特点就是跨平台和高性能。Dart是由谷歌,在2011 年开发的计算机编程语言,它可以被...
    99+
    2023-08-16
    flutter ios react native
  • 【Linux环境搭建】用云服务器搭建Linux环境
    目录 1. 我们为什么要学Linux 2. 云服务器购买 3. 远程连接云服务器 4. 如何创建新用户   5. 第一个Linux程序 总结: 写在最后: 1. 我们为什么要学Linux 作为一个程序员,你必须学好Linux,至于为什么...
    99+
    2023-09-04
    linux
  • Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
    1、组件及实现的功能 Keepalived:实现对Haproxy服务的高可用,并采用双主模型配置; Haproxy:实现对Nginx的负载均衡和读写分离; Nginx:实现对HTTP...
    99+
    2024-04-02
  • Lamp环境中如何搭建Mysql与PHP环境的搭建
    今天就跟大家聊聊有关  Lamp环境中如何搭建Mysql与PHP环境的搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 Lam...
    99+
    2024-04-02
  • LNMP环境搭建ZABBIX3.0
    1.LNMP环境搭建,这里就不详细介绍了,但是有几点需要注意    1)mysql如果是二进制或者编译安装,php编译的时候需要一下编译参数  &...
    99+
    2024-04-02
  • Fedora 12 环境搭建
    要在Fedora 12上搭建环境,您可以按照以下步骤进行操作:1. 更新系统:打开终端,执行以下命令来更新系统:```sudo yu...
    99+
    2023-09-28
    Fedora
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作