mysql pxc高可用 单主机 多主机部署(一)

pxc学习流程

mysql pxc高可用 单主机 多主机部署(一)
mysql pxc 高可用多主机离线部署(二)
mysql pxc高可用离线部署(三)

mysql pxc高可用

一、pxc介绍

PXC(Percona XtraDB Cluster)是一个开源的MySQL高可用解决方案。他将Percona Server和XtraBackup与Galera库集成,以实现同步多主复制。基于Galera的高可用方案主要有MariaDB Galera Cluster和Percona XtraDB Cluster,目前PXC架构在生产线上用的更多而且更成熟一些。PXC相比那些传统的基于主从模式的集群架构MHA和双主,Galera Cluster 最突出的特点就是解决了诟病已久的复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,它们互相的关系是对等的。本身Galera Cluster也是一种多主架构。PXC是在存储引擎层实现的同步复制,而非异步复制,所以其数据的一致性是相当高的。
在这里插入图片描述

PXC优缺点

优点:

  • 实现了MySQL集群的高可用性和数据的强一致性;
  • 完成了真正的多节点读写的集群方案;
  • 改善了主从复制延迟问题,基本上达到了实时同步;
  • 新加入的节点可以自动部署,无需提交手动备份,维护方便;
  • 由于是多节点写入,所以DB故障切换很容易。

缺点:

  • 加入新节点时开销大。添加新节点时,必须从现有节点之一复制完整数据集。如果是100GB,则复制100GB。
  • 任何更新的事务都需要全局验证通过,才会在其他节点上执行,集群性能受限于性能最差的节点,也就说常说的木桶定律。
  • 因为需要保证数据的一致性,PXC采用的实时基于存储引擎层来实现同步复制,所以在多节点并发写入时,锁冲突问题比较严重。
  • 存在写扩大的问题。所以节点上都会发生写操作,对于写负载过大的场景,不推荐使用PXC。
  • 只支持InnoDB存储引擎。

二、PXC安装

本文使用docker进行安装,主机间通过docker swarm网络进行通讯。不了解Docker的请自行先网上看以下教程入门一下。这里没有深入的Docker知识,只要跟着命令做就可以了。

三台主机都安装好了docker:

虚拟ip主机IP
node1192.168.56.100
192.168.56.120node2192.168.56.101
node3192.168.56.102

1. 在3台主机上配置swarm

  • 3台主机安装docker
curl -sSL https://get.daocloud.io/docker | sh
  • 在node1上执行:
docker swarm init --advertise-addr 192.168.56.100

返回类似以下内容:

docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377

*重新查看token

在node1 执行

docker swarm join-token worker

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0EsmIBH-1642384264043)(imgs/image-20220111093055426.png)]

  • 在node2、node3上执行上面的返回结果:
shell docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377
  • 在node1 查看加入情况
docker node ls [查看集群节点]
docker node rm 节点 【强制移除运行中的节点】
docker swarm leave -f  [强制解散当前的swarm集群]

在这里插入图片描述

2. 创建swarm网络

在node1上执行以下命令:

docker network create -d overlay --attachable pxc_swarm

在node1上查看网络:

docker network ls

在这里插入图片描述

3. 下载PXC镜像

这里介绍PXC5.7.27版本的安装,我们拉取docker镜像文件:

docker pull percona/percona-xtradb-cluster:5.7

4. 创建文件

在3台服务器上分别执行以下命令:

mkdir -p /home/pxc/vol-pxc-n1 && chmod +777 /home/pxc/vol-pxc-n1 
mkdir -p /home/pxc/vol-pxc-n2 && chmod +777 /home/pxc/vol-pxc-n2 
mkdir -p /home/pxc/vol-pxc-n3 && chmod +777 /home/pxc/vol-pxc-n3 

5. 安装第一个节点

首先我们在node1上安装启动第一个节点,并且注意要在第一个节点启动成功后再安装启动其他节点,否则会导致失败。

cd /home/pxc && vi /home/pxc/docker-compose.yml

version: '3'
services:
  node1:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node1
    container_name: node1
    restart: always
    networks:
      - pxc_swarm
    environment:
      - CLUSTER_NAME=scsdm_pxc
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n1:/var/lib/mysql
    privileged: true

