mysql集群搭建

1.CentOs6.6 安装mysql5.5

转自:http://blog.itpub.net/29485627/viewspace-2135947/

0丶首先保证服务器中没有mysql,可以先卸载一下(可以自己搜一下卸载mysql)
1、yum remove mysql mysql-server mysql-libs compat-mysql51
2、rm -rf /var/lib/mysql
3、rm /etc/my.cnf
rpm -qa|grep mysql

1丶下载二进制包

2、删除etc目录下的my.cnf文件
rm /etc/my.cnf
3、执行以下命令来创建mysql用户组

[root@localhost~]# groupadd mysql


4、执行以下命令来创建一个用户名为mysql的用户并加入mysql用户组

[root@localhost ~]# useradd -g mysql mysql


5、将下载的二进制压缩包放到/usr/local/目录下。

[root@localhost ~]# mv mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz /usr/local/


6、解压安装包

[root@localhost ~]# cd /usr/local

[root@localhost localtar]# tar -zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz /usr/local/


7、将解压好的文件夹重命名为mysql

[root@localhost local]# mv mysql-5.6.35-linux-glibc2.5-x86_64 mysql


在etc下新建配置文件my.cnf,添加以下内容

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/tmp/mysql.sock
[mysqld]
server-id=1
#开启二进制日志
log-bin=mysql-bin
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
进入安装mysql软件目录
[root@localhost local]# cd mysql

[root@localhost mysql]# chown -R mysql:mysql ./  修改当前目录拥有者为mysql用户

[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql 安装数据库

[root@localhost mysql]# chown -R mysql:mysql data 修改当前data目录拥有者为mysql用户

[root@localhost mysql]# chown 777 /etc/my.cnf

(1)复制启动脚本到资源目录

[root@localhost mysql]# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld


(2)增加mysqld服务控制脚本执行权限

[root@localhost mysql]# chmod +x /etc/rc.d/init.d/mysqld

(3)将mysqld服务加入到系统服务

[root@localhost mysql]# chkconfig --add mysqld


(4)检查mysqld服务是否已经生效

[root@localhost mysql]# chkconfig --list mysqld


命令输出类似下面的结果:

mysqld  0:off 1:off 2:on 3:on 4:on 5:on 6:off

表明mysqld服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用service命令控制mysql的启动和停止。


3、启动msql

[root@localhost mysql]# service mysqld start


4、将mysql的bin目录加入PATH环境变量,编辑/etc/profile文件

[root@localhost mysql]# vi /etc/profile


在文件最后添加如下信息:

export PATH=$PATH:/usr/local/mysql/bin


执行下面的命令使所做的更改生效:

[root@localhost mysql]# . /etc/profile


5、以root账户登陆mysql,默认没有密码

[root@localhost mysql]# mysql


6、设置root账户密码

mysql > use mysql

mysql > update user set password=password('123456') where user='root' and host='localhost';

mysql > flush privileges;

mysql > exit


7、用密码重新登录

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

Enter password:

8、设置远程主机登录

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

FLUSH PRIVILEGES;

 这里123456是密码,若密码是其他值,改一下即可。其他不需要改。

2.实现主从复制

转自:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2
主:192.168.100.21
从:192.168.100.22

需要注意 mysql的主从复制(就是二进制文件的共享)
之前的第一台mysql 的server-id =1 ,第二台mysql 的server-id=2 ;其他不用修改
 在第一台()机器上创建第二台主机能登录的用户
1.GRANT REPLICATION SLAVE ON *.* TO 'mysql12' @'192.168.100.22' IDENTIFIED BY 'mysql12';
mysql12:是用户名和密码	  
192.168.100.22:(slave从)第二台机器
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

在这里插入图片描述

在第二台(从)机器上
1.change master to master_host='192.168.100.21', master_user='mysql12', master_password='mysql12', master_log_file='mysql-bin.000004', master_log_pos=342;

2.START SLAVE;
3.SHOW SLAVE STATUS\G;

在这里插入图片描述

现在你可以试试,在主添加数据,从会不会同步;

3.主主复制

转自:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label2
和主从复制一样,只不过是颠倒一下;

# 在原来的基础上,配置文件
# 主:192.168.100.21 
# 从:192.168.100.22
# 在原来的:log-bin=mysql-bin   #开启二进制日志
# 下添加
auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql   #忽略mysql库  mysql5.7 不支持,最好不写
binlog-ignore=information_schema   #忽略information_schema库mysql5.7 不支持,最好不写
replicate-do-db=aa   #要同步的数据库,默认所有库
#  在192.168.100.22执行
1.GRANT REPLICATION SLAVE ON *.* TO 'mysql11' @'192.168.100.21' IDENTIFIED BY 'mysql11';
2.FLUSH PRIVILEGES;
3.show master status;

在这里插入图片描述

# 在192.168.100.21执行
1.change master to master_host='192.168.100.22', master_user='mysql11', master_password='mysql11', master_log_file='mysql-bin.000005', master_log_pos=352;
2.start slave;
3.SHOW SLAVE STATUS\G;

在这里插入图片描述

现在,你看看,是不是主从任意一个操作数据库都会同步;

4.高可用

转自:https://www.cnblogs.com/phpstudy2015-6/p/6706465.html#_label17

两台linux:
192.168.100.31 : haproxy+keepalived
192.168.100.32 : haproxy+keepalived

4.1 haproxy安装

  1. 下载haproxy-1.5.14.tar.gz

  2. 解压,编译安装

cd haproxy-1.5.14   
uname -a :可以查看以下配置(2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)
make TARGET=linux26 ARCH=x86_64
make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/
  1. 添加启动脚本在:etc/init.d/haproxy
#!/bin/sh
#
# haproxy
#
# chkconfig:   - 85 15
# description:  HAProxy is a free, very fast and reliable solution \
#               offering high availability, load balancing, and \
#               proxying for TCP and  HTTP-based applications
# processname: haproxy
# config:      /etc/haproxy/haproxy.cfg
# pidfile:     /var/run/haproxy.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

exec="/usr/sbin/haproxy"
prog=$(basename $exec)

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy

check() {
    $exec -c -V -f $cfgfile $OPTIONS
}

start() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi

    echo -n $"Starting $prog: "
    # start it up here, usually something like "daemon $exec"
    daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    stop
    start
}

