mysql5.6 集群_MySQL5.6+Centos7.6集群搭建

1、单节点搭建

1.1 准备

需要的软件:ssh客户端,filezilla,centos7,mqsql5.6

$ mkdir sfm # 在根目录下创建自己的文件夹

使用FTP上传MySQL5.6二进制文件下载地址到sfm文件夹下。

1.2 添加用户和组

$ groupadd mysql

$ useradd -g mysql mysql

1.3 mysql安装包解压

$ cd sfm/

$ ll # 查看数据库文件

-rw-r--r--. 1 root root 343082156 11月 3 17:07 mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz

$ tar -xvf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz # 解压

$ mv mysql-5.6.48-linux-glibc2.12-x86_64 mysql # 重命名

$ cd /sfm/mysql

$ chown -R mysql . # 指定文件的拥有者改为指定的用户或组

$ chgrp -R mysql .

1.4 安装 autoconf

在线安装:

$ yum -y install autoconf

离线安装:

# 参考第四节

1.5 安装MySQL

1.5.1 安装

$ /sfm/mysql/scripts/mysql_install_db --user=mysql --basedir=/sfm/mysql --datadir=/sfm/mysql/data

1.5.2 复制配置文件

$ cp /sfm/mysql/support-files/my-default.cnf /etc/my.cnf

1.5.3 修改配置文件

$ vim /etc/my.cnf

[client]

port = 3306

socket = /sfm/mysql/mysql.sock

default-character-set = utf8

[mysqld]

skip-name-resolve

user = mysql

basedir = /sfm/mysql

datadir = /sfm/mysql/data

port = 3306

server_id = 10

socket = /sfm/mysql/mysql.sock

pid-file = /sfm/mysql/mysql.pid

log-error = /sfm/mysql/data/mysql.err

log-bin = /sfm/mysql/data/mysql-bin

character-set-server = utf8

1.5.4 设置系统服务

$ cp /sfm/mysql/support-files/mysql.server /etc/init.d/mysqld

$ vim /etc/init.d/mysqld

# 将所有/user/local 路径改为 /sfm

1.5.5 配置环境变量

$ echo 'export PATH=/sfm/mysql/bin:$PATH' >> /etc/profile

$ source /etc/profile

1.6 启动测试

1.6.1 启动

$ service mysqld start

1.6.2 修改mysql密码

$ mysqladmin -u root password '123456'

提示:如果后面开启远程连接,请把密码设置复杂一点。很重要!!!!!!!!!!!!!!!

1.6.3 登陆mysql

$ mysql -uroot -p

[root@localhost /]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.6.42-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

$ mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

+--------------------+

4 rows in set (0.00 sec)

1.6.4 配置远程连接

慎重开启,如果处于公网环境,强烈建议不开启。

> use mysql;

> update user set Host='%' where user ='root' limit 1;

select Host,user,password from user where User='root';

update user set Host='%' where user ='root' and Host='localhost';

delete from user where Host='localhost' and User='';

> flush privileges;

> exit

$ service mysqld restart

防火墙放行:

$ systemctl start firewalld   # 启动friewall

$ systemctl status firewalld  # 查看firewall启动情况

$ firewall-cmd --zone=public --add-port=3306/tcp --permanent   # 开启3306端口

$ firewall-cmd --reload # 重启

$ firewall-cmd --query-port=3306/tcp # 查看3306端口是否开启

1.6.5 开机启动配置

$ touch /usr/lib/systemd/system/mysql.service

$ vim /usr/lib/systemd/system/mysql.service

[Unit]

Description=MySQ

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/sfm/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000

#Restart=on-failure

#RestartPreventExitStatus=1

#PrivateTmp=false

$ systemctl start mysql

$ systemctl enable mysql # 开启开机启动

2、主从MySQL主从集群搭建

前一台主机IP地址为:192.168.1.104,作位主机master

另外在新建一台主机:192.168.1.102,作位从机slave

2.1 开启master上的log-bin功能:

# 192.168.1.104 操作

$ cat /etc/my.cn

# 输出

---

server_id = 10

log-bin = /usr/local/mysql/data/mysql-bin

----

代表已经开启log-bin功能

登陆mysql在master服务器上建立账户,并授权slave功能

$ mysql -uroot -p

> grant replication slave on *.* to 'mysql'@'%' identified by 'mysql';

> flush privileges;

> show master status;

# 输出

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000035 | 180708 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

# 主库上当前的二进制日志名和偏移量值。这个操作的目的是为了在从数据库启动以后,从这个点开始进行数据的恢复.

2.2 从库操作

2.2.1 修改从数据库的配置文件

注意 server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从数据库服务器,每个从数据库服务器必须有自己唯一的 server-id值。

$ vim /etc/my.cnf

# 修改如下:server_id必须唯一

server_id = 11

# 重启服务

$ serivce mysqld restart

2.2.2 开启复制

MASTER_HOST:主机IP

