实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集

mysql -u root -p

USE mysqlclustertest;

SELECT * FROM testtable;

quit;

SELECT查询出的结果应该依然是:

mysql> SELECT * FROM testtable;

+——+

| i |

+——+

| 1 |

| 2 |

+——+

2 rows in set (0.17 sec)

Ok,所有的测试都正常,现在让我们再次启动sql1.test.com节点:

sql1.example.com:

ndbd

五 如何重新启动群集

现在让我们设想你由于修改了loadb1.test.com节点上的/var/lib/mysql-cluster/config.ini

或者其它原因,需要重新启动MySQL群集。为了这样做,你要使用loadb1.example.com节点上的

ndb_mgm群集管理客户端:

loadb1.test.com:

ndb_mgm

在ndb_mgm控制台上,你输入

shutdown;

你将看到像这样的信息:

ndb_mgm> shutdown;

Node 3: Cluster shutdown initiated

Node 2: Node shutdown completed.

2 NDB Cluster node(s) have shutdown.

NDB Cluster management server shutdown.

ndb_mgm>

这意味着群集节点sql1.test.com和sql2.test.com,已经群集管理服务器都已经关闭。

运行

quit;

退出 ndb_mgm 控制台。

为启动群集管理服务器,在loadb1.test.com上这样做:

loadb1.test.com:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

并在sql1.test.com 和 sql2.test.com 上运行:

sql1.example.com / sql2.example.com:

ndbd

或者,你刚修改过loadb1.test.com上的/var/lib/mysql-cluster/config.ini文件:

ndbd –initial

在这之后,你可以在loadb1.test.com上检查看看群集是否已经重启:

loadb1.test.com:

ndb_mgm

在ndb_mgm控制台,输入

show;

来查看当前群集的状态。所有节点重启后可能需要一点点时间来报告已经连接上。

输入:

quit;

退出ndb_mgm控制台。

六 配置负载均衡

我们的MySQL群集已经现在完成了,你现在可以开始使用它了。然而,我们没有一个访问群集的

单独的IP地址,这意味着你必须配置应用程序一部分使用MySQL群集节点1(sql1.test.com),另

外的部分使用节点2(sql2.test.com).当然,所有的应用程序只是需要使用一个节点,但如果你

不想在群集节点之间分流负载,那你拥有一个群集的目的是什么?另外一个问题是,如果一个群集

节点坏掉了怎么办?那么使用这个群集节点的应用程序将根本不能够工作了。

这里的解决方案是在MySQL群集前端配置一个负载均衡器来在每个MySQL群集节点之间平衡负载。

负载均衡器在群集节点之间配置一个共享的虚拟IP地址,所有你的应用程序使用这个虚拟IP地址来

访问群集。如果其中一个节点坏掉,那么你的应用程序将仍然可以工作,因为负载均衡器将请求转移

到了工作正常的另外一个节点。

现在在这个例子中负载均衡器成为了瓶颈。如果这个负载均衡器坏掉了怎么办呢?因此我们将以(active/passive)

主动/被动安装方式来配置两个负载均衡器。这意味着我们有一个负载均衡器是主动的,另外一个是

热备的,当主动的那个坏掉了,它将会变为主动。每个负载均衡器都使用heartbeat(心跳)来检查

另外一个负载均衡器的活动情况,同时负载均衡器也使用ldirectord,它负责将流量分配到群集节点。

heartbeat和ldirectord都在我们将要安装的 Ultra Monkey 安装包中。

loadb1.test.com 和 loadb2.test.com 节点的系统内核支持IPVS(IP虚拟服务器) 非常重要。

IPVS是在Linux内核的传输层执行负载均衡的。

6.1 安装 Ultra Monkey

好,现在让我们开始: 首先我们启用loadb1.test.com 和 loadb2.test.com节点上IPVS:

loadb1.example.com / loadb2.example.com:

modprobe ip_vs_dh

modprobe ip_vs_ftp

modprobe ip_vs

modprobe ip_vs_lblc

modprobe ip_vs_lblcr

