lnmp nginx mysql雙主+keepalived

 

 三臺服務器
 10.10.10.50  node1    nginx服務器
 10.10.10.51  node2    mysql1
 10.10.10.52  node3    mysql2php

 10.10.10.5    keepalived vrrp iphtml

 

 關閉selunxnode

 [root@node2 ~]# vim /etc/selinux/config
 SELINUX=disabled 
[root@node3 ~]# vim /etc/selinux/config
 SELINUX=disabled

 若是安裝mysql 出現 Can't create test file /data/node2.lower-test ,說明selinux 忘記關了mysql

 關閉iptables
linux

 service iptables stop
 chkconfig iptables off

一 安裝設置mysqlnginx

[root@node2 ~]# yum -y install mysql-server
[root@node3 ~]# yum -y install mysql-server

 在node2 mysql設置sql

手動指定mysql數據目錄數據庫

[root@node2 ~]# mkdir /data
[root@node2 /]# /usr/bin/mysql_install_db --user=mysql --datadir=/data/
[root@node2 ~]# service mysqld start

設置mysql root密碼vim

[root@node2 ~]# mysql
mysql> use mysql
Database changed
mysql> update user set password=password('root') where user='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> exit
[root@node2 ~]# service mysqld stop

 若是直接myssqladmin 設置完密碼沒法進入mysql,以下操做centos

#mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

開啓另一個新的終端

mysql -u root mysql
update user set password=password('root') where user='root';
flush privileges;

 配置mysql

[root@node2 ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@node2 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
[root@node2 ~]# vim /etc/my.cnf
[mysqld]
datadir         = /data/
server-id       = 51             #修改id兩個服務器必須不一樣,通常指定爲IP最後一段

 重起一次mysql 設置mysqladmin密碼

[root@node2 ~]# service mysqld stop
[root@node2 ~]# service mysqld start
[root@node2 ~]# mysqladmin -u root password 'root'

測試輸入密碼鏈接

[root@node2 ~]# mysql -uroot -proot

 在node3 mysql設置

 手動指定mysql數據目錄

[root@node3 ~]# mkdir /data
[root@node3 /]# /usr/bin/mysql_install_db --user=mysql --datadir=/data/
[root@node3 ~]# service mysqld start

 設置mysql root密碼

[root@node3 ~]# mysql
mysql> use mysql
Database changed
mysql> update user set password=password('root') where user='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> exit
[root@node3 ~]# service mysqld stop

配置mysql

[root@node3 ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@node3 ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
[root@node3 ~]# vim /etc/my.cnf
[mysqld]
datadir         = /data/
server-id       = 52             #修改id兩個服務器必須不一樣,通常指定爲IP最後一段

 重起一次mysql 設置mysqladmin密碼

[root@node3 ~]# service mysqld stop
[root@node3 ~]# service mysqld start
[root@node3 ~]# mysqladmin -u root password 'root'

 測試輸入密碼鏈接

ot@node3 ~]# mysql -uroot -proot

 配置mysql主主

建立同步帳號 格式以下

grant replication slave  
on *.*  
to '賬號' @ '從服務器IP' identified by '密碼';

在兩個mysql服務器建立同步帳號 rep 密碼 rep

# mysql -uroot -proot
mysql> use mysql
Database changed
mysql>grant replication slave  
on *.*  
to 'rep'@'%' identified by 'rep';
mysql> select * from user where user = 'rep' \G;

在mysql2服務器執行同步

先查詢mysql1的 狀態

mysql> show master status;

wKioL1ZGxYDx_9I9AAAYyCdUoxs840.png

File             mysql-bin.000001

Position     391   

填入對應的sql參數

mysql> change master to master_host='10.10.10.51',master_user='rep',master_password='rep',master_log_file='mysql-bin.000001',master_log_pos=391;
Query OK, 0 rows affected (0.03 sec)

 啓動同步

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

查看同步狀態

mysql> show slave status \G

wKioL1ZGxcCQI_uCAABENLSIX_E066.png

 Slave_IO_Running: Yes
Slave_SQL_Running: Yes  同步成功

 

在mysql1服務器執行同步

先查詢mysql2的 狀態

mysql> show master status;

wKioL1ZGxeChQTA7AAAY9XwDawU676.png

File             mysql-bin.000001

Position     386

填入對應的sql參數

mysql> change master to master_host='10.10.10.52',master_user='rep',master_password='rep',master_log_file='mysql-bin.000001',master_log_pos=386;
Query OK, 0 rows affected (0.03 sec)

啓動同步

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

查看同步狀態

mysql> show slave status \G

wKioL1ZGxhfjolsnAABEHEEbIso896.png 

驗證同步設置

在mysql1建立一個數據庫wordpress和一個表test 並插入一個字段

mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)
mysql> use wordpress 
Database changed
mysql> create table test(id int(3));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values (1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

 在mysql2查詢

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)
mysql> use wordpress;
Database changed
mysql> select * from test;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

 在mysql2 插入wordpress test 一個值