networks:
  pxc_swarm:
    external: true
docker run -d -v /home/pxc/vol-pxc-n1:/var/lib/mysql --name node1 -e CLUSTER_NAME=scsdm_pxc -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

注意自行修改密码,不要使用过于简单的密码。参数说明:

CLUSTER_NAME: 集群名称
MYSQL_ROOT_PASSWORD: root密码
MYSQL_DATABASE: 默认初始化数据库名
MYSQL_USER: 默认初始化账号
MYSQL_PASSWORD: 默认初始化密码

docker logs -f node

出现这个代表完全启动成功

在这里插入图片描述

6. 加入其他节点

加入node2(192.168.56.101):

  • 我们直接运行docker-compose up会报错,内容大致为找不到指定网络。这是由于之前在nodeDB上面创建的network不会自动在新的node上显示(官方说法),所以我们需要先在nodeService上面运行一个container,让其加入网络“pxc_swarm”,例如:

cd /home/pxc && vi /home/pxc/docker-compose.yml

version: '3'
services:
  node2:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node2
    container_name: node2
    restart: always
    networks:
      - pxc_swarm
    environment:
      - CLUSTER_NAME=scsdm_pxc
      - CLUSTER_JOIN=node1
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n2:/var/lib/mysql
    privileged: true

networks:
  pxc_swarm:
    external: true
docker run -d -v /home/pxc/vol-pxc-n2:/var/lib/mysql --name node2 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

加入node3(192.168.56.102):

cd /home/pxc && vi /home/pxc/docker-compose.yml

version: '3'
services:
  node3:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node3
    container_name: node3
    restart: always
    networks:
      - pxc_swarm
    environment:
      - CLUSTER_NAME=scsdm_pxc
      - CLUSTER_JOIN=node1
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n3:/var/lib/mysql
    privileged: true


networks:
  pxc_swarm:
    external: true
docker run -d -v /home/pxc/vol-pxc-n3:/var/lib/mysql --name node3 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

节点状态以及含义:

节点在集群中,会因新节点的加入或故障,同步失效等而发生状态的切换,下面列举出这些状态的含义: open:节点启动成功,尝试连接到集群。 primary:节点已在集群中,在新节点加入集群时,选取donor进行数据同步时会产生式的状态。 joiner:节点处于等待接收同步数据文件的状态。 joined:节点已完成了数据同步,尝试保持和集群中其它节点进度- -致。 synced:节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。 doner:节点处于为新加入节点提供全星数据时的状态。

三、PXC中的重要配置参数

搭建PXC过程中,需要在my.cnf中设置以下参数:

  • wsrep cluster _name:指定集群的逻辑名称,对于集群中的所有节点,集群名称必须相同。
  • wsrep_ cluster _address: 指定集群中各节点的地址
  • wsrep node name:指定当前节点在集群中的逻辑名称
  • wsrep node address: 指定当前节点的IP地址
  • wsrep_ provider: 指定Galera库的路径
  • wsrep sst _method: 模式情况下,PXC使用XtraBackup进行SST传输。 强烈建议该参数指为xtrabackup-v2
  • wsrep sst *auth: 指定认证凭证SST作为:。 必须在引导第一个节点后创建此用户并赋予
  • 必要的权限。
  • pxc_ _strict mode:严格模式,官方建议该参数值为ENFORCING。

在PXC中还有一个特别重要的模块就是Gcache。它的核心功能就是每个节点缓存当前最新的写集。如果有新节点加入集群,就可以把新数据等待增星传递给新节点,而不需要再使用SST方式了。这样可以让节点更快地加入 集群中。

GCache模块涉及了如下参数:

  • gcache.size代表用来缓存写集增量信息的大小。它的默认大小是128MB,通过wsrep provider options变量参数设置。建议调整为2G 4G范围,足够的空间便于缓存更多的增量信息。
  • gcache.mem_ size代表Gcache中内存缓存的大小,适度调大可以提高整个集群的性能。
  • gcache. page_ size可以理解为如果内存不够用(Gcache不足),就直接将写集写入到磁盘文件中。

