mysql简单高可用,读写分离方案。mysql+keepalied实现

 

主读之间是读写分离的系统。

主备数据之间通过binlog同步数据库数据。

主读字节,通过binlog同步数据。

读备数据库, 通过binlog同步数据。

keepalived用来保证主备数据库之间实现高可用 。

 

我们通过这种方法实现,读写分离和高可用方案。

数据库之间binlog的同步配置,mysql配置文件

[client]
port=3306
default-character-set=utf8mb4
#MySQLscokt文件配置
socket=/mysqldata/mysql3306/mysql.sock

[mysql]
port=3306
default-character-set=utf8mb4

[mysqld]
user=mysql
prot=3306
basedir=/mysqldata
lc_message_dir=/usr/shara/mysql
datadir=/mysqldata/mysql3306/data
tmpdir=/mysqldata/msyql3306/tmp
socket=/mysqldata/mysql3306/mysql.sock
pid_file=/msyqldata/mysql3306/mysql.pid
symbolic_links=0
explicit_default_for_timestamp=0
skip_external_locking=1
skip_ssl=1
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO


#字符集
character_set_server=uft8mb4
collation_server=utf8mb4_bin
init_connect='SET NAMES utf8mb4'
#表名字段忽略大小写
lower_case_table_names=1
#开启event 功能,备库建议关闭
event_scheduler=1

##连接相关参数###
#默认最大连接16384
max_connections=2000
#阻止过多尝试失败的客户端连接
max_connections_errors=50
#服务器等待连接的时间 mysql-error 中经常出现 "Lost connection to mysql server at 'XXX', system error:errno"可以适当增加该值
connect_timeout=10
#等待客户端响应超时 默认28800
wait_timeout=1800
#打开文件数
open_files_limit=65535

##内存缓存相关参数##
#限制server接受的数据包大小
max_allowed_packet=64M
#msyql读入缓存大小
read_buffer_size=1M
#开启随机读缓冲区#
read_rnd_buffer_size=5M
##线程缓冲池##
thread_cache_size=64
###每个线程分配的内存大小#
thread_stack=262144
#指定分配缓冲区空间的最小单位
query_cache_min_res_unit=1K
##开启查询缓存  0(OFF),1(ON)和2(DEMAND)  ##
query_cache_type=1;
#查询缓存大小##
query_cache_size=64M
##指定单个查询能够使用的缓冲区大小##
query_cache_limit=1M
##限制缓存表的最大数目##
table_open_cache=512
##需要排序的缓存大小#
sort_buffer_size=256K
##内存临时表大小##
tmp_table_size=64M
##可以创建的内存表大小 不小于tmp_table_size#
max_heap_table_size=64M


###日志相关参数####
###错误日志##
log_error=/mysqllog/mysql3306/log/mysqld.log
###二进制日志###
log_bin=/mysqllog/mysql3306/binlog/mysql-bin
server-id=1
###二进制日志自动删除/过期天数##
expire_logs_days=7
sync_binlog=1
###单个二进制日志自动删除/过期天数###
max_binlog_size=100M
##binlog能够使用的最大cache大小##
max_binlog_cache_size=200M
##慢日志###
log_queries_not_using_indexes=0
slow_query_log=1
slow_query_log_file=/msyqllog/mysql3306/log/mysql-show.log
##记录超过多少秒的SQL语句#
long_query_time=1
###日志时间跟随系统时间##
log_timestamps=SYSTEM
##binlog_format##
binlog_format=row
##遭遇故障,暂停日志写入,并关闭数据库
binlog_error_action=ABORT_SERER


######INNODB 相关参数#########
default_storage_engine=InnoDB
disabled_storage_engines=ARCHIVE,BLACKHOLE,EXAMPLE,FEDERATED,MEMORY,MERGE,NDB

##开启innodb为独立空间模式
innodb_file_per_table=1
##redo log 数量#
innodb_log_files_in_group=2

##innodb 中读写操作的IO线程数,默认为4 
innodb_write_io_threads=8
innodb_read_io_threads=8


##打开死锁监控
innodb_print_all_deadlocks=1
#严格模式
innodb_strict_mode=1

