Nginx負載平衡+mysql主從複製、讀寫分離+tomcat項目

來源:互聯網
上載者:User

標籤:nginx   mysql   tomcat   負載平衡   amoeba   讀寫分離   

Nginx負載平衡+mysql主從複製、讀寫分離+tomcat項目


架構:(因為資源有限,只有兩台虛機)

1192.168.137.3Nginx、Mysql(主)、Tomcat1、Tomcat2

2192.168.137.5Mysql(從)


系統版本:centos 7


192.168.137.3

1、先安裝 Nginx ,方便以後用


2、安裝mysql

file /usr/share/mysql/charsets/swe7.xml from install of MySQL-server-5.6.13-1.linux_glibc2.5.x86_64 conflicts with file from package mariadb-libs-1:5.5.52-1.el7.x86_64


yum remove mariadb-libs


[[email protected] local]# rpm -ivh MySQL-server-5.6.13-1.linux_glibc2.5.x86_64.rpm 

準備中...                          ################################# [100%]

正在升級/安裝...

   1:MySQL-server-5.6.13-1.linux_glibc################################# [100%]

Can‘t locate Data/Dumper.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/mysql_install_db line 42.

BEGIN failed--compilation aborted at /usr/bin/mysql_install_db line 42.

[[email protected] local]# yum install ‘perl(Data::Dumper)‘

[[email protected] local]# rpm -e MySQL-server

[[email protected] local]# rpm -ivh MySQL-server-5.6.13-1.linux_glibc2.5.x86_64.rpm 

準備中...                          ################################# [100%]

正在升級/安裝...

   1:MySQL-server-5.6.13-1.linux_glibc################################# [100%]

一定要記得初始化!!!!!真是醉了

[[email protected] ~]# mysql_install_db


[[email protected] ~]# cp /usr/share/mysql/my-default.cnf /etc/my.cnf


[[email protected] ~]# service mysql start                          

Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).


[[email protected] ~]# vi /etc/my.cnf  並在設定檔中添加log-error = /var/log/mysql.log ;log檔案在初始化時產生

[[email protected] ~]# chown -R mysql:mysql /var/lib/mysql/

[[email protected] ~]# service mysql start                 

Starting MySQL. SUCCESS!


/usr/bin/mysqladmin -u root password ‘123123‘




3、安裝tomcat


安裝jdk

解壓進入目錄

JAVA_HOME=/usr/local/jdk1.7.0_09

CLASSPATH=$JAVA_HOME/lib/

PATH=$PATH:$JAVA_HOME/bin

export PATH JAVA_HOME CLASSPATH


[[email protected] jdk1.7.0_09]# vi /etc/profile

[[email protected] jdk1.7.0_09]# source /etc/profile

[[email protected] jdk1.7.0_09]# java -version

java version "1.7.0_09"

Java(TM) SE Runtime Environment (build 1.7.0_09-b05)

Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)


安裝tomcat

解壓進入目錄

[[email protected] local]# mv apache-tomcat-6.0.44 tomcat

[[email protected] local]# vi /etc/profile

export TOMCAT_HOME=/usr/local/tomcat


安裝tomcat2

解壓進入目錄

[[email protected] local]# mv apache-tomcat-6.0.44 tomcat2

[[email protected] local]# vi /etc/profile

export TOMCAT_HOME2=/usr/local/tomcat2


修改相應的連接埠

比如8081


關閉firewalld 用戶端測試


192.168.137.5安裝mysql(同上面安裝一樣)


4、配置mysql讀寫分離,先要設定主從

主mysql:


#GRANT REPLICATION SLAVE,RELOAD,SUPER ON  *.* TO ‘cp‘@‘%‘ IDENTIFIED BY ‘123123‘ WITH GRANT OPTION;

注意:以上這行不能使用!!!!在配置讀寫分離的時候,操作資料庫許可權不夠,用以下語句!!!!!!


grant all privileges on *.* to ‘cp‘@‘%‘ identified by ‘123123‘ WITH GRANT OPTION;



從mysql:

編輯設定檔

server-id = 222

relay-log = /data/relaylogs/relay-bin



mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.137.3‘,MASTER_PORT=3306,MASTER_USER=‘cp‘,MASTER_PASSWORD=‘123123‘,MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=2186726;


ERROR 29 (HY000): File ‘/data/relaylogs/relay-bin.index‘ not found (Errcode: 13 - Permission denied)

上述原因是:/data/relaylogs/relay-bin.index這個檔案沒有找到,需要touch這個檔案!!!!


