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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql集群一:主从复制,通过mysql-proxy做负载均衡

發布時間:2025/3/15 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql集群一:主从复制,通过mysql-proxy做负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql集群架構方式很多,根據不同的需求做不一樣的架構,簡單一點的就是mysql的replication,也就是Mysql的復制功能,模式有:master-slaves,master-slaves-slaves,master-master-slaves等可以有多個分層,那么現在我所要說的是master-slaves的模式(其他的模式原理基本都一樣),然后再通過mysql官方提供的Mysql-proxy實現讀寫分離,達到負載均衡的效果。

環境:

  主機:master:192.168.1.109,slave1:192.168.1.110,mysqlProxy:192.168.1.112。(workstation10平臺創建虛擬機模擬)

  操作系統:Red Hat Enterprise Linux Server release 5.8

  mysql:mysql-5.5.37-linux2.6-i686.tar.gz

  mysql-proxy:mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz

?

1、安裝mysql:

[root@localhost ~]# cd /usr/local  //進入到安裝目錄

[root@localhost local]# tar -zxvf?mysql-5.5.37-linux2.6-i686.tar.gz ?? ?//解壓mysql二進制包

[root@localhost local]# ln -s?mysql-5.5.37-linux2.6-i686 ?mysql  //解壓之后加上鏈接

[root@localhost local]# groupadd mysql  //增加mysql用戶組

[root@localhost local]# useradd -g mysql mysql  //增加mysql用戶帳號

[root@localhost?local]# cd mysql  //進入安裝之后的mysql目錄

[root@localhost mysql]# chown -R root:mysql ?.  //修改文件屬組和屬主,注意該命令后面有一個點,表示當前目錄

[root@localhost mysql]# chown -R mysql:mysql data/  //把data目錄的屬主改為mysql

[root@localhost mysql]# cp support-files/my-large.cnf ?/etc/my.cnf  //拷貝mysql配置文件放在etc目錄下并改名為my.cnf

[root@localhost mysql]# cp support-files/mysql.server ?/etc/init.d/mysqld  //拷貝mysql的啟動腳本放在/etc/init.d/目錄下

[root@localhost mysql]# service mysqld start  //啟動mysql

至此mysql安裝已經結束,接下來就是mysql的主從配置。(其他兩臺主機也照此安裝mysql)

?

2、配置master:

[root@localhost mysql]# vi /etc/my.cnf  //編輯配置文件

server-id=1 ?//默認是1,不是的話則改為1

thread_concurrency = 2  //線程并發數(CPU*2)

log-bin=mysql-bin  //打開二進制日志功能

保存退出,重新啟動mysql。

登入mysql:

[root@localhost mysql]# mysql -uroot -p  //默認密碼空,直接敲回車進入

mysql> grant replication slave on *.* to repl@‘192.168.1.%‘ identified by ?‘123456‘;

mysql>flush privileges;

mysql>show grants for ‘repl‘@‘192.168.1.%‘;  //查看授權,有記錄說明ok

mysql>show master status\G;  //查看master服務器狀態,有二進制日志文件名和記錄位置(position)

至此mysql配置完成。

?

3、配置slave

[root@localhost mysql]#vi /etc/my.cnf  //編輯配置文件

server-id=11 ?//設置與master不一樣就行,

thread_concurrency = 2  //線程并發數(CPU*2)

relay-log=mysql-log  //打開中繼日志

relay-log-index=mysql-log.index  //設置relay-log-index文件名

保存退出,重新啟動mysql。

登入mysql:

[root@localhost mysql]# mysql -uroot -p  //默認密碼空,直接敲回車進入

mysql>change master to?

? ? ? ??->master_host=‘192.168.1.109‘,  //master服務器ip

   ->mastet_user=‘repl‘,  //用戶名

   ->mastet_password=‘123456‘,  //密碼

   ->master_log_file=‘mysql-bin.000001‘,  //master服務器二進制日志名

   ->master_log_pos=107;

mysql>slave start;  //啟動slave

mysql> SHOW SLAVE STATUS\G;  //查看slave狀態

*************************** 1. row ?***************************

?????????????Slave_IO_State:

??????????????? ?Master_Host: 192.168.1.109

??????????????? ?Master_User: repl

??????????????? ?Master_Port: 3306

????????????? ?Connect_Retry: 60

????????????Master_Log_File: ?mysql-bin.000001

????????Read_Master_Log_Pos: ?4

?????????????Relay_Log_File: ?mysql-relay-bin.000001

????????????? ?Relay_Log_Pos: 4

??????Relay_Master_Log_File: ?mysql-bin.000001

???????????Slave_IO_Running: ?yes

??????????Slave_SQL_Running: ?yes

???????????????????????????? ?...omitted...

??????Seconds_Behind_Master: ?NULL

如果?Slave_IO_Running和Slave_SQL_Running顯示為yes則配置ok,過程中可能會出現:

Slave I/O: error connecting to master ?‘repl@192.168.1.109:3306‘ - retry-time: 60 ?retries: 86400, Error_code: ?2003

引起問題原因是防火墻攔截了,解決辦法就是修改防火墻配置,簡單直接的辦法就是把master服務器的防火墻關掉,執行/etc/init.d/iptables ?stop命令。

接下來測試,在master中創建一個數據庫db_test,查看slave中是是否存在db_test。

至此slave配置結束,其他從服務器按此方式配置。

?

4、配置mysql-proxy,代理服務最好另外部署一臺機器,尤其是上線運行后,所以這里測試也是用了單獨一臺虛擬機,沒有部署在master或slave機器上。

