真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql負(fù)載均衡怎么用 mysql負(fù)載均衡方案

怎樣給訪問量過大的mysql數(shù)據(jù)庫(kù)減壓

單機(jī)MySQL數(shù)據(jù)庫(kù)的優(yōu)化

創(chuàng)新互聯(lián)自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

一、服務(wù)器硬件對(duì)MySQL性能的影響

 

 ①磁盤尋道能力(磁盤I/O),我們現(xiàn)在上的都是SAS15000轉(zhuǎn)的硬盤。MySQL每秒鐘都在進(jìn)行大量、復(fù)雜的查詢操作,對(duì)磁盤的讀寫量可想而知。

所以,通常認(rèn)為磁盤I/O是制約MySQL性能的最大因素之一,對(duì)于日均訪

問量在100萬(wàn)PV以上的Discuz!論壇,由于磁盤I/O的制約,MySQL的性能會(huì)非常低下!解決這一制約因素可以考慮以下幾種解決方案:

使用RAID1+0磁盤陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁盤陣列上的效率不會(huì)像你期待的那樣快。

②CPU 對(duì)于MySQL應(yīng)用,推薦使用DELL R710,E5620 @2.40GHz(4 core)* 2 ,我現(xiàn)在比較喜歡DELL R710,也在用其作Linuxakg 虛擬化應(yīng)用;

③物理內(nèi)存對(duì)于一臺(tái)使用MySQL的Database Server來(lái)說(shuō),服務(wù)器內(nèi)存建議不要小于2GB,推薦使用4GB以上的物理內(nèi)存,不過內(nèi)存對(duì)于現(xiàn)在的服務(wù)器而言可以說(shuō)是一個(gè)可以忽略的問題,工作中遇到高端服務(wù)器基本上內(nèi)存都超過了32G。

我們工作中用得比較多的數(shù)據(jù)庫(kù)服務(wù)器是HP DL580G5和DELL R710,穩(wěn)定性和性能都不錯(cuò);特別是DELL R710,我發(fā)現(xiàn)許多同行都是采用它作數(shù)據(jù)庫(kù)的服務(wù)器,所以重點(diǎn)推薦下。

 

 二、MySQL的線上安裝我建議采取編譯安裝的方法,這樣性能上有較大提升,服務(wù)器系統(tǒng)我建議用64bit的Centos5.5,源碼包的編譯參數(shù)會(huì)默

認(rèn)以Debgu模式生成二進(jìn)制代碼,而Debug模式給MySQL帶來(lái)的性能損失是比較大的,所以當(dāng)我們編譯準(zhǔn)備安裝的產(chǎn)品代碼時(shí),一定不要忘記使用“—

without-debug”參數(shù)禁用Debug模式。而如果把—with-mysqld-ldflags和—with-client-ldflags二

個(gè)編譯參數(shù)設(shè)置為—all-static的話,可以告訴編譯器以靜態(tài)方式編譯和編譯結(jié)果代碼得到最高的性能。使用靜態(tài)編譯和使用動(dòng)態(tài)編譯的代碼相比,性能

差距可能會(huì)達(dá)到5%至10%之多。我參考了簡(jiǎn)朝陽(yáng)先生的編譯參數(shù),特列如下,供大家參考

./configure

–prefix=/usr/local/mysql –without-debug –without-bench

–enable-thread-safe-client –enable-assembler –enable-profiling

–with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static

–with-charset=latin1 –with-extra-charset=utf8,gbk –with-innodb

–with-csv-storage-engine –with-federated-storage-engine

–with-mysqld-user=mysql –without-我是怎么了ded-server

–with-server-suffix=-community

–with-unix-socket-path=/usr/local/mysql/sock/mysql.sock

三、MySQL自身因素當(dāng)解決了上述服務(wù)器硬件制約因素后,讓我們看看MySQL自身的優(yōu)化是如何操作的。對(duì) MySQL自身的優(yōu)化主要是對(duì)其配置文件my.cnf中的各項(xiàng)參數(shù)進(jìn)行優(yōu)化調(diào)整。下面我們介紹一些對(duì)性能影響較大的參數(shù)。

下面,我們根據(jù)以上硬件配置結(jié)合一份已經(jīng)優(yōu)化好的my.cnf進(jìn)行說(shuō)明:

#vim /etc/my.cnf

以下只列出my.cnf文件中[mysqld]段落中的內(nèi)容,其他段落內(nèi)容對(duì)MySQL運(yùn)行性能影響甚微,因而姑且忽略。

[mysqld]

port = 3306

serverid = 1

socket = /tmp/mysql.sock

skip-locking

#避免MySQL的外部鎖定,減少出錯(cuò)幾率增強(qiáng)穩(wěn)定性。

skip-name-resolve