mysql> insert into test values (2);
Query OK, 1 row affected (0.00 sec)
mysql> 
mysql> select * from test;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

 在mysql1查詢

mysql> select * from test;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

同步成功

 

二   安裝keepalived

yum -y install keepalived

 受權mysql容許使用三個ip 鏈接  

mysql -uroot -proot
mysql> grant all on *.* to root@'10.10.10.5' identified by 'root';
mysql>grant all on *.* to root@'10.10.10.51' identified by 'root';
mysql>grant all on *.* to root@'10.10.10.52' identified by 'root';

 編緝keepalived 配置文件

[root@node2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER              #主服務器
    interface eth0
    virtual_router_id 51
    priority 100              #優先級
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.5            #VRRP 虛擬IP  VIP
    }
}
virtual_server 10.10.10.5 3306 {     #鏈接的端口
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 10.10.10.51 3306 {   #本機服務的IP端口
        weight 1
        notify_down /data/script/keepalived.sh   #檢測失敗執行的腳本,中止keepalive
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 3306
        }
    }
}

複製配置文件到另外一服務器 

[root@node2 ~]# scp /etc/keepalived/keepalived.conf 10.10.10.52:/etc/keepalived/keepalived.conf
[root@node3 ~]# vim  /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP              #修改成backup服務器
    interface eth0
    virtual_router_id 51
    priority 90               #優先級改小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.5
    }
}
virtual_server 10.10.10.5 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 10.10.10.52 3306 {     #本機服務的IP端口
        weight 1
        notify_down /data/script/keepalived.sh   #檢測失敗執行的腳本,中止keepalive
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 3306
        }
    }
}

/data/script/keepalived.sh 的內容 ,在兩個服務器執行

[root@node2 ~]# mkdir /data/script
[root@node2 ~]# vim /data/script/keepalived.sh
#!/bin/bash
service keepalived stop
[root@node2 ~]# chmod +x  /data/script/keepalived.sh

完成後 在兩個服務器啓動mysqld 和 keepalived

service mysqld start
service keepalived start

查看IP狀態 ,VIP 在node2

[root@node2 ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:05:71:e9 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.51/24 brd 10.10.10.255 scope global eth0
    inet 10.10.10.5/32 scope global eth0
    inet6 fe80::20c:29ff:fe05:71e9/64 scope link 
       valid_lft forever preferred_lft forever
[root@node3 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:80:b9:0a brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.52/24 brd 10.10.10.255 scope global eth0
    inet6 fe80::20c:29ff:fe80:b90a/64 scope link 
       valid_lft forever preferred_lft forever

測試mysql 鏈接  

mysql -h10.10.10.5 -uroot -proot mysql

 中止mysql1

[root@node2 ~]# service mysqld stop

查看IP狀態  VIP 在node3

[root@node2 script]# ip addr show    
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:05:71:e9 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.51/24 brd 10.10.10.255 scope global eth0
    inet6 fe80::20c:29ff:fe05:71e9/64 scope link 
       valid_lft forever preferred_lft forever
 [root@node3 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:80:b9:0a brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.52/24 brd 10.10.10.255 scope global eth0
    inet 10.10.10.5/32 scope global eth0
    inet6 fe80::20c:29ff:fe80:b90a/64 scope link 
       valid_lft forever preferred_lft forever

設置mysqld 和 keepalived 開機啓動

chkconfig mysqld on
chkconfig keepalived on

 

三 安裝wordpress

yum -y install httpd php php-mysql
service httpd start
wget  https://cn.wordpress.org/wordpress-4.3.1-zh_CN.zip
unzip wordpress-4.3.1-zh_CN.zip
cp -rf  wordpress/ /var/www/html/

打開 http://10.10.10.51/wordpress/wp-admin/setup-config.php

設置數據庫鏈接後複製生產的wp-config.php粘貼

vim /var/www/html/wp-config.php

複製配置文件到第二臺服務器

scp /var/www/html/wp-config.php 10.10.10.52:/var/www/html/

打開第二臺服務器,能夠直接查看 

http://10.10.10.52/wordpress

 

四 安裝nginx

wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm 

yum install nginx

配置nginx

vim /etc/nginx/conf.d/default.conf
 upstream wordpress {
    server 10.10.10.51:80;
    server 10.10.10.52:80;
}
server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_pass http://wordpress;
        root   /wordpress;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

打開 http://10.10.10.50/wordpress/

關閉node2 的 mysql 自動切換到 node3

關閉node3的mysql  , 鏈接數據庫出錯

 

 

mysql 在node2中止後  keepalived  在node2 執行腳本中止自已 ,服務自動切換到node3

node3 中止後 ,node2的 keepalived 和mysqld要手動啓動

沒有開啓vrrp搶佔 ,node2 的keepalived恢復後 ,VRRP不會自動切換到node2,數據庫鏈接依然在node3

相關文章
相關標籤/搜索