设为首页 收藏本站
查看: 818|回复: 0

[经验分享] keepalived+mysql主从实现数据库冗余

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-24 11:28:36 | 显示全部楼层 |阅读模式
     keepalived+mysql主从实现数据库冗余
一、安装mysql,并设置主备服务器

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

# vi /etc/scripts/mysql.sh

##/bin/bash

rpm -Uvh http://dl.fedoraproject.org/pub/ ... ease-6-8.noarch.rpm

yum -y install mysql mysql-server mysql-devel

#定义一个数值Level(设置数据库主从)
echo "Enter the "Master"(1) or "slave"=(2)"
read Level
#定义一个数值mysql(需要同步的具体某个数据库,需要同步所有数据库,就将这段以及后面有关代码删掉即可)
echo "Enter the Sync database"
read mysql                    

cat > /etc/my.cnf <<Eof

#做一些数据库优化
[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 = $Level

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

binlog-do-db = $mysql
replicate-do-db = $mysql

log-slave-updates
sync_binlog = 1
auto_increment_offset = $Level
auto_increment_increment = 2

Eof

service mysqld restart
chkconfig mysqld on

2、添加脚本执行权限

# chmod  /etc/scripts/mysql.sh

二、安装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

#定义虚拟路由,主备要一样
echo "virtual_router_id:"
read virtual_router_id


cat > /etc/keepalived/keepalived.conf <<Eof
#! 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


echo "Enter the database password"
read password


cat /etc/keepalived/check_slave.sh <<Eof
##/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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103451-1-1.html 上篇帖子: MySQL事务及隔离级别 下篇帖子: MySQL数据乱码 数据库 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表