iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql主主+keepalived高可用
  • 630
分享到

mysql主主+keepalived高可用

2024-04-02 19:04:59 630人浏览 泡泡鱼
摘要

Mysql主主+keepalived高可用 1.两台主机 host: db1 外网:11.0.0.51 内网:172.16.1.51 db2 外网:11.0.0.52 内网:172.16.1.52

Mysql主主+keepalived高可用

1.两台主机

host:
db1  外网:11.0.0.51  内网:172.16.1.51
db2  外网:11.0.0.52  内网:172.16.1.52

2.两台主机分别下载mysql

cd /usr/chris/src
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar
useradd mysql -u 550 -s /sbin/nologin -M
tar xf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.24

3.db1数据库操作

ln -s /usr/local/mysql-5.7.24 /usr/local/mysql

vim /etc/my.cnf 
#begin
[mysqld]
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISioN_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
datadir=/data/mysql/data
basedir=/usr/local/mysql

Socket=/tmp/mysql.sock
user=mysql
symbolic-links=0

#slow log
slow-query-log=ON
slow_query_log_file=/data/mysql/data/log/mysql_slow_query.log
long_query_time=3
log_queries_not_using_indexes = OFF
log-slave-updates=true

gtid-mode=on
enforce-gtid-consistency=true

ft_min_Word_len = 2
net_buffer_length = 8K
max_allowed_packet = 64M
wait_timeout = 180000
interactive_timeout=180000
thread_cache_size = 128
thread_stack = 512K
table_open_cache = 512
join_buffer_size    = 16M
sort_buffer_size    = 16M
log-error = /data/mysql/log/error.log

log_slave_updates = 1
#character_name:value
character-set-server=utf8  
collation-server=utf8_general_ci

log_bin = OFF
log-bin = mysql-bin
#relay-log = mysql-bin
server-id = 20
#auto_increment_offset = 2
#auto_increment_increment = 2
max_connections = 2000
group_concat_max_len = 2000
max_allowed_packet = 1024M
innodb_buffer_pool_size = 512M

read-only=0
binlog-ignore-db=mysql
binlog-ignore-db=infORMation_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=amh

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
###end

4.创建数据目录,修改启动

mkdir /data/mysql/{data,log} -p
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

#启动脚本修改
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql/data

#环境变量修改(加入mysql路径)
vim ~/.bash_profile
MYSQL_HOME=/usr/local/mysql
export PATH=$JAVA_HOME/bin:$PATH:$MYSQL_HOME/bin

source ~/.bash_profile
#初始化启动
chown -R mysql:mysql /data/mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

#如果看见错误提示error while loading shared libraries: libaio.so.1,代表缺少了库文件,安装一下就可以了
yum install  libaio-devel.x86_64 -y

/etc/init.d/mysqld start

mysql -uroot -p
输入初始密码:
mysql> set password for root@localhost = PASSWORD('123456');
mysql> flush privileges;
###这里db1数据库就配置完成了。

5.db2配置大致相同,就是配置文件需要修改

vim /etc/my.cnf
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

datadir=/data/mysql/data
basedir=/usr/local/mysql

socket=/tmp/mysql.sock
user=mysql
symbolic-links=0

#slow log
slow-query-log=ON
slow_query_log_file=/data/mysql/data/log/mysql_slow_query.log
long_query_time=3
log_queries_not_using_indexes = OFF

log-slave-updates = true
ft_min_word_len = 2
net_buffer_length = 8K
max_allowed_packet = 64M
wait_timeout = 180000
interactive_timeout=180000
thread_cache_size = 128
thread_stack = 512K
table_open_cache = 512
join_buffer_size    = 16M
sort_buffer_size    = 16M
log-error = /data/mysql/log/error.log

log_slave_updates = 1
#character_name:value
character-set-server=utf8  
collation-server=utf8_general_ci

log_bin = OFF
log-bin = mysql-bin
#relay-log = mysql-bin
server-id = 21
#auto_increment_offset = 2
#auto_increment_increment = 2
max_connections = 2000
group_concat_max_len = 2000
max_allowed_packet = 1024M
innodb_buffer_pool_size = 512M

gtid-mode=on
enforce-gtid-consistency=true

read-only=0
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=amh

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#启动修改密码:
/etc/init.d/mysqld start
mysql -uroot -p
password:

mysql> set password for root@localhost = PASSWORD('123456');
mysql> flush privileges;

6.数据库主主设置(互为主从)

--------------------------db1操作:--------------------------
mysql -uroot -p123456