PXC集群状态监控

在集群搭建好之后,可以通过如下状态变量’%wsrep%'来查看集群中各节点的状态,下面例举出几个重要的参数,便于发现问题。

  • wsrep local**state uid: 集群中所有节点的该状态值应该是相同的,如果有不同值的节点,说明其没有加入集群。

  • wsrep_ last _committed:最后提交的事务数目。

  • wsrep cluster _size: 当前集群中的节点数量。

  • wsrep_ cluster _status: 集群组成的状态。如果不是"Primary", 说明出现脑裂现象。

  • wsrep local state:当前节点状态,值为4表示正常。该状态有四个值:

    • joining:表示节点正在加入集群
    • doner:节点处于为新加入节点提供全量数据时的状态。
    • joined:当前节点已成功加入集群。
    • synced:当前节点与集群中各节点是同步状态。
    • wsrep_ ready: 为ON表示当前节点可以正常提供服务。为OFF, 则该节点可能发生脑裂或网络问题导致。

四、MySQL迁移到PXC

数据是无价的,操作前请一定要备份!操作前请一定要备份!!操作前请一定要备份!!!

MySQL迁移到集群方法有以下三种:

  1. 使用mysqldump导出SQL文件后,直接导入到已经安装配置好的PXC集群里。此方法对导入前后的数据库版本没有要求必须一致,但是速度比较慢。
  2. 使用percona xtrabackup进行备份恢复,效率高但是要求数据库版本一致。
  3. 原生MySQL或者Percona Server迁移到pxc,可以直接停掉原来的mysql,直接使用原先数据库目录安装pxc,启动后会自动完成迁移工作。再次提醒一定要备份!

五、Haproxy前端

根据前面的安装步骤,我们已经拥有了一个完整的3台PXC集群,因为3台都是可以读写的数据库,因此程序连接任意一台都可以。但是没有办法进行负载均衡,甚至如果程序连接的那台服务器数据库挂掉,也不能进行自动切换。

因此我们再假设一个Haproxy作为代理,应用程序连接的是Haproxy,通过haproxy策略分布到3台PXC数据库。

1. 3台主机 Haproxy前端 编辑haproxy配置文件

mkdir -p /home/pxc/haproxy && chmod +777 /home/pxc/haproxy
vi /home/pxc/haproxy/haproxy.cfg

haproxy.cfg内容如下:

global
    maxconn     4000

defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option  tcplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
######## 监控界面配置 #################	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
    mode        http
	#URI相对地址
    stats uri   /dbs
	#统计报告格式
    stats realm     Global\ statistics
	#登陆帐户信息
    stats auth  admin:admin
    # 隐藏HAProxy的版本号
    stats hide-version
    # 管理界面,如果认证成功了,可通过webui管理节点
    stats admin if TRUE
    # 统计页面自动刷新时间
    stats  refresh  30s
listen  mysql
        bind 0.0.0.0:3306
        mode tcp
        #负载均衡算法(轮询算法)
	    #轮询算法:roundrobin
	    #权重算法:static-rr
	    #最少连接算法:leastconn
	    #请求源IP算法:source 
        balance  roundrobin
        # 监控检查需要一个无密码的账号
        # mysql健康检查  haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)
	    # option mysql-check  user haproxy 
        server s1 node1:3306 check
        server s2 node2:3306 check
        server s3 node3:3306 check
	    # 使用keepalive检测死链
        option tcpka
        

2. 启动haproxy服务

在node1服务器上运行以下命令:

docker run -it -d -p 3306:3306 -p 8888:8888  -v /home/pxc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name haproxy01 --net=pxc_swarm --privileged --restart=always  haproxy:alpine

在node2服务器上运行以下命令:

docker run -it -d -p 3306:3306 -p 8888:8888  -v /home/pxc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name haproxy02 --net=pxc_swarm --privileged --restart=always  haproxy:alpine

在node3服务器上运行以下命令:

docker run -it -d -p 3306:3306 -p 8888:8888  -v /home/pxc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name haproxy03 --net=pxc_swarm --privileged --restart=always  haproxy:alpine

