一、 安装两台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 �Cp
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 �Cpxiaoke
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 �Cpxiaoke
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 �Cpxiaoke
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 �Cpxiaoke
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 { //设置报警邮件
[email protected] //报警收件人邮件地址
}
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 �Cpxiaoke
mysql> grant all privileges on *.* todiscuz@'%' identified by 'discuz';
[root@MySQL2 ~]# mysql -u root �Cpxiaoke
mysql> grant all privileges on *.* todiscuz@'%' identified by 'discuz';
2. 客户端登录测试
[root@CT-client ~]# mysql -h 100.1.1.200-udiscuz �Cpdiscuz
登录成功!!!