1. 程式人生 > >lvs+keepalived+tomcat+mysql集群

lvs+keepalived+tomcat+mysql集群

架構 主從復制 集群 lvs+keepalived

技術分享圖片



2臺Tomcat服務器配置虛擬IP實例

SNS_VIP 的網段需要使用ifconfig查看你的IP


SNS_VIP=192.168.110.200

. /etc/rc.d/init.d/functions

case "$1" in

start)

ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP

/sbin/route add -host $SNS_VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo "RealServer Start OK"

;;

stop)

ifconfig lo:0 down

route del $SNS_VIP >/dev/null 2>&1

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "RealServer Stoped"

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

esac

exit 0


授權

chmod 750 realserver

啟動

service realserver start


再次ifconfig查詢虛擬IP是否配置成功



2臺服務器安裝keepalived

yum –y install keepalived


配置keepalived.conf文件,安裝的位置可能不能,本實例采用默認安裝文件(/etc/keepalived/keepalived.conf

global_defs {

# notification_email {

# [email protected]

# }

# notification_email_from [email protected]

# smtp_server smtp.exmail.qq.com

# smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER ##備份LVS服務器設置為BACKUP

interface eth0 # #設置對外服務的接口

virtual_router_id 51

priority 100 #設置優先級,數值越大,優先級越高,backup設置為99,這樣就能實現當master宕機後自動將backup變為master,而當原master恢復正常時,則現在的master再次變為backup

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.110.200 ##設置VIP,可以多個,每個占一行。 此 IP也是對外映射的IP

}

}

virtual_server 192.168.110.200 80 {

delay_loop 6

lb_algo wrr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 0

protocol TCP

real_server 192.168.110.5 80 {

weight 6

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 192.168.110.6 80 {

weight 3

TCP_CHECK {

connect_timeout 10

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

對於udp的監聽,由於keepalived不直接支持,需要使用MISC_CHECK健康檢查,MISC_CHECK此方法根據shell腳本的返回值做判斷,具體參考keepalived手冊



啟動keepalived

service keepalived start


3臺MySQL數據庫安裝,數據庫的安裝請參考http://blog.51cto.com/9695005/2054161

1,mysql主服務器的配置

配置my.cnf

設置server-id和log-bin,主服務器和從服務器server-id不能一樣,

可以使用查看

SHOW VARIABLES LIKE 'server_id';


重啟mysql服務器

service mysqld restart

1) Mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+

2) 記錄下 FILE Position 的值,在後面進行從服務器操作的時候需要用到。

添加一個用戶,給從服務器使用

grant replication slave on *.* to 'gool'@'192.168.110.25' identified by 'gool'

2配置從服務器

change master to

master_host='主服務器ip',

master_user='gool',

master_password='gool',

master_log_file='mysql-bin.000001',

master_log_pos=106;

1) 正確執行後啟動Slave同步進程

2) 啟動slave

mysql> start slave;

3) 查看slave狀態

mysql> show slave status\G

4) 其中Slave_IO_Running Slave_SQL_Running 的值都必須為YES,才表明狀態正常。

測試主從復制

1:先確定主,從庫上沒有任何自定義表

2:主服務器上的操作
在主服務器上創建數據庫gool_db
mysql> create database gool_db;

在主服務器上創建表itcast_tb
mysql> create table gool_tb(id int(3),name char(9));

在主服務器上的表itcast_tb中插入記錄
mysql> insert into gool_tb values(01,'gool1');

3:從服務器上查看是否已經同步?

總結:搭建過程中可能引起失敗的原因

1:server_id 配置的一樣或是配置的沒有更新到Mysql數據中來

2:防火墻攔截了3306端口

3:用戶與密碼不正確

4:Mysql不允許其它機器訪問


mysql-proxy服務器配置

查看lua是否安裝

rpm -qa | grep lua


安裝依賴

yum -y install gcc* gcc-c++*autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig* libevent* glib* readline*


tar xzvfmysql-proxy-**.tar.gz
cd mysql-proxy-**
cp lib/rw-splitting.lua /opt/mysql-proxy/scripts --此目錄自己創建

修改默認連接,進行快速測試,不修改的話要達到連接數為4時才啟用讀寫分離

vim /opt/mysql-proxy/scripts/rw-splitting.lua
=============================
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, //默認為4
max_idle_connections = 1, //默認為8
is_debug = false
}


啟動mysql-proxy

./mysql-proxy --proxy-backend-addresses="IP:數據庫端口" --proxy-read-only-backend-addresses="IP:數據庫端口" --proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua


最後:

配置web項目,啟動,測試環境

lvs+keepalived+tomcat+mysql集群