innodb_sort_buffer_size=8M
innodb_stats_persistent_sample_pages=64
innodb_autoinc_lock_mode=2
innodb_online_alter_log_max_size=1G
innodb_open_file=4096
innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:20G

##Undo log config

innodb_rollback_segments=128
innodb_undo_log_truncate=1
innodb_max_undo_log_size=4G

#指定INNODB 一次可以保持打开的.idb文件最大数量
innodb_open_files=60000
##设置提交事务时日志缓冲写入日志文件,对日志入磁盘

innodb_flush_log_at_trx_commit=1
#存储数据库结构和其他内部数据结构的内存池
innodb_additional_mem_pool_size=16M

#锁超时时间设置秒
innodb_lock_wait_timeout=50

#日志缓存 默认1MB 通常设置8~16
innodb_log_buffer_size=16M



#每个日志文件大小
innodb_log_file_size=128M
innodb_log_group_home_dir=/mysqldata/mysql3306/data
inodb_data_file_path=ibdata1:128M:autoextend
innodb_autoextend_increment=16

##从库记录binlog ,主从设置
log_slave_updates=1
relay_log_recovery=1
relay_log=/mysqllog/mysql3306/relaylog/mysql-relay
##replicate-wild-ignore-table=performance_schema.%
master-info-repository=TABLE
relay-log-info-repository=TABLE

##并行复制
slave-parallel-type=LOGICAL_CLOCK
##复制工作线程数量,如果主库业务并发大 可以调整
slave_parallel_workers=16
##从库并行回放时,保证提交顺序与relay log中事务顺序相同
slave_preserve_commit_order=ON
slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'
gtid_mode =ON
enforece_gtid_consistency=1
binlog_gtid_simple_recovery=1

主要关注

关键性配置:

server-id = 1          #MySQL服务器标志,必须唯一  
 
log-bin=mysql-bin      #二进制日志文件的位置和命名  
 
log-slave-updates=1    #事件自动更新到日志中  
 
sync_binlog=1          #日志文件同步到磁盘上  
 
replicate_do_db=test   #要同步的数据库名称


有关MySQL通过binlog同步的几种组合方式可以参考:https://blog.csdn.net/u010253004/article/details/82316619

重启服务:

systemctl restart mysqld

查找密码

grep password /mysqldata/mysql3306/log/mysqld.log

mysql -uroot -p

set password for root@localhost=password('password');

flush privileges;

#创建同步用户

GRANT replication slave on *.* to 'sql_back' ;

设置权限 

GRANT replication slave on *.* to 'sql_backup'@'%' identified by 'passwd' ;

配置同步

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='2301';

start slave;

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='3106',

start slave;

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='3106',

 

change master to 

master_port=3306,

master_host='IP',

master_user='sql_backup',

master_password='passwd',

master_log_file='mysql-bin.000002',

master_log_pos='2301',

start slave;

 

查看同步是否正确执行

show slave status \G;

keepaliev 

 

keepalived是一个类似于layer3, 4 &7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。Keepalived是自动完成,不需人工干涉。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router
RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

Keepalived使用虚拟IP实现双机热备解决方案。
 

建议使用yum安装 源码安装有太多依赖包的问题 

!Configuration File for keepalied

global_defs {

    router_id promaster01 #唯一ID
}

vrrp_script check_mysql {
     script"执行的脚本 如 /bin/stat.sh "
    interval 5 #脚本执行间隔
    weight -20 #检测后优先级增量
}

vrrp_instance V1_HA {
    state MASTER
    interface eth0 #网卡
    virtual_router_id 70 #组ID 同组相同
    priority 100 #优先级 主大于备
    adver_int 2 #vrrp通告间隔时间
    nopreempt #不抢占模式
    
    authentication {
        auth_type PASS #通讯协议
        auth_pass 1111
    }

    unicat_src_ip  #ip 为本节点
    unicat_peer{
     ip#通知的节点IP
    }


    #检测脚本
    track_script {
        check_msyql
    }

    virtual_ipaddress{
        虚IP
    }

}

其他配置可以模仿它写

keepalive详解 推荐参考文章:https://blog.csdn.net/WanJiaBaoBao/article/details/83622621

 

 

 

发布了16 篇原创文章 · 获赞 4 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章