华为云搭建双主mysql

资源清单:

服务器:两台

配置:系统:Centos 6.9  ,磁盘:50G+500,CPU:  8C,内存:16G

架构思路:

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;
2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;
3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);
4.所有提供服务的从服务器与masterB进行主从同步(双主多从);
5.采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);
这样做可以在一定程度上保证主库的高可用,在一台主库down掉之后,可以在极短的时间内切换到另一台主库上(尽可能减少主库宕机对业务造成的影响),减少了主从同步给线上主库带来的压力;
但是也有几个不足的地方:
1.masterB可能会一直处于空闲状态(可以用它当从库,负责部分查询);
2.主库后面提供服务的从库要等masterB先同步完了数据后才能去masterB上去同步数据,这样可能会造成一定程度的同步延时;
架构的简易图如下:

安装步骤:

一、磁盘挂载:

1. 查看可用磁盘 fdisk -l

2. 新增磁盘 fdisk /dev/可用磁盘

输入n:添加新分区,

输入p:主分区,

输入1:表示1个分区,

输入回车:从磁盘开始,

输入回车:到磁盘结尾

输入t:改变分区类型

输入8e:改变分区LVM

输入w:保存退出

说明:p表示打印当前状态

3.磁盘挂载

mkfs.ext3 /dev/磁盘1 mkfs.ext4 /dev/磁盘1 mkfs.xfs /dev/磁盘1

等待设置完成后就可以挂载到相应的文件夹下进行使用了

我在当前系统根目录下创建了一个挂载目录 目录并用来做一个挂载点:

mount /dev/磁盘1 /挂载目录

自动挂载

vgdisplay 或 blkid /设备 查看UUID

写入 /etc/fstab

mount -a 查看是否自动挂载

二、下载mysql服务:

       1.从网上下载安装包,然后上传。

        2.解压tar包 .

cd /usr/local/

tar -zxvf mysql**** 解压

mv mysql**** mysql 重命名

groupadd mysql 创建用户组

useradd -r -g mysql mysql 创建用户添加进用户组 -r标识系统内部用户

chown -R mysql mysql 给用户加mysql文件权限

chgrp -R mysql mysql 给用户组mysql文件权限

ln -s /usr/local/mysql/bin/mysql /usr/bin

三、.修改my.ini 或者 my.cnf  (配置文件部分内容可根据实际调整,红色部分是比较重要的)

[client]

port=1234 #客户端端口

socket=/tmp/mysql.sock

[mysqld]

port=1234 #服务端口

#datadir=/var/lib/mysql

datadir=/usr/local/mysql/data #数据目录

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

socket=/tmp/mysql.sock #

character_set_server=utf8 #设置编码

init_connect='SET NAMES utf8'

basedir=/usr/local/mysql #mysql目录

user=mysql #用户

skip-external-locking

key_buffer_size=256

max_allowed_packet=16M

#slave-skip-error=1060,1062,1032,1050,1061 #跳过错误同步代码

myisam_sort_buffer_size=64M

slave_type_conversions=ALL_NON_LOSSY,ALL_LOSSY

#skip-grant-tables #跳过root登录修改密码用的

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

#bind-address =192.168.11.72 监听IPV6

bind-address=0.0.0.0 #监听IPV4

relay-log=/usr/local/mysql/log/slave-relay-log

relay-log-index=/usr/local/mysql/log/slave-relay-log.index

server-id=72 #唯一id

auto-increment-offset = 2 #主备区分, 主=1 ,备=2

auto-increment-increment = 2 #主备都一样

log-bin=mysql-bin #log-bin名称 随意

binlog-format=MIXED

expire_logs_days=10 # 日志保存天数

log_slave_updates=true

#replicate-ignore-table

default-storage-engine=INNODB

long_query_time=2

replicate-ignore-db=mysql,information_schema

innodb_file_per_table

max_connections=100 #最大连接数100

table_open_cache=2048

binlog_cache_size=1M

max_heap_table_size=64M

read_buffer_size=2M #缓存大小

read_rnd_buffer_size=16M

sort_buffer_size=8M

join_buffer_size=8M

thread_cache_size=8 #线程数量

