共计 23174 个字符,预计需要花费 58 分钟才能阅读完成。
一、总概:
本文介绍了 MySQL 高可用性的实现方案 MHA,MHA 由 Node 和 Manager 组成,Node 运行在每一台 MySQL 服务器上,不管是 MySQL 主服务器,还是 MySQL 从服务器,都要安装 Node。主从安装 keepalived,实现虚拟 ip 漂移,程序不用改 IP 自动切换。
二、环境
1、操作系统:CentOS 6.5 64 位
2、数据库:MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar 下载
3、MHA 版本:mha4mysql-node-0.54-0.el6.noarch.rpm,
mha4mysql-manager-0.54-0.el6.noarch.rpm
4、keepalived 版本:
5、主机部署:
manager 机:192.168.1.201
master 机:192.168.1.231
slave1 机:192.168.1.232(备用 master)
6、大致步骤:
(1)、安装 MYSQL 5.6.
(2)、MYSQL 配置主重复制.
(3)、首先用 ssh-keygen 实现四台主机之间相互免密钥登录.
(4)、安装 MHAmha4mysql-node,mha4mysql-manager 软件包
(5)、在 MHA 配置 master,slave1 的相关文件。(6)、管理机 manager 上配置 MHA 文件
(7)、masterha_check_ssh 工具验证 ssh 信任登录是否成功
(8)、masterha_check_repl 工具验证 mysql 复制是否成功
(9)、启动 MHA manager, 并监控日志文件.
(10)、测试 master 宕机后,是否会自动切换。(11)、主从安装 keepalived,实现虚拟 ip 漂移。
三、mysql 安装
1、下载 MYSQL 5.5
wget http://cdn.mysql.com/Downloads/MySQL-5.6/MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar
tar -cf MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar
2、解压后文件有:
MySQL-client-5.6.17-1.el6.x86_64.rpm
MySQL-devel-5.6.17-1.el6.x86_64.rpm
MySQL-embedded-5.6.17-1.el6.x86_64.rpm
MySQL-server-5.6.17-1.el6.x86_64.rpm
MySQL-shared-5.6.17-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm
MySQL-test-5.6.17-1.el6.x86_64.rpm
注意:其实只要安装,服务器端MySQL-server-5.6.17-1.el6.x86_64.rpm 客户端 MySQL-client-5.6.17-1.el6.x86_64.rpm 及MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm(可以解决一些兼容性)
3、安装
rpm -ivh MySQL-client-5.6.17-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.17-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm
4、可能会报的错:
(1)、已有数据库的存在
[root@localhost local]# rpm -ivh MySQL-server-5.6.17-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
file /usr/share/mysql/charsets/Index.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/armscii8.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/ascii.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/cp1250.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
说明:系统中已存在 mysql-libs-5.1.71-1.el6.x86_64 必须把它卸载掉。解决方法:
yum -y remove mysql-libs-5.1.71*
(2)、缺少一下依赖的组件
error: Failed dependencies:
/usr/bin/perl is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1()(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
解决方法:
yum install perl
yum install libaio
再重新安装,安装成功。默认 root 没有密码,端口为:3306.
5、由于是 RPM 安装的所以在 /etc/ 下没有 MYSQL 的 my.cnf 文件。解决方法:
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
这样可以修改 MYSQL 的一些配置文件了。
6、mysql 启动、停止、重启。
service mysql start 或 /etc/init.d/mysql start
service mysql stop 或 /etc/init.d/mysql stop
service mysql restart 或 /etc/init.d/mysql restart
7、创建用户,用于主从复制的账号
CREATE USER 'sunney'@'%' IDENTIFIED BY 'sunney';
8、用户授权
grant privileges ON databasename.tablename TO ‘username’@’host’ identified by “password”;grant all privileges ON *.* TO 'sunney'@'%' identified by "sunney";
FLUSH PRIVILEGES //修改生效
9、已可以远程访问数据库了。
如上步骤两台主机:231、232 都按已上步骤安装 MYSQL.
四、建产 mysql 主从数据库配置
[master:231]
1.shell>vi /etc/my.cnf
server-id=1
log-bin=mysql-bin
binlog_format=mixed
2.mysql>show master status;
[slave1]
3.change master 操作
mysql>change master to
master_host='192.168.1.231',
master_port=3306,
master_user='sunney',
master_password='sunney',
master_log_file='mysql-bin.000001',
master_log_pos=112;
[master,slave1]
4. 查看主从复制是否成功的一些命令
mysql>start slave;
mysql>stop slave;
mysql>reset slave;
mysql>show slave status\G;
5. 所有主机上设置复制权限帐号
mysql>GRANT ALL PRIVILEGES ON*.*TO'sunney'@'%'IDENTIFIED BY 'sunney';
注意:
(1)、master_log_file=’mysql-bin.000001′,master_log_pos=112;
这两名是通过 maste 中用:show master status;查出来的。
(2)、master与 slave 的server-id 是不能相同,否则不能同步成功。
slave 的 server-id 可以通过修改 /etc/my.cnf 或
mysql> set global server_id=2; #此处的数值和 my.cnf 里设置的一样就行。
五、总结
数据库的安装及 master 与 slave配置成功,可以进行主从同步了!主从同步的常见错误,其实不外乎就是网络、权限、iptables、SELinux 等问题,我们平时注意检查这些问题,处理起来应该不是很困难,大家记得关闭 iptables(或开通对应的端口)和 SELinux, 注意 Slave_IO_Running 和 Slave_SQL_Running 状态必须确保主 Yes 才行,另外也要注意从机的 Seconds_Behind_Master 值及主从机的server-id 不可以相同!
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-06/132065p2.htm
Linux 下 HAProxy+Keepalived 双机高可用方案 http://www.linuxidc.com/Linux/2016-02/128566.htm
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
一、总概
1、MHA 介绍
MHA(Master High Availability)是自动的 master 故障转移和 Slave 提升的软件包. 它是基于标准的 MySQL 复制 (异步 / 半同步).
MHA 有两部分组成:MHA Manager(管理节点) 和 MHA Node(数据节点).
MHA Manager 可以单独部署在一台独立机器上管理多个 master-slave 集群, 也可以部署在一台 slave 上.MHA Manager 探测集群的 node 节点, 当发现 master 出现故障的时候, 它可以自动将具有最新数据的 slave 提升为新的 master, 然后将所有其 它的 slave 导向新的 master 上. 整个故障转移过程对应用程序是透明的。
MHA node 运行在每台 MySQL 服务器上(master/slave/manager), 它通过监控具备解析和清理 logs 功能的脚本来加快故障转移的。
2、MHA 工作原理
- 从宕机崩溃的 master 保存二进制日志事件 (binlog events)。
- 识别含有最新更新的 slave。
- 应用差异的中继日志(relay log) 到其它 slave。
- 应用从 master 保存的二进制日志事件(binlog events)。
- 提升一个 slave 为新 master。
- 使其它的 slave 连接新的 master 进行复制。
3、MHA 工具包:
(1)、Manager 工具:
– masterha_check_ssh : 检查 MHA 的 SSH 配置。
– masterha_check_repl : 检查 MySQL 复制。
– masterha_manager : 启动 MHA。
– masterha_check_status : 检测当前 MHA 运行状态。
– masterha_master_monitor : 监测 master 是否宕机。
– masterha_master_switch : 控制故障转移(自动或手动)。
– masterha_conf_host : 添加或删除配置的 server 信息。
(2)、Node 工具(这些工具通常由 MHA Manager 的脚本触发, 无需人手操作)。
– save_binary_logs : 保存和复制 master 的二进制日志。
– apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它 slave。
– filter_mysqlbinlog : 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)。
– purge_relay_logs : 清除中继日志(不会阻塞 SQL 线程)。
二、主机部署
manager 机:192.168.1.201 manager 安装:mha4mysql-manager-0.54-0.el6.noarch.rpm
master 机:192.168.1.231 节点安装:mha4mysql-node-0.54-0.el6.noarch.rpm
slave1 机:192.168.1.232(备用 master) 节点安装:mha4mysql-node-0.54-0.el6.noarch.rpm
三、首先用 ssh-keygen 实现三台主机之间相互免密钥登录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[manager-- 201 ] 1 、生成证书 shell> ssh-keygen -t rsa -b 2048 // 一直按回车直接生成。 shell> scp id_rsa.pub root @192 .168. 1.231 :/root/.ssh/ // 复现到主机 231 shell> scp id_rsa.pub root @192 .168. 1.232 :/root/.ssh/ // 复现到主机 232 2 . 在主机 231 、 232 中 /root/.ssh/ 下 执行 cat id_rsa.pub >> authorized_keys // 导入公钥到 /root/.ssh/authorized_keys 文件中 3 . 测试 201 无密登录到 231 、 232 ssh 192.168 . 1.231 ssh 192.168 . 1.232 [node-- 231 、 232 ] 重复执行上面的步骤。 通过 ssh 测试任何两台主机间两两可以无密登录。 |
注意:如果不能实现任何两台主机间两两可以无密登录,后面的步骤会有问题。
四、安装 MHAmha4mysql-node,mha4mysql-manager 软件包
1、manager mha4mysql-manager 软件安装
[manager--201]
shell> yum install perl
shell> yum install cpan
shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm
error:
perl(Config::Tiny) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch::File) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.53-0.noarch
perl(Parallel::ForkManager) is needed by mha4mysql-manager-0.53-0.noarch
perl(Time::HiRes) is needed by mha4mysql-manager-0.53-0.noarch
说明有很多依赖包没有安装,解决方法:
shell> wget ftp://ftp.muug.mb.ca/mirror/CentOS/5.10/os/x86_64/CentOS/perl-5.8.8-41.el5.x86_64.rpm
shell> wget ftp://ftp.muug.mb.ca/mirror/centos/6.5/os/x86_64/Packages/compat-db43-4.3.29-15.el6.x86_64.rpm
shell> wget http://downloads.naulinux.ru/pub/NauLinux/6x/i386/sites/School/RPMS/perl-Log-Dispatch-2.27-1.el6.noarch.rpm
shell> wget http://dl.Fedoraproject.org/pub/epel/6/i386/perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
shell> wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-Time-HiRes-1.9721-136.el6.x86_64.rpm
shell> rpm -ivh perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-Time-HiRes-1.9721-136.el6.x86_64.rpm
再安装
shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm
2、node MHAmha4mysql-node 软件安装
shell>wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
shell>rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
shell>wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54-0.el6.noarch.rpm
shell>rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
安装过程可能会报错 (具体错误我没有记下) 都是依赖包的问题,这么解决吧
shell>yum install perl-MIME-Lite
yum install perl-Params-Validate
五、MHA 的配置
1、管理机 manager 上配置 MHA 文件
shell> mkdir -p /masterha/app1 //创建目录
shell> mkdir /etc/masterha //创建目录
shell> vi /etc/masterha/app1.cnf //创建配置文件
[server default]
user=root //linux 用于管理 mysql 用戶名
password=sunney //linux 用于管理 mysql 密码
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
remote_workdir=/masterha/app1
ssh_user=root //ssh 免密钥登录的帐号名
repl_user=sunney //mysql 复制帐号,用来在主从机之间同步二进制日志等
repl_password=sunney //mysql 密码
ping_interval=1 //ping 间隔,用来检测 master 是否正常
[server1]
hostname=192.168.1.231
#ssh_port=9999
master_binlog_dir=/var/lib/mysql //mysql 数据库目录不同的安装方式目录不一样
candidate_master=1 //master 机宕掉后, 优先启用这台作为新 master
[server2]
hostname=192.168.1.232
#ssh_port=9999
master_binlog_dir=/var/lib/mysql
candidate_master=1
2、masterha_check_ssh 工具验证 ssh 信任登录是否成功
[manager:201]
shell> masterha_check_ssh --conf=/etc/masterha/app1.cnf
注意:用 ssh-keygen 实现三台主机之间相互免密钥登录决定这一步是否成功。
Wed Apr 23 22:10:01 2014 - [debug] ok.
Wed Apr 23 22:10:01 2014 - [info] All SSH connection tests passed successfully.
成功!
3、masterha_check_repl 工具验证 mysql 复制是否成功
[manager:201]
shell> masterha_check_repl --conf=/etc/masterha/app1.cnf
注意:上一篇文章中的 master–slaver 是否成功决定这一步是否成功。或是 MHA 文件配置的用户账号有关。
Wed Apr 23 22:10:56 2014 - [info] Checking replication health on 192.168.1.232..
Wed Apr 23 22:10:56 2014 - [info] ok.
Wed Apr 23 22:10:56 2014 - [warning] master_ip_failover_script is not defined.
Wed Apr 23 22:10:56 2014 - [warning] shutdown_script is not defined.
Wed Apr 23 22:10:56 2014 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
成功。
4、启动 MHA manager, 并监控日志文件
[manager:201]
shell> nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1
shell> tail -f /masterha/app1/manager.log //这名最好在新窗口执行
结果:
Thu Apr 24 04:41:03 2014 - [info] Slaves settings check done.
Thu Apr 24 04:41:03 2014 - [info]
192.168.1.231 (current master)
+--192.168.1.232
Thu Apr 24 04:41:03 2014 - [warning] master_ip_failover_script is not defined.
Thu Apr 24 04:41:03 2014 - [warning] shutdown_script is not defined.
Thu Apr 24 04:41:03 2014 - [info] Set master ping interval 1 seconds.
Thu Apr 24 04:41:03 2014 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.
Thu Apr 24 04:41:03 2014 - [info] Starting ping health check on 192.168.1.231(192.168.1.231:3306)..
Thu Apr 24 04:41:03 2014 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
5、测试 master(231)宕机后,是否会自动切换
[master--231]
shell>service mysql stop
[manager--201]
shell>tail -f tail -f /masterha/app1/manager.log
----- 日志显示如下 ------
-------- Failover Report -----
app1: MySQL Master failover 192.168.1.231 to 192.168.1.232 succeeded
Master 192.168.1.231 is down!
Check MHA Manager logs at localhost.localdomain:/masterha/app1/manager.log for details.
Started automated(non-interactive) failover.
The latest slave 192.168.1.232(192.168.1.232:3306) has all relay logs for recovery.
Selected 192.168.1.232 as a new master.
192.168.1.232: OK: Applying all logs succeeded.
Generating relay diff files from the latest slave succeeded.
192.168.1.232: Resetting slave info succeeded.
Master failover to 192.168.1.232(192.168.1.232:3306) completed successfully.
6、故障转移后,用命令恢复原来的 master
(1)、在旧 master 上执行
1. 在旧 master 上执行
shell>service mysql start // 数据库启动
shell>mysql -usunney -psunney
mysql> reset master;
mysql> change master to master_host='192.168.1.232', master_port=3306, master_user='sunney', master_password='sunney', master_log_file='mysql-bin.000031', master_log_pos=112;
mysql> start slave; #暂时先把旧 master 变为 slave
(2)然后在 manager 节点上:
shell> masterha_master_switch --master_state=alive --conf=/etc/masterha/app1.cnf
过程中一直输入 YES;
这样的话 mysql 主从机进行了切换。可以测试一下数据在新的 master(232)的表中新增数据后,在新 slave(231)对应的表中是否已实现数据同步。
六、MHA 已完成配置并进行了测试。但如果是程序连接数据库并不会自动切换 IP, 那我们如何实现呢,请期待一篇keepalive + VIP 安装配置。
一、总概:
本文介绍了 MySQL 高可用性的实现方案 MHA,MHA 由 Node 和 Manager 组成,Node 运行在每一台 MySQL 服务器上,不管是 MySQL 主服务器,还是 MySQL 从服务器,都要安装 Node。主从安装 keepalived,实现虚拟 ip 漂移,程序不用改 IP 自动切换。
二、环境
1、操作系统:CentOS 6.5 64 位
2、数据库:MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar 下载
3、MHA 版本:mha4mysql-node-0.54-0.el6.noarch.rpm,
mha4mysql-manager-0.54-0.el6.noarch.rpm
4、keepalived 版本:
5、主机部署:
manager 机:192.168.1.201
master 机:192.168.1.231
slave1 机:192.168.1.232(备用 master)
6、大致步骤:
(1)、安装 MYSQL 5.6.
(2)、MYSQL 配置主重复制.
(3)、首先用 ssh-keygen 实现四台主机之间相互免密钥登录.
(4)、安装 MHAmha4mysql-node,mha4mysql-manager 软件包
(5)、在 MHA 配置 master,slave1 的相关文件。(6)、管理机 manager 上配置 MHA 文件
(7)、masterha_check_ssh 工具验证 ssh 信任登录是否成功
(8)、masterha_check_repl 工具验证 mysql 复制是否成功
(9)、启动 MHA manager, 并监控日志文件.
(10)、测试 master 宕机后,是否会自动切换。(11)、主从安装 keepalived,实现虚拟 ip 漂移。
三、mysql 安装
1、下载 MYSQL 5.5
wget http://cdn.mysql.com/Downloads/MySQL-5.6/MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar
tar -cf MySQL-5.6.17-1.el6.x86_64.rpm-bundle.tar
2、解压后文件有:
MySQL-client-5.6.17-1.el6.x86_64.rpm
MySQL-devel-5.6.17-1.el6.x86_64.rpm
MySQL-embedded-5.6.17-1.el6.x86_64.rpm
MySQL-server-5.6.17-1.el6.x86_64.rpm
MySQL-shared-5.6.17-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm
MySQL-test-5.6.17-1.el6.x86_64.rpm
注意:其实只要安装,服务器端MySQL-server-5.6.17-1.el6.x86_64.rpm 客户端 MySQL-client-5.6.17-1.el6.x86_64.rpm 及MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm(可以解决一些兼容性)
3、安装
rpm -ivh MySQL-client-5.6.17-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.17-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.17-1.el6.x86_64.rpm
4、可能会报的错:
(1)、已有数据库的存在
[root@localhost local]# rpm -ivh MySQL-server-5.6.17-1.el6.x86_64.rpm
Preparing... ########################################### [100%]
file /usr/share/mysql/charsets/Index.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/armscii8.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/ascii.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
file /usr/share/mysql/charsets/cp1250.xml from install of MySQL-server-5.6.17-1.el6.x86_64 conflicts with file from package mysql-libs-5.1.71-1.el6.x86_64
说明:系统中已存在 mysql-libs-5.1.71-1.el6.x86_64 必须把它卸载掉。解决方法:
yum -y remove mysql-libs-5.1.71*
(2)、缺少一下依赖的组件
error: Failed dependencies:
/usr/bin/perl is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1()(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1(LIBAIO_0.1)(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
libaio.so.1(LIBAIO_0.4)(64bit) is needed by MySQL-server-5.6.17-1.el6.x86_64
解决方法:
yum install perl
yum install libaio
再重新安装,安装成功。默认 root 没有密码,端口为:3306.
5、由于是 RPM 安装的所以在 /etc/ 下没有 MYSQL 的 my.cnf 文件。解决方法:
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
这样可以修改 MYSQL 的一些配置文件了。
6、mysql 启动、停止、重启。
service mysql start 或 /etc/init.d/mysql start
service mysql stop 或 /etc/init.d/mysql stop
service mysql restart 或 /etc/init.d/mysql restart
7、创建用户,用于主从复制的账号
CREATE USER 'sunney'@'%' IDENTIFIED BY 'sunney';
8、用户授权
grant privileges ON databasename.tablename TO ‘username’@’host’ identified by “password”;grant all privileges ON *.* TO 'sunney'@'%' identified by "sunney";
FLUSH PRIVILEGES //修改生效
9、已可以远程访问数据库了。
如上步骤两台主机:231、232 都按已上步骤安装 MYSQL.
四、建产 mysql 主从数据库配置
[master:231]
1.shell>vi /etc/my.cnf
server-id=1
log-bin=mysql-bin
binlog_format=mixed
2.mysql>show master status;
[slave1]
3.change master 操作
mysql>change master to
master_host='192.168.1.231',
master_port=3306,
master_user='sunney',
master_password='sunney',
master_log_file='mysql-bin.000001',
master_log_pos=112;
[master,slave1]
4. 查看主从复制是否成功的一些命令
mysql>start slave;
mysql>stop slave;
mysql>reset slave;
mysql>show slave status\G;
5. 所有主机上设置复制权限帐号
mysql>GRANT ALL PRIVILEGES ON*.*TO'sunney'@'%'IDENTIFIED BY 'sunney';
注意:
(1)、master_log_file=’mysql-bin.000001′,master_log_pos=112;
这两名是通过 maste 中用:show master status;查出来的。
(2)、master与 slave 的server-id 是不能相同,否则不能同步成功。
slave 的 server-id 可以通过修改 /etc/my.cnf 或
mysql> set global server_id=2; #此处的数值和 my.cnf 里设置的一样就行。
五、总结
数据库的安装及 master 与 slave配置成功,可以进行主从同步了!主从同步的常见错误,其实不外乎就是网络、权限、iptables、SELinux 等问题,我们平时注意检查这些问题,处理起来应该不是很困难,大家记得关闭 iptables(或开通对应的端口)和 SELinux, 注意 Slave_IO_Running 和 Slave_SQL_Running 状态必须确保主 Yes 才行,另外也要注意从机的 Seconds_Behind_Master 值及主从机的server-id 不可以相同!
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2016-06/132065p2.htm
Linux 下 HAProxy+Keepalived 双机高可用方案 http://www.linuxidc.com/Linux/2016-02/128566.htm
Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm
Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm
CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm
Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm
Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm
一、概述
keepalive d 介绍:Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人 工做的只是修复故障的 web 服务器。
二、环境
1
2
3
|
vip: 192.168 . 1.203 \ 204 MySQL-master: 192.168 . 1.231 mysql-slave: 192.168 . 1.232 |
三、keepalive d 安装
安装步骤两台机 mysql-master、mysql-slave 一样,如下:
1、下载地址:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
1
|
shell>wget http: //www.keepalived.org/software/keepalived-1.2.12.tar.gz |
2、安装环境
1
|
yum -y install openssl-devel |
否则会报如下错误
1
2
3
|
configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. |
3、安装
1
2
3
4
5
|
shell>tar -zxvf keepalived- 1.2 . 12 .tar.gz shell>cd keepalived- 1.2 . 12 shell>./configure --prefix=/opt/keepalived --with-kernel-dir=/usr/src/kernels/ 2.6 . 32 - 431 .el6.x86_64/ shell>make shell>make install |
说明:
–prefix:安装路径
–with-kernel-dir:这个是重要的参数,这个参数并不表示我们要把 Keepalived 统进内核,而是指使用内核源码里面的头文件,也就是 include 目录。
2.6.32-431.el6.x86_64 可以通过
1
|
shell>uname -r 命令查看到 |
4、配置
1
2
3
4
5
|
# cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ # cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ # mkdir /etc/keepalived # cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ # cp /opt/keepalived/sbin/keepalived /usr/sbin/ |
5、启动 / 停止
1
2
3
|
shell>service keepalived start shell>service keepalived stop shell>service keepalived restart |
四、keepalive d 配置
1、mysql-master:192.168.1.231 的配置
1
|
shell>vim /etc/keepalived/keepalived.conf |
配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
global_defs { router_id mysql-master #修改为自己的主机名 notification_email { mengtao10 @163 .com #接收邮件,可以有多个,一行一个 } # 当主、备份设备发生改变时,通过邮件通知 notification_email_from lzyangel @126 .com # 发送邮箱服务器 smtp_server stmp. 163 .com # 发送邮箱超时时间 smtp_connect_timeout 30 } ################## 第一部分 ################### vrrp_instance VI_1 { state BACKUP #都修改成 BACKUP interface eth0 #绑定的网卡 virtual_router_id 60 # 默认 51 主从都修改为 60 priority 100 # 优先级,在 mysql-slave 上 LVS 上修改成 80 advert_int 1 nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来 authentication { # 认证方式,可以是 PASS 或 AH 两种认证方式 auth_type PASS # 认证密码 auth_pass 1111 } virtual_ipaddress { 192.168 . 1.203 192.168 . 1.204 # 这可以增加多个 VIP } } ################## 第二部分 ################### virtual_server 192.168 . 1.203 3306 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255 . 255.0 persistence_timeout 50 protocol TCP real_server 192.168 . 1.231 3306 { weight 1 notify_down /root/mysql_down.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 3306 } } } |
2、mysql-master:192.168.1.232 的配置
1
|
shell>vim /etc/keepalived/keepalived.conf |
配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
global_defs { router_id mysql-master #修改为自己的主机名 notification_email { mengtao10 @163 .com #接收邮件,可以有多个,一行一个 } # 当主、备份设备发生改变时,通过邮件通知 notification_email_from lzyangel @126 .com # 发送邮箱服务器 smtp_server stmp. 163 .com # 发送邮箱超时时间 smtp_connect_timeout 30 } ################## 第一部分 ################### vrrp_instance VI_1 { state BACKUP #都修改成 BACKUP interface eth0 #绑定的网卡 virtual_router_id 60 # 默认 51 主从都修改为 60 priority 80 # 优先级,在 mysql-master 上 LVS 上修改成 100 advert_int 1 authentication { # 认证方式,可以是 PASS 或 AH 两种认证方式 auth_type PASS # 认证密码 auth_pass 1111 } virtual_ipaddress { 192.168 . 1.203 192.168 . 1.204 # 这可以增加多个 VIP } } ################## 第二部分 ################### virtual_server 192.168 . 1.203 3306 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255 . 255.0 persistence_timeout 50 protocol TCP real_server 192.168 . 1.232 3306 { weight 1 notify_down /root/mysql_down.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 3306 } } } |
3、myslq_down.sh 配置,两台机都要配置这一步!!!
这里需要注意的是,notify_down /root/mysql_down.sh 这个选项,这个是是在 keepalived 检测不到 mysql 的时候要执行的脚本,从上面的配置文件来看 real 服务器只有本机。那么,keeaplived 如果启动,客户端也只是访问本机的 mysql。nopreempt 这个选下也得注意,这个是不抢占资源在优先级高的机器上配置就可以。
看下这个脚本的内容:
1
2
3
4
|
# vim /root/mysql_down.sh #!/bin/bash pkill keepalived # chmod +x /root/mysql_down.sh #授权可执行权限 |
脚本内容就一条命令:pkill keepalived,主要作用是如果本机的 mysql 挂掉了,那么同时会杀死本机的 keepalived,这样另外一台就会接替他工作,虚拟 IP 也会被另一台接管,如果不杀死 keepalived 虚拟 IP 不会被另一台接管,mysql 访问也就不会切换过去。
注意:必须要先启动 MYSQL, 再启动 keepalived,否则 keepalived 启动后会运行 mysql_down.sh 脚本,等于自杀。
4、mysql-master(231)启动后查看 IP 的绑定情况,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
shell> ip a 1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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 08 : 00 : 27 :cc: 92 : 22 brd ff:ff:ff:ff:ff:ff inet 192.168 . 1.232 / 24 brd 192.168 . 1.255 scope global eth0 inet 192.168 . 1.203 / 32 scope global eth0 inet 192.168 . 1.204 / 32 scope global eth0 inet6 fe80::a00:27ff:fecc: 9222 / 64 scope link valid_lft forever preferred_lft forever |
五、测试
1、231、232 两台机同时启动 MYSQL 及 Keepalived.
通过 win cmd 命令行的客户端 (或程序) 连接 VIP:192.168.1.203 或 204,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
C:\Users\Duncan>mysql -h192. 168.1 . 203 -usunney -psunney Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1440 Server version: 5.5 . 37 -log MySQL Community Server (GPL) Copyright (c) 2000 , 2011 , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sunney | | test | +--------------------+ 5 rows in set ( 0.04 sec) mysql> |
注意:这时存储的数据库是 mysql-master(192.168.1.231)因为他是主库。配置 priority 100 优先级高。
2、mysql-slave(232)的机同时关闭 MYSQL 及 Keepalived. 这时关闭上以上的是一样的。因为他没有走这个库。
3、mysql-master(231)同时关闭 MYSQL 及 Keepalived,mysql-slave(232)同时启动 MYSQL 及 Keepalived
切换很快,大概在 2 到 3 秒之间!
通过 win cmd 命令行的客户端 (或程序) 连接 VIP:192.168.1.203 或 204,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
C:\Users\Duncan>mysql -h192. 168.1 . 203 -usunney -psunney Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1440 Server version: 5.5 . 37 -log MySQL Community Server (GPL) Copyright (c) 2000 , 2011 , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sunney | | test | +--------------------+ 5 rows in set ( 0.04 sec) mysql> |
成功!
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132065.htm