Mysql双主双活+keepalived实现高可用
文件夹
1、前言... 4
2、方案... 4
2.1、环境及软件... 4
2.2、IP规划... 4
2.3、架构图... 4
3、安装设置MYSQL半同步... 5
4、Keepalived实现MYSQL的高可用... 11
1、前言
近期研究了下高可用的东西,这里总结一下mysql主主双活的架构方案,总体上提高服务的高可用性。出现故障也不须要手动切换。提高总体的维护效率。
确定改造的话,仅仅须要让他们的程序中使用vip地址就能够,实现起来比較easy。
2、方案
本案例先使用两台linux做双机MASTER-MASTER高可用(兴许能够考虑增加仅仅读SLAVER,用于提高查询性能),採用MYSQL5.6.x的半同步实现数据复制和同步。使用keepalived来监控MYSQL和提供VIP及浮动。不论什么一台主机宕机都不会影响对外提供服务(vip能够浮动),保持服务的高可用。
注 keepalived之间使用vrrp组播方式通信使用的IP地址是192.168.150.201
2.1、环境及软件
操作系统:RedHat 5.5
Keepalived:keepalived-1.2.12.tar.gz
MYSQL:MySQL-server- mysql-5.0.77-4.el5_4.2.x86_64.rpm MySQL-client- mysql-5.0.77-4.el5_4.2.x86_64.rpm
2.2、IP规划
名称
IP
备注
VIP
192.168.150.201
由KEEPALIVED产生的虚拟IP,也是前端client使用的IP
MYSQL_DB_MASTER1
192.168.150.145
数据库1server
MYSQL_DB_MASTER2
192.168.150.146
数据库2server
2.3、架构图
3、安装设置MYSQL半同步
3.1、安装MYSQL
这里选择的是使用社区版的MYSQL,请在www.mysql.com上下载相应操作系统的安装文件,这里依据官方的建议使用RPM包方式安装。也能够进行yum安装。
安装
假设是默认Redhat5.5安装后,
# 使用yum 安装 yum install mysql
yum install mysql-server
……
默认安装是在/usr以下。所以my.cnf是在/usr/my.cnf,这里为了习惯使用方法,复制到/etc/文件夹下
# mv /usr/my.cnf /etc/
标准方式改动password
# mysqladmin -u root -p oldPassword password
# New password:
# Confirm new password:
或
# mysqladmin -u root -p password newPassword
SQL直接更新方式改动password:
初始化rootpassword常见问题及处理
error: 'Access denied for user 'root'@'localhost' (usingpassword: NO)'
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables--skip-networking &
# mysql -u root mysql
mysql> UPDATE user SETPassword=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysql restart
# mysql -uroot -p
Enter password:
mysql>
设置网络訪问权限
MYSQL的用户訪问策略是须要指定用户从某IP能够訪问那些权限。
详细使用方法请參考grant命令。这里为了简单起见,直接设置root用户在整个局域内(192.168.150.*)都能够訪问数据库。
# mysql -uroot -p
******
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'192.168.150.%' IDENTIFIEDBY 'password' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
这样设置后,就能够通过内网的其它机器訪问数据库了。
改动数据文件路径
mysql安装后。默认的数据存储路径在/var/lib/mysql下。
这里改动为/data/mysql
# service mysql stop
# mkdir /data/mysql
# cp -r /var/lib/mysql/* /data/mysql
# chown -R mysql:mysql /data/mysql
vi /etc/my.cnf
改动里面的參数
[mysqld]
datadir= /data/mysql
socket= /data/mysql/mysql.sock
# 顺便配置下MYSQL使用mysql用户启动
user=mysql
保存退出
为/data/mysql/mysql.sock建立指向/var/lib/mysql/mysql.sock的软连接
# ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock
启动MYSQL并測试
# service mysql start
# mysql -uroot -p
******
mysql>
最可能出现的问题(假设你是Redhat6.x或CentOS6.x):selinux 照成服务无法正常启动,报错:
Starting MySQL. ERROR! The server quit without updatingPID file (/data/mysql/xxxxx.pid).
验证问题方法:
# setenforce 0
# service mysql start
Starting MySQL. SUCCESS!
假设能正常启动,解决这个问