mysql双库冗余_keepalived+mysql双主实现数据库冗余

本文介绍了如何通过keepalived和mysql双主模式实现数据库冗余,确保高可用性。详细步骤包括:安装mysql,设置主服务器,授权同步账号,配置并启动slave复制,以及安装和配置keepalived来管理虚拟IP。
摘要由CSDN通过智能技术生成

keepalived+mysql双主实现数据库冗余

主1:172.16.114.15

主2:172.16.114.16

一、安装mysql,并设置主服务器

1、将下面的代码复制到一个后缀为.sh的shell脚本文件中(脚本很容易看懂)

# vi /etc/scripts/mysql.sh

##/bin/bash

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum -y install mysql mysql-server mysql-devel

#定义一个数值mysql(需要同步的具体某个数据库,需要同步所有数据库,就将这段以及后面有关代码删掉即可)

echo "Enter the Sync database"

read mysql

cat > /etc/my.cnf <

#做一些数据库优化

[mysql]

# CLIENT #

port                           = 3306

socket                         = /var/lib/mysql/mysql.sock

[mysqld]

# GENERAL #

user                           = mysql

default-storage-engine         = InnoDB

socket                         = /var/lib/mysql/mysql.sock

pid-file                       = /var/lib/mysql/mysql.pid

# MyISAM #

key-buffer-size                = 32M

myisam-recover                 = FORCE,BACKUP

# SAFETY #

max-allowed-packet             = 16M

max-connect-errors             = 1000000

# DATA STORAGE #

datadir                        = /var/lib/mysql/

# BINARY LOGGING #

log-bin                        = /var/lib/mysql/mysql-bin

expire-logs-days               = 14

sync-binlog                    = 1

# REPLICATION #

relay-log                      = /var/lib/mysql/relay-bin

slave-net-timeout              = 60

# CACHES AND LIMITS #

tmp-table-size                 = 32M

max-heap-table-size            = 32M

query-cache-type               = 0

query-cache-size               = 0

max-connections                = 500

thread-cache-size              = 50

open-files-limit               = 65535

table-definition-cache         = 4096

table-open-cache               = 4096

# INNODB #

innodb-flush-method            = O_DIRECT

innodb-log-files-in-group      = 2

innodb-log-file-size           = 128M

innodb-flush-log-at-trx-commit = 2

innodb-file-per-table          = 1

innodb-buffer-pool-size        = 2G

# LOGGING #

log-error                      = /var/lib/mysql/mysql-error.log

log-queries-not-using-indexes  = 1

slow-query-log                 = 1

slow-query-log-file            = /var/lib/mysql/mysql-slow.log

srver-id = 1  #主1设置为1,主2设置为2

#需要同步整个数据库就将下面两段代码删掉

binlog-do-db = $mysql

replicate-do-db = $mysql

log-bin=mysql-bin   #要开起二进制日志

log-slave-updates   #同步更新

Eof

service mysqld restart

chkconfig mysqld on

2、添加脚本执行权限

# chmod  /etc/scripts/mysql.sh

3、授权mysql允许其同步数据库的帐号

(1)在两台机上开启slave复制

mysql> flush tables;

mysql>show master status\G;

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

File: mysql-bin.000002

Position: 106

Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

ERROR:

No query specified

mysql> slave stop

-> ;

Query OK, 0 rows affected(0.00 sec)

mysql>  CHANGE MASTER TOMASTER_HOST='172.16.114.16',MASTER_PORT=3306, MASTER_USER='loyu', MASTER_PASSWORD='123456',  MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=106;

# 在主2只需修改(地址指向主1)MASTER_HOST='172.16.114.15

Query OK, 0 rows affected(0.03 sec)

mysql> start slave;

Query OK, 0 rows affected(0.00 sec)

mysql>show slave status\G;

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

Slave_IO_State: Waiting formaster to send event

Master_Host: 172.16.114.16

Master_User: loyu

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 106

Relay_Log_File:mysqld-relay-bin.000002

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

....

(2)测试

主1:

在主1上创建数据库

mysql> create databaseliuyuqing;

Query OK, 1 row affected(0.01 sec)

mysql> use liuyuqing;

Database changed

mysql> create tableloyu(number int);

Query OK, 0 rows affected(0.02 sec)

mysql> insert into loyuvalues(1011);

Query OK, 1 row affected (0.00 sec)

在主2上查看复制情况

(可以看到数据库已经同步成功)

0818b9ca8b590ca3270a3433284dd417.png

主2:

在第主2上创建数据库

0818b9ca8b590ca3270a3433284dd417.png

在主1上查看数据库复制情况

(可以看到数据也是同步过来的)

0818b9ca8b590ca3270a3433284dd417.png

二、安装keepalived

1、将如下代码复制到后缀名为.sh的shell脚本文件

# vi /etc/scripts/keepalived.sh

##!/bin/bash

yum install keepalived -y

#定义keepalived的虚拟IP

echo "VIP:"

read VIP

#定义主服务器,还是备份服务器

echo "MASTER OR BACKUP:"

read state

#定义优先级

echo "priority: (MASTER:100 BACKUP:99)"

read priority

#定义虚拟路由id,主备要一样

echo "virtual_router_id:"

read virtual_router_id

cat > /etc/keepalived/keepalived.conf <

#! Configuration File for keepalived

global_defs {

#router_id mysql-ha1 #修改为自己的主机名

}

vrrp_script chk_haproxy {

script "/etc/keepalived/chk_slave.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state $state #都修改成BACKUP

interface eth0

virtual_router_id $virtual_router_id #默认51 主从都修改为60

priority $priority #在mysql-ha2上LVS上修改成80

advert_int 1

#     nopreempt #不抢占资源,意思就是它活了之后也不会再把主抢回来

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_haproxy

}

virtual_ipaddress {

$VIP

}

}

Eof

# 检查数据库服务状态,一旦服务停止,keepalived也停止

echo "Enter the database password"

read password

cat /etc/keepalived/check_slave.sh <

##/bin/bash

Mysql=$(mysql -uroot -p$password -N -s -e "select 10")

if [ $? -ne 0 ] || [ "$Mysql" -ne "10" ];then

service keepalived stop

exit 1

else

SlaveStatus=($(mysql -uroot -p$password -e "show slave status\G;"|grep "_Running"|awk '{print  $NF}'))

if [ "$SlaveStatus[0]" = "No" ] || [  "${SlaveStatus[1]}" = "No" ];then

service keepalived stop

fi

fi

Eof

2、添加脚本执行权限

# chmod  /etc/scripts/keepalived.sh

三、接下来就可以用自己定义的VIP来访问数据库了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值