玖叶教程网

前端编程开发入门

基于pxc8.0创建的集群

pxc8集群最麻烦的一步就是创建证书,根据官方创建证书的方式一步一步的,稍有不小心,就会因为证书问题集群内节点互相认证失败,而无法创建pxc集群。不过,有一个简单的方法,就是先启动的节点,会自动创建证书(*.pem),然后将这些证书,共享给其他需要加入集群的节点就可以了,快速方便。

前提条件:

关闭防火墙

systemctl stop firewalld
systemctl diable firewalld

关闭selinux

vim /etc/selinux/config
selinux=disabled

linux需要关闭防火墙,或者开启某些需要的端口;

pxc会自带mysql,版本是对应一致的,所以机子上不需要mysql;

最好关闭SELINUX,linux自带的安全增强。

注意这些配置,三台机子上都要操作。

开放pxc所需端口

端口

功能

3306

mysql数据库

4567

pxc cluster 相互通讯端口

4444

sst全量传输

4568

ist增量传输

这里给出一些linux下防火墙的命令相关

# 查询防火墙状态

systemctl status firewalld

# 查询防火墙状态

firewall-cmd --state

# 查询8080端口是否开放

firewall-cmd --query-port=8080/tcp

# 开放80端口

firewall-cmd --permanent --add-port=80/tcp

# 移除端口

firewall-cmd --permanent --remove-port=8080/tcp

清理防火墙

iptables -F

swarm也需要一些端口的开放,

端口

功能

2377

用于集群通信

4789

容器覆盖网络

7946

容器网络发现

1、规划

CentOS(8)-Anolis(8)=>192.168.56.101,192.168.56.102,192.168.56.103

三台主机。

主机ip

部署

swarm

192.168.56.101

pxc1

manager

192.168.56.102

pxc2

worker

192.168.56.103

pxc3

worker

192.168.56.101

nginx 做负载


2、创建swarm集群

在101节点执行:

# docker swarm init --advertise-addr 192.168.56.101
Swarm initialized: current node (4z44c51o1756sacxf6l67uy6y) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join
--token SWMTKN-1-0zlzv4fh30bvg5tlysrcn4yznziwjbyaoxe444np4bss8f1dhw-2gii03vuk93f5x4uwsx00mkr4 192.168.56.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

在其他所两个节点执行:

docker swarm join \
--token SWMTKN-1-0zlzv4fh30bvg5tlysrcn4yznziwjbyaoxe444np4bss8f1dhw-2gii03vuk93f5x4uwsx00mkr4 192.168.56.101:2377

查看swarm集群:

其他相关命令:

docker node rm -f xxx 强制删除节点

docker swarm leave -f 主节点强制离开swarm集群

docker swarm leave 从节点离开swarm集群

创建虚拟网络

创建虚拟网络,后续在每一台主机的创建的docker pxc节点,都指定使用这个overlay网络。

# docker network create -d overlay --attachable swarm_mysql

其他相关命令

docker network inspect xxxx 查看改网络信息

docker network ls 查看所有网络信息

docker network rm xxxx 删除网络

这里网络名就叫,swarm_mysql,创建好了网络之后,

docker network inspect swarm_mysql 查看

4、创建目录

如果你是8.0+且没有使用相同的证书,那么你肯定会遇到一个ssl相关的错误

“error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding”

这是因为8.0后,是ssl来连接,三台机子,就必须保持证书密钥的一致性才可以通信。一般情况下我们最好看一下系统磁盘的分区情况,然后把mysql的数据要放到大的磁盘上

注意这里的目录在三台机子上都要做相同的操作创建

# mkdir /data
 # cd /data
# mkdir -m 777 pxc_data

注意:这里需要给予权限,不然很多地方会报错

5、搭建集群

1、下载镜像

# docker pull percona/percona-xtradb-cluster:8.0

2、多台机器创建容器

101节点

我这里是101节点做为引导集群创建的节点,其他是节点加入这个集群,所以101先开始创建

#!/bin/bash
docker run -d -p 3306:3306 --network swarm_mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=123456 \
-v /data/pxc_data:/var/lib/mysql \
--privileged --name pxc1 \
percona/percona-xtradb-cluster:8.0 \
--max_connections=512 \
--allow_max_packet=128m

命令解读:

docker run -d

-p 3306:3306 3306端口映射

--net=swarm_mysql 虚拟网络名字

-e MYSQL_ROOT_PASSWORD=123456 数据库初始密码

-e CLUSTER_NAME=pxc_cluster 集群名字

-e XTRABACKUP_PASSWORD=123456 备份密码