modprobe ip_vs_lc

modprobe ip_vs_nq

modprobe ip_vs_rr

modprobe ip_vs_sed

modprobe ip_vs_sh

modprobe ip_vs_wlc

modprobe ip_vs_wrr

为了在启动时IPVS模块,我们在/etc/modules列举了模块:

loadb1.test.com / loadb2.test.com:

vi /etc/modules

ip_vs_dh

ip_vs_ftp

ip_vs

ip_vs_lblc

ip_vs_lblcr

ip_vs_lc

ip_vs_nq

ip_vs_rr

ip_vs_sed

ip_vs_sh

ip_vs_wlc

ip_vs_wrr

现在我们编辑/etc/apt/sources.list,添加 Ultra Monkey 的下载点,然后我们安装Ultra Monkey:

loadb1.test.com / loadb2.test.com:

vi /etc/apt/sources.list

deb http://www.ultramonkey.org/download/3/ sarge main

deb-src http://www.ultramonkey.org/download/3 sarge main

apt-get update

apt-get install ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev

现在Ultra Monkey已经安装了,如果你看到下面这样的警告:

| libsensors3 not functional

|

| It appears that your kernel is not compiled with sensors support. As a

| result, libsensors3 will not be functional on your system.

|

| If you want to enable it, have a look at “I2C Hardware Sensors Chip

| support” in your kernel configuration.

你可以忽略它。

回答下面的问题:

Do you want to automatically load IPVS rules on boot?

Select a daemon method.

我刚安装的libdbd-mysql-perl安装包不能够在MySQL 5(我们在MySQL群集上使用MySQL 5),

因此我们安装最新的DBD::mysql Perl安装包:

loadb1.test.com / loadb2.test.com:

cd /tmp

wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz

tar xvfz DBD-mysql-3.0002.tar.gz

cd DBD-mysql-3.0002

perl Makefile.PL

make

make install

我们必须先启用packet forwarding:

loadb1.example.com / loadb2.example.com:

vi /etc/sysctl.conf

# Enables packet forwardingnet.ipv4.ip_forward = 1

6.2 配置heartbeat(心跳)

我们通过创建三个文件(loadb1.test.com 和 loadb2.test.com的文件必须完全一样)来配置heartbeat:

loadb1.test.com / loadb2.test.com:

vi /etc/ha.d/ha.cf

logfacility local0

bcast eth0

mcast eth0 225.0.0.1 694 1 0

auto_failback off

node loadb1

node loadb2

respawn hacluster /usr/lib/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster

请记住:你必须列出节点名称(本例中是loadb1 和 loadb2)

uname -n

除了这些,我们不需要对这个文件做任何修改。

vi /etc/ha.d/haresources

loadb1 \

ldirectord::ldirectord.cf \

LVSSyncDaemonSwap::master \

IPaddr2::192.168.0.105/24/eth0/192.168.0.255

你必须列举其中一个负载均衡节点名称(这里是:loadb1),并且列出

虚拟IP地址(192.168.0.105)和广播地址(192.168.0.255).

vi /etc/ha.d/authkeys

auth 3

3 md5 somerandomstring

somerandomstring是loadb1 和 loadb2 用来相互认证的两个heartbeat守护进程的密码。

这里设置成你自己的密码。你可以选择3种加密方式。我一般使用md5来加密。

/etc/ha.d/authkeys应该是root帐号只读,这里我们这样做:

loadb1.test.com / loadb2.test.com:

chmod 600 /etc/ha.d/authkeys

6.3 配置 ldirectord

现在我们为ldirectord创建配置文件, 负载均衡器:

loadb1.example.com / loadb2.example.com:

vi /etc/ha.d/ldirectord.cf

# Global Directives

checktimeout=10

checkinterval=2

autoreload=no

logfile="local0"

quiescent=yes

virtual = 192.168.0.105:3306

service = mysql

real = 192.168.0.101:3306 gate

real = 192.168.0.102:3306 gate

checktype = negotiate

login = "ldirector"

passwd = "ldirectorpassword"