MASTER_PORT:主机端口

MASTER_USER:主机用户

MASTER_PASSWORD:主机密码

MASTER_LOG_FILE:主机的日志文件

MASTER_LOG_POS:偏移量。如果输入1,全部复制,有可能密码也会被复制过来。

$ mysql -uroot -p

> CHANGE MASTER TO MASTER_HOST='192.168.1.104',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='youxuan' ,MASTER_LOG_FILE='mysql-bin.000035',MASTER_LOG_POS=180708;

> start slave; # 开启复制

> show processlist\G; # 命令将显示类似如下的进程:

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

Id: 1

User: root

Host: localhost

db: NULL

Command: Query

Time: 0

State: init

Info: show processlist

*************************** 2. row ***************************

Id: 4

User: root

Host: 192.168.1.109:63170

db: sfm

Command: Sleep

Time: 332

State:

Info: NULL

*************************** 3. row ***************************

Id: 5

User: root

Host: 192.168.1.109:63173

db: sfm

Command: Sleep

Time: 355

State:

Info: NULL

*************************** 4. row ***************************

Id: 6

User: system user

Host:

db: NULL

Command: Connect

Time: 457

State: Waiting for master to send event

Info: NULL

*************************** 5. row ***************************

Id: 7

User: system user

Host:

db: NULL

Command: Connect

Time: 317

State: Slave has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

5 rows in set (0.00 sec)

ERROR:

No query specified

在主机上修改下数据查看数据库也会被同步更新。

> stop slave # 停止复制

3、主从MySQL双主集群搭建

之前的采取的主从结构:

主机IP地址为:192.168.1.104,作位主机master

新建一台主机:192.168.1.102,作位从机slave

想要实现的结构:

主机IP地址为:192.168.1.104,作位主机master1,slave2

新建一台主机:192.168.1.102,作位从机slave1,master2

在192.168.1.102(作为master2)执行以下操作:

# 进入Mysql交互式环境

$ mysql -uroot -p

> grant replication slave on *.* to 'mysql'@'%' identified by 'mysql'; # 授权

> flush privileges;

> show master status; # 查看主机master2状态

#输出

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000020 | 372 | | | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

在192.168.1.104(作为slave2)执行以下操作:

$ mysql -uroot -p

> CHANGE MASTER TO MASTER_HOST='192.168.1.102',MASTER_PORT=3306,MASTER_USER='root',MASTER_PASSWORD='youxuan' ,MASTER_LOG_FILE='mysql-bin.000020',MASTER_LOG_POS=372;

> start slave # 开启复制

> show processlist\G # 命令将显示类似如下的进程:

双主结构同步完成。

4、配置MySQL+keepalived 高可用环境

利用keepalived实现mysql数据库的高可用,Keepalived+Mysql双主来实现MYSQL-HA,我们必须保证两台mysql数据库的数据完全一致,实现方法是两台mysql互为主从关系,通过keepalived配置VIP,实现当其中的一台mysql数据库宕机后,应用能够自动切换到另外一台mysql数据库上去,保证系统的高可用。

4.1 安装Keepalived

4.1.1 依赖包安装

在线安装:

$ yum install -y gcc openssl-devel popt-devel

离线安装:

确保有一台电脑可以连接互联网

执行指令,其中xxx是你要安装的软件名,根据需要自行修改。/tmp/rpm是下载后保存的路径,也可以选其它路径存放下载的安装包文件:

$ yum install -y gcc openssl-devel popt-devel --downloadonly --downloaddir /tmp/rpm

如果下载正常,下载完成后就可以在本机/tmp/rpm路径下找到安装包。

分发rpm包到其它机器

进入/tmp/rpm路径下,执行指令

$ rpm -ivh *.rpm --force --nodeps

通过以上步骤即可离线安装软件。

4.1.2 下载编译Keepalived和killall

Keepalived,对外统一提供虚IP,并且可以自动切换。killall主要是监听数据库端口的功能。

在线安装:

$ yum install -y keepalived

$ yum install -y psmisc.x86_64

离线安装:参看上面的

4.2 Keepalived配置

4.2.1 配置文件修改

先查看网卡:

$ ip addr

# 输出如下

[root@localhost ~]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eno1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 2c:f0:5d:19:aa:1e brd ff:ff:ff:ff:ff:ff

inet 192.168.1.102/24 brd 192.168.1.255 scope global noprefixroute dynamic eno1

valid_lft 6375sec preferred_lft 6375sec

inet6 fe80::4ede:da95:8fd4:f89c/64 scope link noprefixroute

valid_lft forever preferred_lft forever

3: docker0: mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:19:d9:8c:f8 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

valid_lft forever preferred_lft forever

其中,第二项为服务器的网卡名 eno1

其中virtual_ipaddress为提供外部访问的IP地址,这里使用192.168.1.111,必须保持两台机器virtual_ipaddress相同。

修改192.168.1.102(master1)配置文件:

操作如下:

