docker PXC集群+haproxy+keepalived搭建

2 篇文章 0 订阅
  1. 安装PXC镜像
docker pull percona/percona‐xtradb‐cluster:5.7.21
#强烈推荐安装5.7.21版本的PXC镜像,兼容性最好,在容器内可以执行apt-get安装各种程序包。最新  版的PXC镜像内,无法执行apt-get,也就没法安装热备份工具了
  1. 为PXC镜像改名
docker tag percona/percona‐xtradb‐cluster pxc
  1. 创建net1网段
docker network create ‐‐subnet=172.19.0.0/16 net1
  1. 创建5个数据卷
docker volume create ‐‐name v1 
docker volume create ‐‐name v2
docker volume create ‐‐name v3 
docker volume create ‐‐name v4 
docker volume create ‐‐name v5
  1. 创建备份数据卷(用于热备份数据)
docker volume create ‐‐name backup
  1. 创建5节点的PXC集群
    注意,每个MySQL容器创建之后,因为要执行PXC的初始化和加入集群等工作,耐心等待1分钟左右再用客户 端连接MySQL。另外,必须第1个MySQL节点启动成功,用MySQL客户端能连接上之后,再去创建其他MySQL节点。
#创建第1个MySQL节点
docker run ‐d ‐p 3306:3306 ‐e MYSQL_ROOT_PASSWORD=abc123456 ‐e CLUSTER_NAME=cluster1 ‐e XTRABACKUP_PASSWORD=abc123456 ‐v v1:/var/lib/mysql ‐v backup:/data ‐‐privileged ‐‐ name=node1 ‐‐net=net1 ‐‐ip 172.19.0.2 pxc
#创建第2个MySQL节点
docker run ‐d ‐p 3307:3306 ‐e MYSQL_ROOT_PASSWORD=abc123456 ‐e CLUSTER_NAME=cluster1‐e XTRABACKUP_PASSWORD=abc123456 ‐e CLUSTER_JOIN=node1 ‐v v2:/var/lib/mysql ‐v backup:/data ‐‐privileged ‐‐name=node2 ‐‐net=net1 ‐‐ip 172.19.0.3 pxc
#创建第3个MySQL节点
docker run ‐d ‐p 3308:3306 ‐e MYSQL_ROOT_PASSWORD=abc123456 ‐e CLUSTER_NAME=cluster1‐e XTRABACKUP_PASSWORD=abc123456 ‐e CLUSTER_JOIN=node1 ‐v v3:/var/lib/mysql ‐‐ privileged ‐‐name=node3 ‐‐net=net1 ‐‐ip 172.19.0.4 pxc
#创建第4个MySQL节点
docker run ‐d ‐p 3309:3306 ‐e MYSQL_ROOT_PASSWORD=abc123456 ‐e CLUSTER_NAME=cluster1‐e XTRABACKUP_PASSWORD=abc123456 ‐e CLUSTER_JOIN=node1 ‐v v4:/var/lib/mysql ‐‐ privileged ‐‐name=node4 ‐‐net=net1 ‐‐ip 172.19.0.5 pxc
#创建第5个MySQL节点
docker run ‐d ‐p 3310:3306 ‐e MYSQL_ROOT_PASSWORD=abc123456 ‐e CLUSTER_NAME=cluster1‐e XTRABACKUP_PASSWORD=abc123456 ‐e CLUSTER_JOIN=node1 ‐v v5:/var/lib/mysql ‐v backup:/data ‐‐privileged ‐‐name=node5 ‐‐net=net1 ‐‐ip 172.19.0.6 pxc

  1. 安装Haproxy镜像
docker pull haproxy
  1. 宿主机上编写Haproxy配置文件

vi /home/soft/haproxy/haproxy.cfg

#配置文件如下
global
#工作目录
chroot /usr/local/etc/haproxy
#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info log 127.0.0.1 local5 info
#守护进程运行daemon
defaults

log global
mode	http #日志格式
option	httplog
#日志中不记录负载均衡的心跳检测记录option	dontlognull
# 连 接 超 时 ( 毫 秒 ) timeout connect 5000 #客户端超时(毫秒) timeout client	50000 #服务器超时(毫秒) timeout server	50000

#监控界面
listen	admin_stats
#监控界面的访问的IP和端口bind	0.0.0.0:8888
#访问协议
mode	http #URI相对地址stats uri	/dbs #统计报告格式
stats realm	Global\ statistics #登陆帐户信息
stats auth	admin:abc123456 #数据库负载均衡
listen	proxy‐mysql #访问的IP和端口
bind	0.0.0.0:3306
#网络协议mode	tcp
#负载均衡算法(轮询算法) #轮询算法:roundrobin
#权重算法:static‐rr
#最少连接算法:leastconn #请求源IP算法:source
balance	roundrobin #日志格式
option	tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库  心跳检测
option	mysql‐check user haproxy