#thread_concurrency=8

query_cache_size=64M

query_cache_limit=2M

ft_min_word_len=4

transaction_isolation=REPEATABLE-READ

tmp_table_size=64M

slow_query_log

#innodb_additional_mem_pool_size=16M  

innodb_buffer_pool_size=512m

innodb_write_io_threads=8

innodb_read_io_threads=8

innodb_thread_concurrency=16

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=8M

innodb_log_file_size=8M

innodb_log_files_in_group=8M

innodb_max_dirty_pages_pct=90

innodb_lock_wait_timeout=120

[mysqldump]

quick

max_allowed_packet=16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size=64M

sort_buffer_size=64M

read_buffer=2M

write_buffer=2M

[mysqld_safe]

log-error=/usr/local/mysql/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

lower_case_table_names=1

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

max_connections=100 default-time_zone = '+8:00'

 

四、初始化

vi /var/log/mysqld.log 保存

chmod 777 /var/log/mysqld.log #赋权

chown mysql:mysql /var/log/mysqld.log #赋权

/usr/local/mysql/bin/mysqld --initialize --user=mysql --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US  #初始化

1.查看初始密码

cat /var/log/mysqld.log

2..启动mysql服务

将mysql.server 启动脚本复制到服务中

#cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

将脚本授权

#chmod 700 /etc/init.d/mysqld

启动mysql服务

service mysqld start

注意点: xxx.pid缺失问题

cd /var/run/

mkdir mysqld

chmod 777 mysqld/

cd mysqld/

vi xxx.pid //创建xxx.pid文件保存

chmod 777 xxx.pid

chown mysql:mysql xxx.pid

service mysqld start //启动成功

登录修改root密码

/usr/local/mysql/bin/mysql -u root -p

set password for root@localhost = password('密码'); #如果修改密码报错,先执行 flush privileges;

flush privileges;

use mysql ;

update user set host = '%' where user ='root';

flush privileges;

创建对应的数据库 或者对应的用户

create database 数据库;

use 数据库;

create user '用户'@'%' identified by '密码';

update mysql.user set authentication_string=password('aoma@ygpDb') where user='aoma';

赋权限

GRANT ALL PRIVILEGES ON *.* TO '用户'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO '用户'@'%' WITH GRANT OPTION;

主从数据库都运行后

show slave status\G;

stop slave ;

show master status\G; # 可以为root 用户

change master to master_host='192.168.70.71', master_port=1234,master_user='用户', master_password='密码',master_log_file='master-bin.xxx',master_log_pos=xxx; #主备都要执行

#change master to master_host='192.168.70.72', master_port=1234,master_user='用户', master_password='密码',master_log_file='master-bin.xxx',master_log_pos=xxx; 

start slave ;

观察同步情况 show slave status\G;

 

五、.keepalived

1.yum install -y keepalived /如果没联网 自行下载再上传

2.修改keepalived配置文件

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id MASTER-HA

}

vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等

script "/etc/keepalived/chk_mysql.sh" #这里通过脚本监测

interval 3 #脚本执行间隔,每2s检测一次

weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5

fall 5 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)

rise 1 #检测1次成功就算成功。但不修改优先级

}

vrrp_instance VI_1 {

state BACKUP #主备都为BACKUP 防止脑裂

interface eth1 #指定虚拟ip的网卡接口

#nopreempt #主要添加,防止主恢复后自动切回抢夺VIP资源 ,添加后priority 意义不大,只用于最初的主备判断。

mcast_src_ip 192.168.70.72   #另一个节点为 192.168.70.71

virtual_router_id 79 #路由器标识,MASTER和BACKUP必须是一致的

priority 101 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.70.70 #虚拟ip vip

}

track_script {

chk_mysql_port

}

}

3.编写检查脚本 可根据情况自行修改

vi chk_mysql.sh

#!/bin/bash

counter=$(netstat -na|grep "LISTEN"|grep "1234"|wc -l)

if [ "${counter}" -eq 0 ]; then

/etc/init.d/keepalived stop

fi

最后

云平台要申请虚拟ip ,然后进行网卡的绑定。

两台服务器都绑定申请的虚拟ip即可 。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值