#禁止MySQL對(duì)外部連接進(jìn)行DNS解析,使用這一選項(xiàng)可以消除MySQL進(jìn)行DNS解析的時(shí)間。但需要注意,如果開啟該選項(xiàng),則所有遠(yuǎn)程主機(jī)連接授權(quán)都要使用IP地址方式,否則MySQL將無(wú)法正常處理連接請(qǐng)求!

back_log = 384

 

 #back_log參數(shù)的值指出在MySQL暫時(shí)停止響應(yīng)新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。

如果系統(tǒng)在一個(gè)短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值,該參數(shù)值指定到來(lái)的TCP/IP連接的偵聽隊(duì)列的大小。不同的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自

己的限制。 試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無(wú)效的。默認(rèn)值為50。對(duì)于Linux系統(tǒng)推薦設(shè)置為小于512的整數(shù)。

key_buffer_size = 384M

#key_buffer_size指定用于索引的緩沖區(qū)大小,增加它可得到更好的索引處理性能。對(duì)于內(nèi)存在4GB左右的服務(wù)器該參數(shù)可設(shè)置為256M或384M。注意:該參數(shù)值設(shè)置的過大反而會(huì)是服務(wù)器整體效率降低!

max_allowed_packet = 4M

thread_stack = 256K

table_cache = 614K

sort_buffer_size = 6M

#查詢排序時(shí)所能使用的緩沖區(qū)大小。注意:該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占,如果有100個(gè)連接,那么實(shí)際分配的總共排序緩沖區(qū)大小為100 × 6 = 600MB。所以,對(duì)于內(nèi)存在4GB左右的服務(wù)器推薦設(shè)置為6-8M。

read_buffer_size = 4M

#讀查詢操作所能使用的緩沖區(qū)大小。和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享。

join_buffer_size = 8M

#聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享。

myisam_sort_buffer_size = 64M

table_cache = 512

thread_cache_size = 64

query_cache_size = 64M

 

 #指定MySQL查詢緩沖區(qū)的大小??梢酝ㄟ^在MySQL控制臺(tái)觀察,如果Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不

的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會(huì)影響效率,那么可以考慮不用查詢緩

沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多。

tmp_table_size = 256M

max_connections = 768

#指定MySQL允許的最大連接進(jìn)程數(shù)。如果在訪問論壇時(shí)經(jīng)常出現(xiàn)Too Many Connections的錯(cuò)誤提 示,則需要增大該參數(shù)值。

max_connect_errors = 1000

wait_timeout = 10

#指定一個(gè)請(qǐng)求的最大連接時(shí)間,對(duì)于4GB左右內(nèi)存的服務(wù)器可以設(shè)置為5-10。

thread_concurrency = 8

#該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量*2,在本例中,服務(wù)器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實(shí)際取值為4*2=8;這個(gè)目前也是雙四核主流服務(wù)器配置。

skip-networking

#開啟該選項(xiàng)可以徹底關(guān)閉MySQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問MySQL數(shù)據(jù)庫(kù)服務(wù)器則不要開啟該選項(xiàng)!否則將無(wú)法正常連接!

table_cache=1024

#物理內(nèi)存越大,設(shè)置就越大。默認(rèn)為2402,調(diào)到512-1024最佳

innodb_additional_mem_pool_size=4M

#默認(rèn)為2M

innodb_flush_log_at_trx_commit=1

#設(shè)置為0就是等到innodb_log_buffer_size列隊(duì)滿后再統(tǒng)一儲(chǔ)存,默認(rèn)為1

innodb_log_buffer_size=2M

#默認(rèn)為1M

innodb_thread_concurrency=8

#你的服務(wù)器CPU有幾個(gè)就設(shè)置為幾,建議用默認(rèn)一般為8

key_buffer_size=256M

#默認(rèn)為218,調(diào)到128最佳

tmp_table_size=64M

#默認(rèn)為16M,調(diào)到64-256最掛

read_buffer_size=4M

#默認(rèn)為64K

read_rnd_buffer_size=16M

#默認(rèn)為256K

sort_buffer_size=32M

#默認(rèn)為256K

thread_cache_size=120

#默認(rèn)為60

query_cache_size=32M

※值得注意的是:

很多情況需要具體情況具體分析

一、如果Key_reads太大,則應(yīng)該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。

二、如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。

 

 很多時(shí)候我們發(fā)現(xiàn),通過參數(shù)設(shè)置進(jìn)行性能優(yōu)化所帶來(lái)的性能提升,可能并不如許多人想象的那樣產(chǎn)生質(zhì)的飛躍,除非是之前的設(shè)置存在嚴(yán)重不合理的情況。我們