$ vim /etc/keepalived/keepalived.conf

配置如下:

# 全局配置 不用动 只需注释掉vrrp_strict

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1 # 邮件服务器,暂时没用到,随便填

smtp_connect_timeout 30

router_id LVS_DEVEL # 两台服务器必须唯一

vrrp_skip_check_adv_addr

#必须注释掉 否则报错

#vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

# 检查mysql服务是否存活的脚本

vrrp_script chk_mysql {

script "/usr/bin/killall -0 mysqld"

}

# vrrp配置虚IP

vrrp_instance VI_1 {

# 状态:MASTER 另外一台机器为BACKUP

state MASTER

# 绑定的网卡

interface eno1

# 虚拟路由id 两台机器需保持一致

virtual_router_id 51

# 优先级 MASTER的值要大于BACKUP

priority 100 # MASTER节点高于BACKUP节点

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP地址 两台keepalived需要一致

virtual_ipaddress {

192.168.1.111 # 向外提供的IP,两台机器相同

}

# 检查脚本 vrrp_script的名字

track_script {

chk_mysql

}

}

###后边的virtual_server全部注释掉 它是和LVS做负载均衡用的 这里用不到

###

修改192.168.1.104(master2)配置文件:

查看网卡:eno1

# 全局配置 不用动 只需注释掉vrrp_strict

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1 # 邮件服务器,暂时用到,随便填

smtp_connect_timeout 30

router_id LVS_DEVEL # 两台服务器必须唯一

vrrp_skip_check_adv_addr

#必须注释掉 否则报错

#vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

# 检查mysql服务是否存活的脚本

vrrp_script chk_mysql {

script "/usr/bin/killall -0 mysqld"

}

# vrrp配置虚IP

vrrp_instance VI_1 {

# 状态:MASTER 另外一台机器为BACKUP

state BACKUP

# 绑定的网卡

interface eno1

# 虚拟路由id 两台机器需保持一致

virtual_router_id 51

# 优先级 MASTER的值要大于BACKUP

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

# 虚拟IP地址 两台keepalived需要一致

virtual_ipaddress {

192.168.1.111 # 向外提供的IP,两台机器相同

}

# 检查脚本 vrrp_script的名字

track_script {

chk_mysql

}

}

###后边的virtual_server全部注释掉 它是和LVS做负载均衡用的 这里用不到

###

killall命令脚本。killall -0并不是杀掉进程,而是检查进程是否存在,如果存在则返回0,如果不存在则返回1。当返回1时,keepalived就会切换主备状态。

4.2.2 启动keepalived

关闭防火墙或者开启组播:选择其中一项执行到两台服务器

关闭防火墙:

$ sudo systemctl stop firewalld # 临时关闭

$ sudo systemctl disable firewalld # 永久关闭

$ sudo systemctl status firewalld # 查看防火墙状态。

开启组播:

$ firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eno1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;

$ firewall-cmd --reload;

eno1 为服务器网卡名称 使用命令 ip addr 查看,224.0.0.18为默认组播地址。

开启keepalived:

# 两台机器同时开启

$ service keepalived start

# 查看开启状态

$ service keepalived status

使用ip addr查看是否生成虚拟IP:192.168.1.111

[root@localhost keepalived]# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eno1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 2c:f0:5d:19:aa:31 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.102/24 brd 192.168.1.255 scope global noprefixroute dynamic eno1

valid_lft 4957sec preferred_lft 4957sec

inet 192.168.1.111/32 scope global eno1

valid_lft forever preferred_lft forever

inet6 fe80::bb62:4fd:d2f3:ac81/64 scope link noprefixroute

valid_lft forever preferred_lft forever

3: docker0: mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:5c:7a:b1:08 brd ff:ff:ff:ff:ff:ff

inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

valid_lft forever preferred_lft forever

成功开启

4.3 测试MySQL高可用

# master1 关闭mysqld服务 查看master1和maste2的ip地址

$ service mysqld stop

$ ip addr

# 正确的情况是:

# master1机器虚拟ip消失,master2机器出现虚拟ip

# master1 开启mysqld服务 查看master1和maste2的ip地址

$ service mysqld start

$ ip addr

# 正确的情况是:

# master1机器出现虚拟ip, master2机器虚拟ip消失

1、# master1和master2同时关闭mysqld服务 查看master1和maste2的ip地址

$ service mysqld stop # master1机器操作

$ service mysqld stop # master2机器操作

$ ip addr

# 正确的情况是:

# master1和master2机器虚拟ip消失

2、# 开启master2的mysqld服务

$ service mysqld start # master2机器操作

$ ip addr # master2机器操作

# 正确的情况是:

# master2机器虚拟ip出现

3、# 开启master1的mysqld服务

$ service mysqld start # master1机器操作

$ ip addr

# 正确的情况是:

# master1机器出现虚拟ip, master2机器虚拟ip消失

MySQL高可用环境搭建完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值