Chinaunix首页 | 论坛 | 博客
  • 博客访问: 960108
  • 博文数量: 83
  • 博客积分: 32
  • 博客等级: 民兵
  • 技术积分: 2080
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 09:45
个人简介

努力学习,努力分享,努力.....在努力..努力离开..

文章分类

全部博文(83)

文章存档

2017年(3)

2015年(1)

2014年(47)

2013年(32)

分类: Mysql/postgreSQL

2014-10-27 10:10:19

我认为在单个物理服务器上运行2个或多个Percona XtraDB Cluster(PXC)节点这样没有什么意义,除了教育和测试目的,但在这种情况下这样做仍然是有用的。最受欢迎的实现方式似乎是服务器的虚拟化,比如利用流浪盒子。但是同样的方式你可以运行多个MySQL实例在并行操作系统级别上,还有并发的mysqld的形成过程,因此你也可以有多个Percona XtraDB Cluster节点。而且实现这一目标的方法是恰恰相同的:使用专用的datadirs和为每个节点设置不同的端口。

哪个端口?

Pecona XtraDB Cluster 使用4个TCP端口:

  • 常规的MySQL端口(默认3306)

  • (Galera)(默认4567)

  • 状态传输端口(默认4444)

  • 增量状态传输端口(默认是:组通信端口(4567)+ 1 = 4568)

当然,当你在同一台服务器上有多个实例的默认值,并不适用于所有人,所以我们需要为其他实例定义新的端口,确保本地防火墙对他们是开放的,如果有一个活动(iptables,selinux,…)。


安装Percona XtraDB 集群,配置并启动第一个节点

我的测试服务器用的是一个全新的CentOS(社区企业操作系统)6.5 版,系统安装了,通过工具我安装了Percona XtraDB集群(5.6.20-25.7.888.el6版本);注意:你可能需要安装EPEL(企业版Linux额外包)和socat(Socket CAT)工具,这两个工具是独立的(见)。 为了避免冲突,我已经停止了mysql服务的自启动:

chkconfig --level 3 mysql off
chkconfig --del mysql
我原本计划从压缩包中安装PXC(Percona XtraDB Cluster),但是后来我决定通过yum工具进行安装,这样可以自动下载所有依赖包。 这是我最初的/etc/my.cnf 文件(注意默认值的使用):
[mysqld]
datadir = /var/lib/mysql
port=3306
socket=/var/lib/mysql/mysql-node1.sock
pid-file=/var/lib/mysql/mysql-node1.pid
log-error=/var/lib/mysql/mysql-node1.err
binlog_format=ROW
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_name = singlebox
wsrep_node_name = node1
wsrep_cluster_address=gcomm://
我使用下面的命令手动启动了一个节点上的集群引导程序:
$ mysqld_safe --defaults-file=/etc/my.cnf --wsrep-new-cluster
启动后,你应当可以通过本地接口访问该节点:
$ mysql -S /var/lib/mysql/mysql-node1.sock
配置和启动第二个节点

然后,我创建了一个类似的第二个实例配置文件的配置,我叫/etc/my2.cnf,有以下修改:

[mysqld]
datadir = /var/lib/mysql2
port=3307
socket=/var/lib/mysql2/mysql-node2.sock
pid-file=/var/lib/mysql2/mysql-node2.pid
log-error=/var/lib/mysql2/mysql-node2.err
binlog_format=ROW
innodb_autoinc_lock_mode=2
wsrep_provider=/usr/lib64/libgalera_smm.so
wsrep_cluster_name = singlebox
wsrep_node_name = node2
wsrep_cluster_address=gcomm://127.0.0.1:4567,127.0.0.1:5020
wsrep_provider_options = "base_port=5020;"

注意使用base_port:通过它定义的,5020端口是用于组通信和5020(上面)为IST保留着(一样简单的使用5021)。

您需要在这第二个实例中为datadir创建和设置正确的权限,否则MySQL无法创建一些文件(像.pid和.err),虽然你不需要运行mysql_install_db脚本:

$ chown -R mysql:mysql /var/lib/mysql2
然后,您可以用以下命令启动第二个实例:
$ mysqld_safe --defaults-file=/etc/my2.cnf
当开始时,通过看日志来观察这第二个节点开始,与主节点间的通信和加入集群。从一开始的实例在不同的终端上执行:
$ tail -f /var/log/mysql2/mysql-node2.err
记住,任何时候都可以使用mysqladmin停止节点,您只需要提供正确的套接字作为参数,如:
$ mysqladmin -S /var/lib/mysql/mysql-node1.sock shutdown

最后,一旦你有整个集群,你应该编辑my.cnf中的第一节点与一个完整的wsrep_cluster_addres,在/etc/my2.cnf上面显示。

使用mysqld_multi

我最新的博客发表在使用myslqd_multi运行MySQL多实例.它也可以在这里使用,唯一的例外是,你需要确保,无论什么时候初始化运行集群,在第一个节点要使用“wsrep_cluster_address=gcomm://”,同时,注意在其它节点之前启动它.

在我看来,使用mysqld_multi的唯一优势,在于促进节点的管理(启动/停止),并集中所有的配置到单一的my.cnf文件中.除了教学目的,你完全不需要在单一服务器运行一个PXC集群.

为生产服务器增加第二个Percona XtraDB Cluster节点

如果你有一个生产集群,它们由多个物理服务器组成,同时,你想为其中之一增加第二个节点,这个情况会怎么样呢?它以同样的方式工作.配置的时候,你需要使用服务器的IP地址取代回路地址.这里有一个PXC集群的例子,初始情况下,它由三个节点组成: 192.168.70.1, 192.168.70.2和 192.168.70.3.我已经增加了第四个节点,它正运行并服务着第三个节点.在修改之后,wsrep_cluster_address 行看起来像下面这样:

wsrep_cluster_address = gcomm://192.168.70.1,192.168.70.2,192.168.70.3:4567,192.168.70.3:5020
其它资源

我有一个关于“如何在单一服务器配置三节点的集群”的参考资料页面,它采用了一些不同的方法,比我上面谈到的内容包含更多的细节.

原文地址:


阅读(2251) | 评论(0) | 转发(0) |
0

上一篇:讨厌的1146

下一篇:详解MySQL5.6的Online DDL

给主人留下些什么吧!~~