reload() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    echo -n $"Reloading $prog: "
    $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
    retval=$?
    echo
    return $retval
}

force_reload() {
    restart
}

fdr_status() {
    status $prog
}

case "$1" in
    start|stop|restart|reload)
        $1
        ;;
    force-reload)
        force_reload
        ;;
    check)
        check
        ;;
    status)
        fdr_status
        ;;
    condrestart|try-restart)
        [ ! -f $lockfile ] || restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
        exit 2
esac

4.给这个目录授权

chmod +x /etc/init.d/haproxy
  1. 建立脚本启动用户
useradd -r haproxy
  1. 在 /etc/haproxy/haproxy.cfg 创建配置文件
vim /etc/haproxy/haproxy.cfg
global

    log         127.0.0.1 local2         #日志定义级别
    chroot      /var/lib/haproxy         #当前工作目录
    pidfile     /var/run/haproxy.pid     #进程id
    maxconn     4000                     #最大连接数
    user        haproxy                  #运行改程序的用户
    group       haproxy
    daemon                               #后台形式运行
    stats socket /var/lib/haproxy/stats

defaults
    mode                    tcp            #haproxy运行模式(http | tcp | health)
    log                     global
    option                  dontlognull
    option                  redispatch     #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    retries                 3              #三次连接失败则服务器不用
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s            #连接超时
    timeout client          1m             #客户端超时
    timeout server          1m             #服务器超时
    timeout http-keep-alive 10s
    timeout check           10s            #心跳检测
    maxconn                 600            #最大连接数

listen stats                               #配置haproxy状态页(用来查看的页面)
    mode http
    bind :8888
    stats enable
    stats hide-version                    #隐藏haproxy版本号
stats uri     /haproxyadmin?stats     #一会用于打开状态页的uri
    stats realm   Haproxy\ Statistics     #输入账户密码时的提示文字
    stats auth    admin:admin             #用户名:密码