上述命令成功後,start slave

然後用:show slave status\G  查看是否正確


問題1:在更改已經存在的庫,從mysql報錯Slave_SQL_Running: No


解決辦法:

mysql> reset slave ;

mysql> stop slave ;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> start slave ;


問題2:在master上已經存在的資料庫,無法同步到slave上


解決辦法:

重新設定主從!!!!!!!!!!!!!!!


重新設定主從---接著上面的操作

1、進入主庫,進行鎖表,防止資料寫入

mysql> flush tables with read lock;

2、在從庫上,直接備份遠端資料庫到本地目錄下

mysqldump -h 192.168.137.3 -ucp -p123123 --databases erpBack >erpBack.bak.sql

3、在從庫上,停止slave

mysql> stop slave ;

4、建立erpBack庫,並匯入資料

mysql> create database erpBack ;

mysql> use erpBack ;

mysql> source /root/erpBack.bak.sql

5、在主庫上,解鎖表;並查看二進位日誌資訊;並記錄

mysql> unlock tables ;

mysql> show master status;

6、在從庫上,重新設定串連資訊

CHANGE MASTER TO MASTER_HOST=‘192.168.137.3‘,MASTER_PORT=3306,MASTER_USER=‘cp‘,MASTER_PASSWORD=‘123123‘,MASTER_LOG_FILE=‘mysql-bin.000006‘,MASTER_LOG_POS=120;

7、啟動slave;查看主從狀態

mysql> start slave ;

mysql> show slave status\G

8、在主庫上,更新erpBack庫資料;並在從庫上查看是否運行正常!!

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


問題3:第二天重啟系統後,show slave status\G  顯示錯誤:

Slave_IO_Running: No

Slave_SQL_Running: No

啟動start slave,顯示錯誤:

ERROR 29 (HY000): File ‘/data/relaylogs/relay-bin.index‘ not found (Errcode: 13 - Permission denied)


解決:show master status; 重新設定主從

mysql> reset slave ;重設slave,再重新設定slave


mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.137.3‘,MASTER_PORT=3306,MASTER_USER=‘cp‘,MASTER_PASSWORD=‘123123‘,MASTER_LOG_FILE=‘mysql-bin.000009‘,MASTER_LOG_POS=467;


mysql> start slave ;

mysql> show slave status\G 查看是否正確



配置mysql讀寫分離,利用amoeba


https://sourceforge.net/projects/amoeba/files/


下載最新版;並解壓

unzip amoeba-mysql-3.0.4-BETA-distribution.zip

mv amoeba-mysql-3.0.4-BETA amoeba

cd amoeba

chmod +x bin/


vi conf/amoeba.xml


#設定用戶端串連的參數:連接埠、使用者名稱、密碼等資訊

<property name="user">root</property>

<property name="password">root</property>


#設定主從的寫與讀;原設定檔以下內容是注釋掉的,這裡需要開啟

<property name="writePool">server1</property>

<property name="readPool">server2</property>


vi conf/dbServers.xml

#這裡設定串連主從資料庫的參數:連接埠、資料庫、使用者名稱、密碼


<!-- mysql port -->

                        <property name="port">3306</property>


                        <!-- mysql schema -->

                        <property name="schema">erpBack</property>


                        <!-- mysql user -->

                        <property name="user">cp</property>


                        <property name="password">123123</property>

eg:這裡需要注意,主從mysql都需要開啟遠端存取功能,並設定的使用者名稱與密碼相同!!


#設定主從的ip地址;注意:原生話也IP地址代替


        <dbServer name="server1"  parent="abstractServer">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.137.3</property>

                </factoryConfig>

        </dbServer>


        <dbServer name="server2"  parent="abstractServer">

                <factoryConfig>

                        <!-- mysql ip -->

                        <property name="ipAddress">192.168.137.5</property>

                </factoryConfig>

        </dbServer>

啟動amoeba

bin/launcher &


查看logs

tail -f logs/net.log

用戶端測試:

mysql -h 192.168.137.3 -P8066 -uroot -proot



配置Nginx代理

#servers

    upstream  test.com {

ip_hash;

server    127.0.0.1:8080;

server    127.0.0.1:8081;

    }

#以上是每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。


proxy_pass http://test.com;

proxy_redirect default;


最後,在用戶端測試!



本文出自 “mysky” 部落格,轉載請與作者聯絡!

Nginx負載平衡+mysql主從複製、讀寫分離+tomcat項目

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.