不能將性能調(diào)優(yōu)完全依托于通過DBA在數(shù)據(jù)庫(kù)上線后進(jìn)行的參數(shù)調(diào)整,而應(yīng)該在系統(tǒng)設(shè)計(jì)和開發(fā)階段就盡可能減少性能問題。

【51CTO獨(dú)家特稿】如果單MySQL的優(yōu)化始終還是頂不住壓力時(shí),這個(gè)時(shí)候我們就必須考慮MySQL的高可用架構(gòu)(很多同學(xué)也愛說(shuō)成是MySQL集群)了,目前可行的方案有:

一、MySQL Cluster

優(yōu)勢(shì):可用性非常高,性能非常好。每份數(shù)據(jù)至少可在不同主機(jī)存一份拷貝,且冗余數(shù)據(jù)拷貝實(shí)時(shí)同步。但它的維護(hù)非常復(fù)雜,存在部分Bug,目前還不適合比較核心的線上系統(tǒng),所以這個(gè)我不推薦。

二、DRBD磁盤網(wǎng)絡(luò)鏡像方案

 

 優(yōu)勢(shì):軟件功能強(qiáng)大,數(shù)據(jù)可在底層快設(shè)備級(jí)別跨物理主機(jī)鏡像,且可根據(jù)性能和可靠性要求配置不同級(jí)別的同步。IO操作保持順序,可滿足數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)一致

性的苛刻要求。但非分布式文件系統(tǒng)環(huán)境無(wú)法支持鏡像數(shù)據(jù)同時(shí)可見,性能和可靠性兩者相互矛盾,無(wú)法適用于性能和可靠性要求都比較苛刻的環(huán)境,維護(hù)成本高于

MySQL Replication。另外,DRBD也是官方推薦的可用于MySQL高可用方案之一,所以這個(gè)大家可根據(jù)實(shí)際環(huán)境來(lái)考慮是否部署。

三、MySQL Replication

 

 在實(shí)際應(yīng)用場(chǎng)景中,MySQL

Replication是使用最為廣泛的一種提高系統(tǒng)擴(kuò)展性的設(shè)計(jì)手段。眾多的MySQL使用者通過Replication功能提升系統(tǒng)的擴(kuò)展性后,通過

簡(jiǎn)單的增加價(jià)格低廉的硬件設(shè)備成倍

甚至成數(shù)量級(jí)地提高了原有系統(tǒng)的性能,是廣大MySQL中低端使用者非常喜歡的功能之一,也是許多MySQL使用者選擇MySQL最為重要的原因。

比較常規(guī)的MySQL Replication架構(gòu)也有好幾種,這里分別簡(jiǎn)單說(shuō)明下

MySQL Replication架構(gòu)一:常規(guī)復(fù)制架構(gòu)--Master-slaves,是由一個(gè)Master復(fù)制到一個(gè)或多個(gè)Salve的架構(gòu)模式,主要用于讀壓力大的應(yīng)用數(shù)據(jù)庫(kù)端廉價(jià)擴(kuò)展解決方案,讀寫分離,Master主要負(fù)責(zé)寫方面的壓力。

MySQL Replication架構(gòu)二:級(jí)聯(lián)復(fù)制架構(gòu),即Master-Slaves-Slaves,這個(gè)也是為了防止Slaves的讀壓力過大,而配置一層二級(jí) Slaves,很容易解決Master端因?yàn)楦綄賡lave太多而成為瓶勁的風(fēng)險(xiǎn)。

MySQL Replication架構(gòu)三:Dual Master與級(jí)聯(lián)復(fù)制結(jié)合架構(gòu),即Master-Master-Slaves,最大的好處是既可以避免主Master的寫操作受到Slave集群的復(fù)制帶來(lái)的影響,而且保證了主Master的單點(diǎn)故障。

以上就是比較常見的MySQL replication架構(gòu)方案,大家可根據(jù)自己公司的具體環(huán)境來(lái)設(shè)計(jì) ,Mysql 負(fù)載均衡可考慮用LVS或Haproxy來(lái)做,高可用HA軟件我推薦Heartbeat。

 

 MySQL

Replication的不足:如果Master主機(jī)硬件故障無(wú)法恢復(fù),則可能造成部分未傳送到slave端的數(shù)據(jù)丟失。所以大家應(yīng)該根據(jù)自己目前的網(wǎng)絡(luò)

規(guī)劃,選擇自己合理的Mysql架構(gòu)方案,跟自己的MySQL

DBA和程序員多溝涌,多備份(備份我至少會(huì)做到本地和異地雙備份),多測(cè)試,數(shù)據(jù)的事是最大的事,出不得半點(diǎn)差錯(cuò)

請(qǐng)教haproxy +mysql負(fù)載均衡

1. 添加監(jiān)控MySQL狀態(tài)的端口

# vi