mysql> grant replication slave on *.* to 'rep'@'172.16.1.52' identified by '123456';
mysql> flush privileges;
mysql> show master status\G
*************************** 1. row ***************************
                         File: mysql-bin.000015
                 Position: 234
         Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql,information_schema,performance_schema,amh
Executed_Gtid_Set: 79a90ed3-fa86-11e7-ac66-000c29542a93:1-3,
9238586c-fa86-11e7-acab-000c29f6ed58:1-5
1 row in set (0.00 sec)

###【这一步需要自己查看主库最新mysql-bin和pos,下面有查看】
mysql> change master to
         > master_host='172.16.1.52',
         > master_user='rep',
         > master_password='123456',
         > master_log_file='mysql-bin.000024',   #这个地方是主库的最新mysql-bin
         > master_log_pos='234';                        #主库的最新pos

mysql> start slave;
mysql> show slave status\G

###生产环境如果要修改数据库架构不建议这么做,适合新部署,开启gtid功能
###mysql> stop slave;
###mysql> change master to MASTER_AUTO_POSITION=1;

--------------------------db2操作:----------------------------
mysql> grant replication slave on *.* to 'rep'@'172.16.1.51' identified by '123456';
mysql> flush privileges;
mysql> show master status\G
*************************** 1. row ***************************
                         File: mysql-bin.000024
                 Position: 234
         Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql,information_schema,performance_schema,amh
Executed_Gtid_Set: 79a90ed3-fa86-11e7-ac66-000c29542a93:1-3,
9238586c-fa86-11e7-acab-000c29f6ed58:1-5
1 row in set (0.00 sec)

###【这一步需要自己查看主库最新mysql-bin和pos,上面有查看】
mysql> change master to
         > master_host='172.16.1.51',
         > master_user='rep',
         > master_password='123456',
         > master_log_file='mysql-bin.000015',
         > master_log_pos='234';

mysql> start slave;
mysql> show slave status\G

###生产环境不建议这么做,开启gtid功能
###mysql> stop slave;
###mysql> change master to MASTER_AUTO_POSITION=1;

7.keepalived安装配置

###db1和db2分别安装
yum install keepalived -y

###db1的keepalived.conf配置
mkdir /etc/keepalived/scripts -p

vim /etc/keepalived/keepalived.conf
global_defs {
router_id db
}

vrrp_instance VI_1 {
        state MASTER
        interface eth2
        virtual_router_id 61
        priority 150
        advert_int 1
        nopreempt
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
                172.16.1.3
        }
}

virtual_server 172.16.1.3 3306 {
        delay_loop 2
        lb_alGo wrr
        lb_kind DR 
        nat_mask 255.255.255.0
        persistence_timeout 50
        protocol tcp

        real_server 172.16.1.51 3306 {
                weight 3
                notify_down /etc/keepalived/scripts/mysql_check.sh
        TCP_CHECK {
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 3306
                }
        }
}
###此处还要配置一个触发脚本,用来检测数据库是否存活(我的很简单粗暴,你们自己可以写连接数据库判断)
vim /etc/keepalived/scripts/mysql_check.sh
#!/bin/bash

Db1_Num=`netstat -luntp|grep 3306|wc -l`

if [ $Db1_Num -eq 0 ];then
        /etc/init.d/keepalived stop
        echo "Mysql vip is moved."
else
        echo "Mysql is running."
        exit 1
fi

###脚本需要加执行权限
chmod +x /etc/keepalived/scripts/mysql_check.sh

###db2的keepalived.conf配置
    global_defs {
        router_id db
}

vrrp_instance VI_1 {
        state BACKUP 
        interface eth2
        virtual_router_id 61
        priority 100
        advert_int 1
        nopreempt
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
                172.16.1.3
        }
}

virtual_server 172.16.1.3 3306 {
        delay_loop 2
        lb_algo wrr
        lb_kind DR 
        nat_mask 255.255.255.0
        persistence_timeout 50
        protocol TCP

        real_server 172.16.1.52 3306 {
                weight 3
                notify_down /etc/keepalived/scripts/mysql_check.sh
        TCP_CHECK {
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                        connect_port 3306
                }
        }
}

###触发脚本同上(在环境配置一样的情况下,类似端口都是3306,自己注意,还有脚本的执行权限)

8.老衲不测试

###自己停掉数据库查看vip是否飘移
您可能感兴趣的文档:

--结束END--

本文标题: mysql主主+keepalived高可用

本文链接: https://www.lsjlt.com/news/41664.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作