frontend  main 
bind 0.0.0.0:3306                    #使用3306端口。监听前端端口【表示任何ip访问3306端口都会将数据轮番转发到mysql服务器群组中】
    default_backend             mysql     #后端服务器组名

backend mysql
    balance     leastconn                 #使用最少连接方式调度
    server mysql1 192.168.100.21:3306 check port 3306 maxconn 300
    server mysql2 192.168.100.22:3306 check port 3306 maxconn 300

最好把注释去掉

  1. 启动日志
vi /etc/rsyslog.conf

在这里插入图片描述
去掉注释,重新启动

 service rsyslog restart
  1. 启动haproxy
service haproxy start
  1. 访问
    http://192.168.100.31:8888/haproxyadmin?stats
    为啥,看这↓
    在这里插入图片描述

在这里插入图片描述

这就好了;

第二台的安装也是一样

4.2 keepalived安装

  1. 下载keepalived-1.2.19.tar.gz
  2. 解压,安装

cd keepalived-1.2.19

–with-kernel-dir下面的配置还是: uname -a 查看

./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/
  1. 安装依赖
yum -y install openssl openssl-devel
  1. 编译
make && make install
chkconfig keepalived on
  1. 查看目录结构是否有变化
    在这里插入图片描述
  2. 配置文件

把 /etc/keepalived/keepalived.conf 改个名叫keepalived.conf.back
再vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
        notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
    script "/etc/keepalived/chk.sh"  #具体脚本路径
    interval 2  #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 {   #VI_1 是自定义的名称;
    state BACKUP    #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
    nopreempt      #开启不抢占
    interface eth0   #指定VIP需要绑定的物理网卡
    virtual_router_id 11   #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
    priority 130   #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台

    advert_int 1   #生存检测时的组播信息发送间隔,组内一致
    authentication {    #设置验证信息,组内一致
        auth_type PASS   #有PASS 和 AH 两种,常用 PASS
        auth_pass asd    #密码
    }
    virtual_ipaddress {
        192.168.100.55    #指定VIP地址,组内一致,可以设置多个IP
    }
    track_script {    #使用在这个域中使用预先定义的脚本,上面定义的
        chk_haproxy   
    }

    notify_backup "/etc/init.d/haproxy restart"   #表示当切换到backup状态时,要执行的脚本
    notify_fault "/etc/init.d/haproxy stop"     #故障时执行的脚本
}

第二台的配置文件,把 priority 120改了就行了;

最好把注释去掉
  1. 创建脚本
vi /etc/keepalived/chk.sh
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi
  1. 授权
chmod +x /etc/keepalived/chk.sh
  1. 启动keepalived
service keepalived start

在这里插入图片描述

注意keepalived启动后会虚拟一个VIP,也就是192.168.100.55 可以通过访问:http://192.168.100.55:8888/haproxyadmin?stats 查看VIP是那台主机

在这里插入图片描述
3.测试haproxy监听前端端口3306
在mysql1和mysql2中各创建一个,另外两台都可以登录的用户;

mysql>GRANT ALL ON *.* TO 'jack'@'192.168.100.%' IDENTIFIED BY '321';
用户名:jack
密码:321

在windows上试试可以登录吗?应该是可以的;

mysql -u jack -p -h192.168.100.55 

如果不行,看看你的两个keepalived主机是否把3306端口放开了~~~(防火墙)

4.你可以再测试一下,他会不会抢占VIP

就是VIP是那个,你就   kill -9 pid     看看VIP会不会变

再启动那个,再看看VIP变不变

5.测试负载均衡
在mysql1和mysql2上抓包

tcpdump -n -i eth0 host 192.168.100.21 and 192.168.100.32(看VIP是谁,就写谁,我的是32)
tcpdump -n -i eth0 host 192.168.100.22 and 192.168.100.32(看VIP是谁,就写谁,我的是32)

多个客户端(Navicat和SQLyog)同时执行添加操作,看看;
6.mysql任意一个挂掉后将会被踢出群组,再启动那个mysql,进入群组,同步数据
在这里插入图片描述
再启动,又变成绿色;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值