日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/10 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现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群集。

總結

以上是生活随笔為你收集整理的实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。