database = "ldirectordb"

request = "SELECT * FROM connectioncheck"

scheduler = wrr

请填入正确的虚拟IP地址(192.168.0.105)和正确的MySQL群集节点的IP地址(192.168.0.101 和 192.168.0.102)。

3306是MySQL运行时默认的端口。我们也指定了一个MySQL用户(ldirector)和密码(ldirectorpassword),一个数据库(ldirectordb)和

一条SQL查询。ldirectord 使用这些信息来测试MySQL群集节点,以此来检查它们的是否一直可用。下一步我们将用ldirector用户来

创建ldirectordb数据库。

现在我们为heartbeat创建系统必需的启动连接,并移除ldirectord(因为ldirectord将由heartbeat来启动):

loadb1.test.com / loadb2.test.com:

update-rc.d -f heartbeat remove

update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .

update-rc.d -f ldirectord remove

6.4 创建数据库ldirector

下面我们在MySQL群集节点sql1.test.com 和 sql2.test.com上创建ldirector数据库。这个数据库将会用于我们的负载均衡器来检查

MySQL群集节点的可用性。

sql1.test.com:

mysql -u root -p

GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';

FLUSH PRIVILEGES;

CREATE DATABASE ldirectordb;

USE ldirectordb;

CREATE TABLE connectioncheck (i INT) ENGINE=NDBCLUSTER;

INSERT INTO connectioncheck () VALUES (1);

quit;

sql2.test.com:

mysql -u root -p

GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';

FLUSH PRIVILEGES;

CREATE DATABASE ldirectordb;

quit;

6.4 为负载均衡准备MySQL群集节点

最后我们必须配置MySQL群集节点sql1.test.com 和 sql2.test.com来接受虚拟IP地址192.168.0.105。

sql1.test.com / sql2.test.com:

apt-get install iproute

在/etc/sysctl.conf里面添加下面的内容:

vi /etc/sysctl.conf

# Enable configuration of arp_ignore option

net.ipv4.conf.all.arp_ignore = 1

# When an arp request is received on eth0, only respond if that address is

# configured on eth0. In particular, do not respond if the address is

# configured on lo

net.ipv4.conf.eth0.arp_ignore = 1

# Ditto for eth1, add for all ARPing interfaces

#net.ipv4.conf.eth1.arp_ignore = 1

# Enable configuration of arp_announce option

net.ipv4.conf.all.arp_announce = 2

# When making an ARP request sent through eth0 Always use an address that

# is configured on eth0 as the source address of the ARP request. If this

# is not set, and packets are being sent out eth0 for an address that is on

# lo, and an arp request is required, then the address on lo will be used.

# As the source IP address of arp requests is entered into the ARP cache on

# the destination, it has the effect of announcing this address. This is

# not desirable in this case as adresses on lo on the real-servers should

# be announced only by the linux-director.

net.ipv4.conf.eth0.arp_announce = 2

# Ditto for eth1, add for all ARPing interfaces

#net.ipv4.conf.eth1.arp_announce = 2

sysctl -p

将下面这段加入到/etc/network/interfaces:

sql1.test.com / sql2.test.com:

vi /etc/network/interfaces

auto lo:0

iface lo:0 inet static

address 192.168.0.105

netmask 255.255.255.255

pre-up sysctl -p > /dev/null

ifup lo:0

七.启动负载均衡器并测试

现在我们启动两个负载均衡管理器:

loadb1.test.com / loadb2.test.com:

/etc/init.d/ldirectord stop

/etc/init.d/heartbeat start

如果你没有看见错误,你需要现在重启每个负载均衡器:

loadb1.test.com / loadb2.test.com:

shutdown -r now

重启之后我们可以检查是否两个负载均衡器象期望一样工作:

loadb1.test.com / loadb2.test.com:

ip addr sh eth0

主动的负载均衡器应该列出了虚拟IP地址(192.168.0.105):

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.103/24 brd 192.168.0.255 scope global eth0

inet 192.168.0.105/24 brd 192.168.0.255 scope global secondary eth0