-v /data/pxc:/var/lib/mysql pxc路径映射

--privileged 给予root权限,可选

--name=pxc1 容器的名称

--max_connections=512最大连接数量,可根据要求在此后追加再多参数,以--(双线)开始

可以docker logs pxc1看看日志是否报错等

如果成功,你可以用Navicat连接看看是否成功启动了mysql,启动了之后再安装从节点。

证书copy

在101节点的数据卷下,发现以下证书,将它们copy到其他主机上去:

Copy证书文件

# scp *.pem server102:/data/pxc_data/
# scp *.pem server103:/data/pxc_data/

并在102,103节点上,设置这些权限文件的权限 为:777

102# chmod 777 /data/pxc_data/* -R

103# chmod 777 /data/pxc_data/* -R

102节点

#!/bin/bash
docker run -d -p 3306:3306 --network swarm_mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=123456 \
-v /data/pxc_data:/var/lib/mysql \
-e CLUSTER_JOIN=pxc1 \
--privileged --name pxc2 \
percona/percona-xtradb-cluster:8.0

这里跟上面比起来,多了一句 -e CLUSTER_JOIN=pxc1 ,表示加入pxc1。

为第2台机子可以知道pxc1呢?就是因为swarm集群的建立,让彼此可以相互通信。

103节点

#!/bin/bash
docker run -d -p 3306:3306 --network swarm_mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=123456 \
-v /data/pxc_data:/var/lib/mysql \
-e CLUSTER_JOIN=pxc1 \
--privileged --name pxc3 \
percona/percona-xtradb-cluster:8.0

docker logs -f pxc2 查看日志:

查看集群状态

如果三台都成功了,再确认一下。

登录mysql

# mysql -uroot -p

查看集群状态:

show status like 'wsrep%';

不出意外,这里cluster size就是3台

查看网络信息:

# docker network inspect swarm_mysql

网络也是3个

测试

在任意一台主机上创建数据库,创建数据表,查看其他主机的数据即可:

create database one character set utf8mb4;

use one;

create table stud (id int primary key,name varchar(30));

INSERT into stud values(1,'Jack张');

101主机:

102主机:

103主机:

到此mysql集群已经完毕。

6、负载均衡

1、使用nginx

此处,我将nginx启动在101主机上。

1、添加配置文件

在http同目录最后一行,配置以下内容,注意,这儿使用了上述pxc的容器名称即pxc1,pxc2和pxc3,因为我们创建的nginx也使用相同的网络,所以可以实现通讯:

# config mysql nginx
stream{
upstream pxc{
server pxc1:3306;
server pxc2:3306;
server pxc3:3306;
}
server{
listen 3302;
proxy_pass pxc;
}
}

启动

同样使用docker启动nginx

docker run --name ngx -d \
-p 8800:80 -p 3302:3302 \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
-d nginx

3、连接

然后就可以测试查询了。

使用haproxy

建议使用haproxy管理mysql集群,haproxy有一个监控界面,便于查看mysql节点状态。

创建配置文件

haproxy.cfg 放到/data/ha目录下:

global
#工作目录,需要与创建容器指定的目录相同
# chroot /usr/local/etc/haproxy
#日志文件
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
bind 0.0.0.0:8888
mode http
stats uri /dbs_monitor
#统计报告
stats realm global\statistics
#登录账户
stats auth admin:admin
#数据负载均衡
listen proxy-mysql
#访问的ip:port
bind 0.0.0.0:3301
mode tcp
#负载均衡算法
balance roundrobin
#日志格式
option tcplog
#在mysql中创建一个没有权限的haproxy用户密码为空
#haproxy使用这个账户对mysql进行监控
option mysql-check user haproxy
server MySQL_1 192.168.56.101:3306 check weight 1 maxconn 2000
server MySQL_2 192.168.56.102:3306 check weight 1 maxconn 2000
server MySQL_3 192.168.56.103:3306 check weight 2 maxconn 2000
#使用keepalive检测死链
option tcpka

2、创建haproxy用户

在mysql数据库上,创建haproxy用户如下:

create user 'haproxy'@'%' identified by '';


3、启动haproxy

注意使用同一个swarm_mysql网络:

#!/bin/bash
docker run --name haproxy -d \
-p 8888:8888 -p 3301:3301 \
-v /data/ha:/usr/local/etc/haproxy \
--privileged \
--network swarm_mysql \
haproxy

4、打开8888端口

连接测试

由于前面配置端口为3301所以这儿输入3301:

到此,一个ha的mysql集群就算是全部的创建完成了。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言