一、        安装两台mysql服务器

MySQL1上安装MySQL-5.6.15

1.     安装数据库软件(MySQL-5.6.15

 [root@MySQL1~]# tar -xv -f MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar -C /tmp/

[root@MySQL1 tmp]# rpm -Uvh MySQL-*.rpm

2.     拷贝主配置文件,启动服务,初始化数据库。

[root@MySQL1 tmp]# cp/usr/share/mysql/my-default.cnf /etc/my.cnf

[root@MySQL1 tmp]# /etc/init.d/mysqlstart

[root@MySQL1 tmp]# cat/root/.mysql_secret  //MySQL-5.6.15不允许空密码登录,安装时自动设置密码,初次登录密码。

[root@MySQL1 tmp]# mysql -u root -p

Enter password:    //输入安装时自动生成的密码。

3.     修改root用户从本地登录数据库的密码,然后以新密码登录测试。

mysql> set password for root@'localhost'=password('xiaoke');  //修改root密码

mysql> exit   //退出数据库

[root@MySQL1 tmp]# mysql -u root –p

Enter password:     //输入更改后的密码:xiaoke

测试登录成功。

4.     设置MySQL服务开机自启动

[root@MySQL1 tmp]# chkconfig mysql on

[root@MySQL1 tmp]# chkconfig --list mysql

mysql       0:关闭  1:关闭   2:启用   3:启用   4:启用   5:启用   6:关闭

MySQL2上安装MySQL-5.6.15,安装过程同MySQL1

二、        两台MySQL互为主从搭建

MySQL1作为MySQL2的主数据服务器

1.     MySQL1上做用户授权,使MySQL2可以登录MySQL1服务器。

mysql> grant replication slave on *.*to slaveuser@'%' identified by 'slaveuser';

2.     编辑MySQL1数据库的主配置文件

[mysqld]

……

log_bin = MySQL1-bin   //开启并设置binlog名称

server_id = 5   //两台服务器的id号不能相同,另一台设置为6

……

3.     重新启动MySQL1数据库服务器,登录并查看主数据服务器的状态。

[root@MySQL1 ~]# /etc/init.d/mysqlrestart

[root@MySQL1 ~]# mysql -u root –pxiaoke

mysql> show master status\G

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

File: MySQL1-bin.000001

Position: 120

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

4.     登录MySQL2数据库服务器,并将其配置为MySQL1的从数据库服务器

[root@MySQL2 ~]# mysql -u root –pxiaoke

mysql> change master to

   -> master_host='100.1.1.5',

   -> master_user='slaveuser',

   -> master_password='slaveuser',

   -> master_log_file='MySQL1-bin.000001',

   -> master_log_pos=120;

mysql> start slave;

mysql> show slave status\G    //查看从服务器的状态

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

Slave_IO_State: Waiting for master to sendevent

Master_Host: 100.1.1.5

Master_User: slaveuser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: MySQL1-bin.000001

Read_Master_Log_Pos: 120

Relay_Log_File: MySQL2-relay-bin.000002

Relay_Log_Pos: 284

Relay_Master_Log_File: MySQL1-bin.000001

Slave_IO_Running: Yes    //登录成功,即连接成功。

Slave_SQL_Running: Yes   //数据连接传输成功。

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 120

Relay_Log_Space: 458

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 5

Master_UUID:28fc3e49-d548-11e3-b1a2-000c29f5f6bc

Master_Info_File:/var/lib/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has readall relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

MySQL2作为MySQL1的主数据服务器

1.     MySQL2上做用户授权,使MySQL1可以登录MySQL2服务器。

mysql> grant replication slave on *.*to slaveuser@'%' identified by 'slaveuser';

2.     编辑MySQL2数据库的主配置文件

[mysqld]

……

log_bin = MySQL2-bin   //开启并设置binlog名称

server_id = 6   // 由于不能和MySQL1的一致,所以将其设置为6

……

3.     重新启动MySQL2数据库服务器,登录并查看主数据服务器的状态。

[root@MySQL1 ~]# /etc/init.d/mysqlrestart

[root@MySQL1 ~]# mysql -u root –pxiaoke

mysql> show master status\G

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

File: MySQL2-bin.000001

Position: 120

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

4.     登录MySQL1数据库服务器,并将其配置为MySQL2的从数据库服务器

[root@MySQL2 ~]# mysql -u root –pxiaoke

mysql> change master to

-> master_host='100.1.1.5',

-> master_user='slaveuser',

-> master_password='slaveuser',

->master_log_file='MySQL1-bin.000001',

-> master_log_pos=120;

mysql> start slave;

mysql> show slave status\G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 100.1.1.6

Master_User: slaveuser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: MySQL2-bin.000001

Read_Master_Log_Pos: 120

Relay_Log_File: MySQL1-relay-bin.000002

Relay_Log_Pos: 284

Relay_Master_Log_File: MySQL2-bin.000001

Slave_IO_Running: Yes    //登录成功,即连接成功。

Slave_SQL_Running: Yes   //数据连接传输成功。

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 120

Relay_Log_Space: 458

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 6

Master_UUID: 620bc0fe-d54d-11e3-b1c4-000c29149913

Master_Info_File: /var/lib/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting forthe slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

两台MySQL数据库服务器互为主从搭建成功!

三、        安装keepalived,实现高可用(HA)数据库集群

MySQL1上安装配置keepalived

1.     安装软件(keepalived-1.2.7

[root@MySQL1 tmp]# yum -y install  gcc gcc-C++ kernel-devel openssl-develpopt-devel

[root@MySQL1 tmp]# tar -zxv -fkeepalived-1.2.7.tar.gz -C /usr/src/

[root@MySQL1 tmp]# cd/usr/src/keepalived-1.2.7/

[root@MySQL1 keepalived-1.2.7]# ./configure--sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/&& make && make install

[root@MySQL1 ~]# ln -s/usr/local/sbin/keepalived /sbin/

2.     MySQL1上配置keepalived

[root@MySQL1 ~]# vim/etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

  notification_email {     //设置报警邮件

     handetian@126.com     //报警收件人邮件地址

   }

   notification_email_fromxiaoke@localhost    //发送报警邮件的地址

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id MySQL_ha

}

 

vrrp_instance VI_1 {

    state BACKUP     //两台此处均为BACKUP

    interface eth0

    virtual_router_id 51

    priority 100  //优先级,另一台改为90

    advert_int 1

    nopreempt  //不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

    authentication {

        auth_type PASS

        auth_pass han-mysql   //两台密码一致,均为:han-mysql

    }

    virtual_ipaddress {

        100.1.1.200   

    }

}

 

virtual_server 100.1.1.200 3306 {

    delay_loop 2  //每隔2秒检查一次real_server状态

    lb_algo wrr   //LVS算法

    lb_kind DR     //LVS模式

    persistence_timeout 60    //会话保持时间

    protocol TCP

    real_server 100.1.1.5 3306{

        weight 3

        notify_down/usr/local/shell/bin/MySQL.sh  //检测到服务down后执行的脚本

        TCP_CHECK {

            connect_timeout 10    //连接超时时间

            nb_get_retry 3    //重试次数

            delay_before_retry3    //重连间隔时间

            connect_port 3306   //健康检查端口

        }

    }

}

3.     编写检测到服务down之后所需要执行的脚本

[root@MySQL1 ~]# mkdir -p/usr/local/shell/bin/

[root@MySQL1 ~]# vim /usr/local/shell/bin/MySQL.sh

#!/bin/bash

pkill -9 keepalived

4.     启动keepalived的服务

[root@MySQL1 ~]# /etc/init.d/keepalivedstart

MySQL2上安装配置keepalived,步骤同上,不同之处,以在上述配置过程中标明。

四、  调整网卡和内核参数

1.     调整网卡参数(两台数据库修改一致

[root@MySQL1 ~]# cd/etc/sysconfig/network-scripts/

[root@MySQL1 network-scripts]# cpifcfg-lo{,:0}

[root@MySQL1 network-scripts]# cat ifcfg-lo:0

DEVICE=lo:0

IPADDR=100.1.1.200    //虚拟数据库IP地址

NETMASK=255.255.255.255

BROADCAST=100.1.1.200 

ONBOOT=yes

NAME=loopback

2.     调整内核参数(两台数据库修改一致

[root@MySQL1 ~]# tail /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_announce = 2

五、 测试

MySQL远程登录测试

CT-client客户端上做登录测试,看登录虚拟数据库服务器(VIP)是否成功,在登录之前两台MySQL都要做授权允许从远程登录。

1.     授权远程登录

[root@MySQL1 ~]# mysql -u root –pxiaoke

mysql> grant all privileges on *.* todiscuz@'%' identified by 'discuz';

[root@MySQL2 ~]# mysql -u root –pxiaoke

mysql> grant all privileges on *.* todiscuz@'%' identified by 'discuz';

2.     客户端登录测试

[root@CT-client ~]# mysql -h 100.1.1.200-udiscuz –pdiscuz

登录成功!!!