被动(热备)的负载均衡器应该显示如下:

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:16:3e:16:c1:4e brd ff:ff:ff:ff:ff:ff

inet 192.168.0.104/24 brd 192.168.0.255 scope global eth0

loadb1.test.com / loadb2.test.com:

ldirectord ldirectord.cf status

主动负载均衡器上的输出:

ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 1603

被动负载均衡器上的输出:

ldirectord is stopped for /etc/ha.d/ldirectord.cf

loadb1.example.com / loadb2.example.com:

ipvsadm -L -n

主动负载均衡器上的输出:

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.0.105:3306 wrr

-> 192.168.0.101:3306 Route 1 0 0

-> 192.168.0.102:3306 Route 1 0 0

被动负载均衡器上的输出:

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

loadb1.test.com / loadb2.test.com:

/etc/ha.d/resource.d/LVSSyncDaemonSwap master status

主动负载均衡器上的输出:

master running

(ipvs_syncmaster pid: 1766)

被动负载均衡器上的输出:

master stopped

(ipvs_syncbackup pid: 1440)

如果你的测试都是正常的,你现在可以从相同网络(192.168.0.x)中的其它服务器用虚拟IP地址192.168.0.105来访问MySQL数据库:

mysql -h 192.168.0.105 -u ldirector -p

(请记住:你的MySQL客户端必须至少是4.1版本的;旧的版本不能运行MySQL5。)

你现在可以关掉一个MySQL群集节点来测试;你应该仍然可以连接到MySQL数据库。

八 注解

运行一个MySQL群集时,这里有一些重要的东西需要记住:

–所有的数据都是存在内存! 因此你的群集节点上需要大容量的内存。这里有每个节点需要内存

容量的计算公式:

(数据库大小SizeofDatabase * 复制数量NumberOfReplicas * 1.1 ) / 数据节点数量NumberOfDataNodes

所以如果你有一个数据库的大小是1GB,你应该为每个节点配备1.1GB内存!

–群集管理节点在监听1186端口上的任意连接。所以这意味着不是很安全,所以你应当在一个独立的网络上运行MySQL群集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清除掉AD的相关属性!

今天有朋友问我怎么清除掉AD 的相关属性,由于他们的用户都设置了登录到属性,这样我们的用户就仅仅能登陆他须要设置的计算机。对于兴许规则的变更的时候,我们的管理员配置起来就比較复杂。他须要非常长的时间去一个一个清除掉相关的属性。这对…

java中String、StringBuffer、StringBuilder的区别

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题。现在总结一下,看看他们的不同与相同。 三者共同之处: 都是final类,不允许被继承,主要是从性能和安全性上考虑的&#…

《Ext详解与实践》节选:自定义单元格的显示格式

有时候,需要在Grid中显示一个链接,或根据数字的大小显示不同的颜色,又或者使用固定格式显示记录编号等,这就需要自定义单元格的显示格式。在Ext的Grid可以很容易的实现自定义单元格的显示格式。在定义Grid的ColumnModel的时候&…

js学习总结----案例之多级菜单js版本

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;pad…

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序

此题考察的是类加载器实例化时进行的操作步骤&#xff08;加载–>连接->初始化&#xff09;。 父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量&#xff08;父类实例成员变量&#xff09;、 父类构造函数、 子类非静态变量&…

转载:成功应用ERP的思路和方法分析

企业ERP的应用现状一是应用数量。据我不完全统计&#xff0c;时至今日&#xff0c;全国有一万多家企业在集成应用ERP&#xff0c;这和国家统计局统计提供的266,090个国有及规模以上非国有企业的总数相比&#xff0c;仅占百分之四。二是应用时间。从1981年应用第一套ERP到2007年…

mysql无法找到事件id100描述_解决“事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到”...

事件类型: 错误事件来源: Zend Optimizer事件种类: 无事件 ID: 487日期: 2006-8-18事件: 0:17:36用户: N/A计算机: COMPUTER描述:事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能…

正则化线性回归