/etc/servicesmysqlcheck

6033/tcp

# MySQL status

check

2. 使用xinetd守護(hù)進(jìn)程運(yùn)行MySQL狀態(tài)檢測(cè)

# cat /etc/xinetd.d/mysqlchk

service mysqlcheck

{

disable = no

flags = REUSE

socket_type = stream

port = 6033

wait = no

user = root

server = /usr/local/haproxy/sbin/mysqlchk_status.sh

log_on_failure += USERID

}

3. 狀態(tài)檢測(cè)腳本

# vi /usr/local/haproxy/sbin/mysqlchk_status.sh

#/bin/bash

MYSQL_HOST="localhost"

MYSQL_PORT="3306"

MYSQL_USERNAME="root"

MYSQL_PASSWORD="123456"

ERROR_MSG=/usr/bin/mysql --host=$MYSQL_HOST --port=$MYSQL_PORT

--user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD -e "show databases;"

if [ "$ERROR_MSG" != "" ]

then

# mysql is fine, return http 200

/bin/echo -e "HTTP/1.1 200 OK\r\n"

/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

/bin/echo -e "\r\n"

/bin/echo -e "MySQL is running.\r\n"

/bin/echo -e "\r\n"

else

# mysql is fine, return http 503

/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

/bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

/bin/echo -e "\r\n"

/bin/echo -e "MySQL is *down*.\r\n"

/bin/echo -e "\r\n"

fi

# chown haproxy.haproxy /usr/local/haproxy/sbin/mysqlchk_status.sh

4. HAproxy日志

# touch /var/log/haproxy.log

# chown haproxy.haproxy /var/log/haproxy.log

編輯/etc/syslog.conf文件,添加如下語(yǔ)句

local0.* /var/log/haproxy.log

5. HAProxy配置文件

[root@localhost htdocs]# cat /usr/local/haproxy/conf/haproxy.conf

global

maxconn 4096

daemon

pidfile /usr/local/haproxy/run/haproxy.pid

#debug

#quiet

user haproxy

group haproxy

defaults

log global

mode http

option httplog

option dontlognull

log 127.0.0.1 local0

retries 3

option redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen admin_stats 192.168.0.1:80

mode http

stats uri /dbs

stats realm Global\ statistics

stats auth test:123456

listen proxy-mysql 0.0.0.0:23306

mode tcp

balance roundrobin

option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www

server db01 192.168.0.1:3306 weight 1 check port 6033 inter 1s rise 2 fall 2

server db02 192.168.0.2:3306 weight 1 check port 6033 inter 1s rise 2 fall 2

option tcpka

6. HAProxy啟動(dòng)腳本

# cat /etc/init.d/haproxy

#! /bin/sh

set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin

PROGDIR=/usr/local/haproxy

PROGNAME=haproxy

DAEMON=$PROGDIR/sbin/$PROGNAME

CONFIG=$PROGDIR/conf/$PROGNAME.conf

PIDFILE=$PROGDIR/run/$PROGNAME.pid

DESC="HAProxy daemon"

SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0

start()

{

echo -n "Starting $DESC: $PROGNAME"

$DAEMON -f $CONFIG

echo "."

}

stop()

{

echo -n "Stopping $DESC: $PROGNAME"

haproxy_pid=cat $PIDFILE

kill $haproxy_pid

echo "."

}

restart()

{

echo -n "Restarting $DESC: $PROGNAME"

$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)

echo "."

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart}" 2

exit 1

;;

esac

exit 0

負(fù)載均衡 后 mysql 怎么連不上

MySQL Proxy就是這么一個(gè)中間層代理,簡(jiǎn)單的說(shuō),MySQL Proxy就是一個(gè)連接池,負(fù)責(zé)將前臺(tái)應(yīng)用的連接請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)的數(shù)據(jù)庫(kù),并且通過使用lua腳本,可以實(shí)現(xiàn)復(fù)雜的連接控制和過濾,從而實(shí)現(xiàn)讀寫分離和負(fù)載平衡。

對(duì)于應(yīng)用來(lái)說(shuō),MySQL Proxy是完全透明的,應(yīng)用則只需要連接到MySQL Proxy的監(jiān)聽端口即可。當(dāng)然,這樣proxy機(jī)器可能成為單點(diǎn)失效,但完全可以使用多個(gè)proxy機(jī)器做為冗余,在應(yīng)用服務(wù)器的連接池配置中配置到多個(gè)proxy的連接參數(shù)即可。建議proxy別跟mysql數(shù)據(jù)庫(kù)安裝在一臺(tái)服務(wù)器中。


分享文章:mysql負(fù)載均衡怎么用 mysql負(fù)載均衡方案
當(dāng)前鏈接:http://weahome.cn/article/dddipde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部