server	MySQL_1 172.19.0.2:3306 check weight 1 maxconn 2000
server	MySQL_2 172.19.0.3:3306 check weight 1 maxconn 2000
server	MySQL_3 172.19.0.4:3306 check weight 1 maxconn 2000
server	MySQL_4 172.19.0.5:3306 check weight 1 maxconn 2000
server	MySQL_5 172.19.0.6:3306 check weight 1 maxconn 2000 
#使用keepalive检测死链
option	tcpka

  1. 创建两个Haproxy容器
#创建第1个Haproxy负载均衡服务器
docker run ‐it ‐d ‐p 4001:8888 ‐p 4002:3306 ‐v
/home/soft/haproxy:/usr/local/etc/haproxy ‐‐name h1 ‐‐privileged ‐‐net=net1 ‐‐ip
172.19.0.7	haproxy
#进入h1容器,启动Haproxy docker exec ‐it h1 bash
haproxy ‐f /usr/local/etc/haproxy/haproxy.cfg
 #创建第2个Haproxy负载均衡服务器
docker run ‐it ‐d ‐p 4003:8888 ‐p 4004:3306 ‐v
/home/soft/haproxy:/usr/local/etc/haproxy ‐‐name h2 ‐‐privileged ‐‐net=net1 ‐‐ip
172.19.0.8	haproxy
#进入h2容器,启动Haproxy docker exec ‐it h2 bash
haproxy ‐f /usr/local/etc/haproxy/haproxy.cfg

  1. Haproxy容器内安装Keepalived,设置虚拟IP
    注意事项:云主机不支持虚拟IP,一般情况下公司的网络禁止创建虚拟IP, 还有宿主机一定要关闭 防火墙和SELINU
#进入h1容器
docker exec ‐it h1 bash 
#更新软件包
apt‐get update 
#安装VIM
apt‐get install vim 
#安装Keepalived
apt‐get install keepalived
#编辑Keepalived配置文件(参考下方配置文件) vim /etc/keepalived/keepalived.conf
#启动Keepalived
service keepalived start

#宿主机执行ping命令
ping 172.19.0.201

配置文件内容如下:

vrrp_instance	VI_1 { 
	state	MASTER 
	interface	eth0 
	virtual_router_id	51
	priority	100
	advert_int	1 
	authentication {
		auth_type	PASS 
		auth_pass	123456
	}
	virtual_ipaddress { 
		172.18.0.201
	}
}
#进入h2容器
docker exec ‐it h2 bash 
#更新软件包
apt‐get update
#安装VIM
apt‐get install vim 
#安装Keepalived
apt‐get install keepalived 
#编辑Keepalived配置文件
vim /etc/keepalived/keepalived.conf 
#启动Keepalived
service keepalived start
#宿主机执行ping命令
ping 172.18.0.201

配置文件内容如下:

vrrp_instance	VI_1 { 
	state	MASTER 
	interface	eth0 
	virtual_router_id	51
	priority	100
	advert_int	1 
	authentication {
		auth_type	PASS 
		auth_pass	123456
	}
	virtual_ipaddress { 
		172.18.0.201
	}
}
  1. 宿主机安装Keepalived,实现双机热备
#宿主机执行安装Keepalived yum ‐y install keepalived 
#修改Keepalived配置文件
vi /etc/keepalived/keepalived.conf 
#启动Keepalived
service keepalived start

Keepalived配置文件如下:

vrrp_instance VI_1 {
	state MASTER 
	interface ens33 
	virtual_router_id 51
	priority 100
	advert_int 1 
	authentication {
		auth_type PASS 
		auth_pass 1111
	}
	virtual_ipaddress { 
		192.168.99.150
	}
}

virtual_server 192.168.99.150 8888 {
	delay_loop 3 
	lb_algo rr 
	lb_kind NAT
	persistence_timeout 50
	protocol TCP
	real_server 172.18.0.201 8888 {
		weight 1
	}
}
virtual_server 192.168.99.150 3306 {
	delay_loop 3 lb_algo rr lb_kind NAT
	persistence_timeout 50
	protocol TCP
	real_server 172.18.0.201 3306 {
		weight 1
	}
}
  1. 热备份数据
#进入node1容器
docker exec ‐it node1 bash 
#更新软件包
apt‐get update
#安装热备工具
apt‐get install percona‐xtrabackup‐24 
#全量热备
innobackupex ‐‐user=root ‐‐password=abc123456 /data/backup/full
  1. 冷还原数据 停止其余4个节点,并删除节点
docker stop node2 
docker stop node3 
docker stop node4
docker stop node5 
docker rm node2 
docker rm node3 
docker rm node4 
docker rm node5

node1容器中删除MySQL的数据

#删除数据
rm ‐rf /var/lib/mysql/* 
#清空事务
innobackupex ‐‐user=root ‐‐password=abc123456 ‐‐apply‐back /data/backup/full/2018‐ 04‐15_05‐09‐07/
#还原数据
innobackupex ‐‐user=root ‐‐password=abc123456 ‐‐copy‐back	/data/backup/full/2018‐ 04‐15_05‐09‐07/

重新创建其余4个节点,组件PXC集群

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值