1. 模型的欠拟合、过拟合无论是回归问题还是分类问题都可能存在模型的欠拟合和过拟合的情况。下图是回归问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第二个模型刚好拟合&#xff0c;第三个过拟合。下图是分类问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第…

用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

JAVA Map的几种类型: HashMap、HashTable、LinkedHashMap和TreeMap。 HashMap HashMap 是一个最常用的Map&#xff0c;它根据键的HashCode值存储数据&#xff0c;根据键可以直接获取它的值&#xff0c;具有很快的访问速度。 遍历时&#xff0c;取得数据的顺序是完全随机的。 …

python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...

我的数据包含2个DataFrame. DataFrame_1.shape (40,5000)和DataFrame_2.shape (40,74).我正在尝试进行某种类型的线性回归,但DataFrame_2包含NaN缺失的数据值.当我DataFrame_2.dropna(how “any”)时,形状下降到(2,74).sklearn中是否存在可以处理NaN值的线性回归算法&#xff1…

vl_sift函数用法

1 I vl_impattern(roofs1) ; 2 image(I) ;3 %vl_sift函数的输入是一个单精度的灰度图像&#xff0c;灰度值区间归一化到[0, 255]。4 %因此图像 I 需要通过下面的函数转成相应的格式&#xff1a;5 I single(rgb2gray(I)) ;6 %vl_sift( )的输出矩阵 这里f是一个[x,y,s,th]的向量…

Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?

Hashmap和Hashtable 都不是有序的。 TreeMap和LinkedHashmap都是有序的。&#xff08;TreeMap默认是key升序&#xff0c;LinkedHashmap默认是数据插入顺序&#xff09; TreeMap是基于比较器Comparator来实现有序的。 LinkedHashmap是基于链表来实现数据插入有序的。

Photoshop的批处理(有海量的数码照片,想传上网的话就看下)

每次狂按快门的结果就是得到海量的数码照片&#xff0c;想传上网的话&#xff0c;最起码也要做一些尺寸方面的处理&#xff0c;这么多照片&#xff0c;真的要一张一张处理吗&#xff1f;Photoshop自有好用的Action工具帮我们做批处理。 一、前期准备 在图片所在文件夹里添加一个…

Python基础-包

定义&#xff1a;包本质就是一个目录&#xff08;必须带有一个__init__.py文件&#xff09;&#xff0c;它是用来从逻辑上组织模块导入包的本质&#xff1a;执行该包下的__init__.py文件导入当前目录下模块的一种方式&#xff1a;from . import module_name 其中.表示当前目录…

mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?

据群友面试反馈&#xff0c;整理了3道MySQL面试题&#xff0c;对很多人可能是小菜一碟&#xff0c;对这些熟悉&#xff0c;有更好的理解的话&#xff0c;可以留言补充&#xff0c;不断完善我们的题库。MySQL查询字段区不区分大小写&#xff1f;MySQL innodb的事务与日志的实现方…

面试题,反射创建类实例的三种方式是什么

1、获得Class&#xff1a;主要有三种方法&#xff1a; &#xff08;1&#xff09;Object-->getClass &#xff08;2&#xff09;任何数据类型&#xff08;包括基本的数据类型&#xff09;都有一个“静态”的class属性 &#xff08;3&#xff09;通过class类的静态方法&am…

控制控制台

var s:string; begin AllocConsole; try Write(Type here your words and press Enter); Readln(s); ShowMessage(Format(You typed: "%s",[s])); finally FreeConsole; end; end;

推荐系统中的矩阵分解演变方式

推荐算法主要分为基于内容的算法和协同过滤. 协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型. 矩阵分解乃是实现隐语义模型的基石.矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.推荐…

mysql1846错误_MySQL 错误代码:2003 idea错误:ERROR DruidDataSource:1846 - create connection error...

idea项目一启动就报错&#xff1a;20:01:13,047 ERROR DruidDataSource:1846 - create connection errorcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The…

mac刷新本地DNS缓存

本地连网有问题&#xff0c;刷新本地dns缓存&#xff0c;刷新DNS缓存命令 sudo killall -HUP mDNSResponder