?[root@localhost local]# tar -zxvf ?mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz ?//解壓

?[root@localhost local]# ln -s ??mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit ?mysql-proxy ??//加一個快捷鏈接

?[root@localhost local]# groupadd mysql-proxy  //創建用戶組

?[root@localhost local]# useradd -g mysql-proxy ??mysql-proxy  //創建用戶

?[root@localhost local]# cd mysql-proxy  //進入mysql-proxy目錄

?[root@localhost mysql-proxy]# chown -R root:mysql-proxy ?.  //更改目錄屬主和屬組,命令后面有一個點(.)表示當前目錄

?[root@localhost mysql-proxy]# vi ?/etc/profile.d/mysql-proxy.sh  //把mysql的bin目錄加到PATH變量中,

?export?PATH=$PATH:/usr/local/mysql-proxy/bin

?[root@localhost?mysql-proxy]# source /etc/profile ?  //讓配置文件立刻生效

?[root@localhost?mysql-proxy]# mysql-proxy ?--help-all  //查看mysql-proxy命令,出現如下信息:

?

下面我們啟動mysql-proxy,做一個簡單測試,不過我們先要簡單介紹一下mysql-proxy命令。

mysql-proxy 命令

  • --help-all ———— 用于獲取全部幫助信息

  • --proxy-address=host:port ———— 代理服務監聽的地址和端口

  • --admin-address=host:port ———— 管理模塊監聽的地址和端口

  • --proxy-backend-addresses=host:port ———— ? ?后端mysql服務器的地址和端口(主服務器)

  • --proxy-read-only-backend-addresses=host:port ———— ? ?后端只讀mysql服務器的地址和端口(從服務器)

  • --proxy-lua-script=file ———— 完成mysql代理功能的Lua腳本

  • --daemon ———— 以守護進程模式啟動mysql-proxy

  • --defaults-file=/path/to/conf_file_name ———— ? ?默認使用的配置文件路徑

  • --log-file=/path/to/log_file_name ———— 日志文件名稱

  • --log-level=level ———— 日志級別

  • --log-use-syslog ———— 基于syslog記錄日志

  • --user=user_name ———— 運行mysql-proxy進程的用戶

[root@localhost?mysql-proxy]# ?mysql-proxy ?--daemon --log-level=debug --log-file=/var/log/mysql-proxy.log ?--plugins="proxy" --proxy-backend-addresses="192.168.1.109:3306" ?--proxy-read-only-backend-addresses="192.168.1.110:3306"  //啟動mysql-proxy [root@localhost?mysql-proxy]# tail ?/var/log/mysql-proxy.log  //查看啟動日志

2014-05-10 00:09:22: (critical) plugin proxy 0.8.4 started
2014-05-10 ?00:09:22: (debug) max open file-descriptors = 1024
2014-05-10 00:09:22: ?(message) proxy listening on port :4040
2014-05-10 00:09:22: (message) added ?read/write backend: 192.168.1.109:3306
2014-05-10 00:09:22: (message) added ?read-only backend: 192.168.1.110:3306

[root@localhost?mysql-proxy]#netstat -ntulp | grep :4040  //查看監聽的端口

tcp ? ? ? ?0 ? ? ?0 0.0.0.0:4040 ? ?? ? ? ? ? ? ?0.0.0.0:* ? ? ? ?? ? ? ? ? ? LISTEN ? ? ??10056/mysql-proxy

現在我們需要在master服務器中創建一個遠程登入的mysql賬號

master:

mysql> GRANT ?ALL ON *.* TO root@‘192.168.1.%‘?IDENTIFIED BY?‘123456‘;? Query OK, 0 rows ?affected (0.07 sec) mysql> FLUSH ?PRIVILEGES;? Query OK, 0 rows ?affected (0.04 sec) 在從服務器上做測試: slave: [root@bogon ?~]# mysql -uroot -p123456 -h192.168.1.112 ?--port=4040? 這樣就連上了Mysql-Proxy服務器了,如果出現錯誤:ERROR 2003 ?(HY000): Can‘t connect to MySQL server on ‘192.168.1.112‘ ?(113),請修改防火墻配置或關閉。 下面我們來實現讀寫分離,Mysql-Proxy本身不會實現讀寫分離,主要是依靠 ?Lua 腳本實現的。 [root@localhost?mysql-proxy]# killall ?mysql-proxy  //殺掉mysql-proxy進程 [root@localhost?mysql-proxy]# netstat ?-ntlup | grep 4040  //查看進程是否停掉 [root@localhost?mysql-proxy]#?cd ?share/doc/mysql-proxy/? [root@localhost?mysql-proxy]#?ls ?| grep rw-splitting.lua  //查看讀寫分離腳本,lua語言實現 rw-splitting.lua [root@localhost?mysql-proxy]#?mysql-proxy ?--daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy" ?--proxy-backend-addresses="192.168.1.109:3306" ?--proxy-read-only-backend-addresses="192.168.1.110:3306" ?--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" [root@localhost?mysql-proxy]# 在slave ?服務器上做測試,ok,完成了,mysql-proxy實現mysql集群的讀寫分離完成了,這種模式是MySQL集群最為基本的一種模式,也能夠實現負載均衡,后續研究MySQL更深層次的集群,一同分享一同進步




? ? ?本文轉自yzy121403725 51CTO博客,原文鏈接:http://blog.51cto.com/lookingdream/1828403,如需轉載請自行聯系原作者



總結

以上是生活随笔為你收集整理的mysql集群一:主从复制,通过mysql-proxy做负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

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