3.安装keepalive 3台都安装

安装依赖

yum install -y openssl openssl-devel

离线 下载安装包

yum install --downloadonly --downloaddir=/root/opensslPackage openssl openssl-devel

安装

rpm -Uvh /root/opensslPackage/*

安装keepalive

mkdir -p /home/pxc/keepalived 
curl -o /home/pxc/keepalived/keepalived-2.2.4.tar.gz https://keepalived.org/software/keepalived-2.2.4.tar.gz
tar -zxf /home/pxc/keepalived/keepalived-2.2.4.tar.gz -C /home/pxc/keepalived/ 
cd /home/pxc/keepalived/keepalived-2.2.4 
./configure --sysconf=/etc --prefix=/usr/local make && make install

增加检查脚本

vi /home/pxc/package/installKeepalived/check-haproxy.sh

#!/bin/bash
count=`netstat -apn | grep 3306 | wc -l`
if [ $count -gt 0 ]; then
    exit 0
else
    exit 1
fi

修改 keepalive配置

vi /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_2
   script_user root                    # 脚本执行用户
   enable_script_security              # 开启脚本安全权限
}

vrrp_script checkhaproxy
{
    script "/home/pxc/package/installKeepalived/check-haproxy.sh"  # 这个地址写的事容器内脚本路径
    interval 2
    weight -30
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    
    virtual_ipaddress {
      # 需要修改成对应的虚拟ip
        192.168.56.120
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        checkhaproxy
    }
}

启动

service keepalived start

设置开机自启

chkconfig keepalived on
systemctl list-unit-files | grep keepalived

查看日志

tail -f /var/log/messages

可以通过连接192.168.56.120 3306进行数据库操作了

在这里插入图片描述

六、测试

1.停止node1容器(192.168.56.100)
docker stop node1

查看haproxy日志(192.168.56.100)

docker logs -f haproxy01

在这里插入图片描述

测试数据库,依然能连接

2.停止node2容器(192.168.56.101)
docker stop node2

查看haproxy日志(192.168.56.100)

docker logs -f haproxy01

在这里插入图片描述

测试数据库,依然能连接

3.停止node3容器(192.168.56.102)
docker stop node3

查看haproxy日志(192.168.56.100)

docker logs -f haproxy01

在这里插入图片描述

测试数据库,不能连接

4.重启node1
docker start node1

查看日志

docker logs -f node1

发现报错了

在这里插入图片描述

修改配置文件edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

在这里插入图片描述

修改后

在这里插入图片描述

再次重启node1

在这里插入图片描述

成功

重启node2,node3,haproxy01

恢复数据库访问

精简步骤

跨主机部署pxc

本文使用docker进行安装,主机间通过docker swarm网络进行通讯。不了解Docker的请自行先网上看以下教程入门一下。这里没有深入的Docker知识,只要跟着命令做就可以了。

三台主机都安装好了docker:

主机IP
node1192.168.56.100
node2192.168.56.101
node3192.168.56.102

1. 在3台主机上配置swarm

  • 3台主机安装docker
curl -sSL https://get.daocloud.io/docker | sh
  • 在node1上执行:
docker swarm init --advertise-addr 192.168.56.100

返回类似以下内容:

docker swarm join --token SWMTKN-1-614xi9dvksycykobgifxb4pgopc1wwgczwqct5wqkq8zao6tmx-0ds4jj3ozclrr2wukcaoakxso 192.168.56.100:2377
  • 在node2、node3上执行上面的返回结果:
shell docker swarm join --token SWMTKN-1-2c2xopn2rld8oltcof24sue370681ijhbo3bwcqarjlhq9lkea-2g53o5qn2anre4j9puv4hecrn 192.168.0.101:2377

2. 创建swarm网络

在node1上执行以下命令:

docker network create -d overlay --attachable pxc_swarm

3. 下载PXC镜像

这里介绍PXC5.7.27版本的安装,我们拉取docker镜像文件:

docker pull percona/percona-xtradb-cluster:5.7.27

4. 创建文件

在3台服务器上分别执行以下命令:

mkdir -p /home/pxc/vol-pxc-n1 && chmod +777 /home/pxc/vol-pxc-n1 
mkdir -p /home/pxc/vol-pxc-n2 && chmod +777 /home/pxc/vol-pxc-n2 
mkdir -p /home/pxc/vol-pxc-n3 && chmod +777 /home/pxc/vol-pxc-n3 

5. 安装第一个节点

node1执行

docker run -d -v /home/pxc/vol-pxc-n1:/var/lib/mysql --name node1 -e CLUSTER_NAME=scsdm_pxc -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

注意自行修改密码,不要使用过于简单的密码。参数说明:

CLUSTER_NAME: 集群名称
MYSQL_ROOT_PASSWORD: root密码
MYSQL_DATABASE: 默认初始化数据库名
MYSQL_USER: 默认初始化账号
MYSQL_PASSWORD: 默认初始化密码

6. 加入其他节点

node2:

docker run -d -v /home/pxc/vol-pxc-n2:/var/lib/mysql --name node2 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

node3:

docker run -d -v /home/pxc/vol-pxc-n3:/var/lib/mysql --name node3 -e CLUSTER_NAME=scsdm_pxc -e CLUSTER_JOIN=node1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=scsdm -e MYSQL_USER=scsdm -e MYSQL_PASSWORD=scsdm123 --net=pxc_swarm --privileged --restart=always  percona/percona-xtradb-cluster:5.7.27

7.Haproxy前端 编辑haproxy配置文件

mkdir -p /home/pxc/haproxy && chmod +777 /home/pxc/haproxy
vi /home/pxc/haproxy/haproxy.cfg

haproxy.cfg内容如下:

global
    maxconn     4000

defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option  tcplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
######## 监控界面配置 #################	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
    mode        http
	#URI相对地址
    stats uri   /dbs
	#统计报告格式
    stats realm     Global\ statistics
	#登陆帐户信息
    stats auth  admin:admin
    # 隐藏HAProxy的版本号
    stats hide-version
    # 管理界面,如果认证成功了,可通过webui管理节点
    stats admin if TRUE
    # 统计页面自动刷新时间
    stats  refresh  30s
listen  mysql
        bind 0.0.0.0:3306
        mode tcp
        #负载均衡算法(轮询算法)
	    #轮询算法:roundrobin
	    #权重算法:static-rr
	    #最少连接算法:leastconn
	    #请求源IP算法:source 
        balance  roundrobin
        # 监控检查需要一个无密码的账号
        # mysql健康检查  haproxy为mysql登录用户名(需要在实体数据有这个账户,且无密码)
	    # option mysql-check  user haproxy 
        server s1 node1:3306 check
        server s2 node2:3306 check
        server s3 node3:3306 check
	    # 使用keepalive检测死链
        option tcpka
        
        
        

8. 启动haproxy服务

在3台服务器上分别运行以下命令:

docker run -it -d -p 3306:3306  -v /home/pxc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg --name haproxy01 --net=pxc_swarm --privileged --restart=always haproxy:alpine

9.安装keepalive 3台都安装

安装依赖

yum install -y openssl openssl-devel

离线 下载安装包

yum install --downloadonly --downloaddir=/root/opensslPackage openssl openssl-devel

安装

rpm -Uvh /root/opensslPackage/*

安装keepalive

mkdir -p /home/pxc/keepalived 
curl -o /home/pxc/keepalived/keepalived-2.2.4.tar.gz https://keepalived.org/software/keepalived-2.2.4.tar.gz
tar -zxf /home/pxc/keepalived/keepalived-2.2.4.tar.gz -C /home/pxc/keepalived/ 
cd /home/pxc/keepalived/keepalived-2.2.4 
./configure --sysconf=/etc --prefix=/usr/local make && make install

增加检查脚本

vi /home/pxc/package/installKeepalived/check-haproxy.sh

#!/bin/bash
count=`netstat -apn | grep 3306 | wc -l`
if [ $count -gt 0 ]; then
    exit 0
else
    exit 1
fi

修改 keepalive配置

vi /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_2
   script_user root                    # 脚本执行用户
   enable_script_security              # 开启脚本安全权限
}

vrrp_script checkhaproxy
{
    script "/home/pxc/package/installKeepalived/check-haproxy.sh"  # 这个地址写的事容器内脚本路径
    interval 2
    weight -30
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    
    virtual_ipaddress {
      # 需要修改成对应的虚拟ip
        192.168.56.120
    }

    authentication {
        auth_type PASS
        auth_pass password
    }

    track_script {
        checkhaproxy
    }
}

启动

keepalived

10. 连接数据库

可以通过连接192.168.56.120 3306进行数据库操作了

单机部署pxc

1.安装docker

curl -sSL https://get.daocloud.io/docker | sh

2.安装docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 2>&1 | tee -a ${CURRENT_DIR}/install.log
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose -version

3.创建文件

mkdir -p /home/pxc/vol-pxc-n1 && chmod +777 /home/pxc/vol-pxc-n1 
mkdir -p /home/pxc/vol-pxc-n2 && chmod +777 /home/pxc/vol-pxc-n2 
mkdir -p /home/pxc/vol-pxc-n3 && chmod +777 /home/pxc/vol-pxc-n3 
mkdir -p /home/pxc/haproxy && chmod +777 /home/pxc/haproxy

4.编写配置文件

vi /home/pxc/haproxy/haproxy.cfg

haproxy.cfg内容如下:

global
    maxconn     4000

defaults
        log     global
        log 127.0.0.1 local3
        mode    http
        option  tcplog
        option  dontlognull
        retries 10
        option redispatch
        maxconn         2000
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
######## 监控界面配置 #################	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:8888
	#访问协议
    mode        http
	#URI相对地址
    stats uri   /dbs
	#统计报告格式
    stats realm     Global\ statistics
	#登陆帐户信息
    stats auth  admin:admin
    # 隐藏HAProxy的版本号
    stats hide-version
    # 管理界面,如果认证成功了,可通过webui管理节点
    stats admin if TRUE
    # 统计页面自动刷新时间
    stats  refresh  30s
listen  mysql
        bind 0.0.0.0:3306
        mode tcp
        #负载均衡算法(轮询算法)
	    #轮询算法:roundrobin
	    #权重算法:static-rr
	    #最少连接算法:leastconn
	    #请求源IP算法:source 
        balance  roundrobin
	    option mysql-check
        server s1 node1:3306 check
        server s2 node2:3306 check
        server s3 node3:3306 check
	    # 使用keepalive检测死链
        option tcpka
        
        

5.编写docker-compose.yml文件

cd /home/pxc && vi /home/pxc/docker-compose.yml

version: '3'
services:
  node1:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node1
    container_name: node1
    restart: always
    environment:
      - CLUTER_NAME=scsdm_pxc
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n1:/var/lib/mysql
    privileged: true
  node2:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node2
    container_name: node2
    restart: always
    depends_on:
      - node1
    environment:
      - CLUTER_NAME=scsdm_pxc
      - CLUSTER_JOIN=node1
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n2:/var/lib/mysql
    privileged: true

  node3:
    image: percona/percona-xtradb-cluster:5.7.27
    hostname: node3
    container_name: node3
    restart: always
    depends_on:
      - node1
    environment:
      - CLUTER_NAME=scsdm_pxc
      - CLUSTER_JOIN=node1
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=scsdm
      - MYSQL_USER=scsdm
      - MYSQL_PASSWORD=scsdm123
    volumes:
      - /home/pxc/vol-pxc-n3:/var/lib/mysql
    privileged: true

  haproxy:
    image: haproxy:alpine
    hostname: haproxy
    container_name: haproxy
    restart: always
    depends_on:
      - node1
      - node2
      - node3
    ports:
      - "3306:3306"
    volumes:
      - /home/pxc/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    privileged: true

6.启动docker-compose

docker-compose up -d

7.修改文件

修改配置文件edit the grastate.dat file manually and set safe_to_bootstrap to 1 .

在这里插入图片描述

修改后

在这里插入图片描述

8.重启docker-compose

docker-compose down
docker-compose up -d

7. 连接数据库

可以通过连接192.168.56.100 3306进行数据库操作了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuhm~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值