设为首页 收藏本站
查看: 1337|回复: 0

[经验分享] miradb+galera+haproxy+keepalived实现mysql负载均衡与高可用

[复制链接]

尚未签到

发表于 2018-12-31 07:50:24 | 显示全部楼层 |阅读模式
  galera简介:galera为msyql/mariadb提供主主复制,所有的msyql/mariadb  server是对等的,不分主从关系。下面搭建miradb+galera
  本次环境为2台虚拟机,操作系统均为centos7 其中 :
  node1:192.168.8.59

  node2:192.168.8.140
  1、关闭防火墙和selinux
  2、配置yum源
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1  3、在2台主机上分别安装以下几个服务
yum install rsync nmap lsof perl-DBI nc MariaDB-server MariaDB-client MariaDB-compat galera socat jemalloc  4、启动数据库服务,并且对数据库进行安全优化,“ mysql_secure_installation ”设置密码为‘root’
  5、修改配置文件(两个服务端都要改,注意wsrep_node_address为本机ip)
  vim /etc/my.cnf.d/server.cnf
  

  #
  [galera]
  wsrep_on=ON
  wsrep_provider=/usr/lib64/galera/libgalera_smm.so
  wsrep_cluster_address='gcomm://192.168.8.59,192.168.8.140'
  wsrep_cluster_name='galera'
  wsrep_node_address='192.168.8.140'
  wsrep_node_name='node1'
  wsrep_sst_method=rsync
  binlog_format=row
  default_storage_engine=InnoDB
  innodb_autoinc_lock_mode=2
  bind-address=0.0.0.0
  wsrep_sst_auth=root:root
  4、启动服务,查看端口

  [root@node1 ~]# lsof -i:4567
  COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  mysqld  22162 mysql   11u  IPv4  44908      0t0  TCP *:tram (LISTEN)
  mysqld  22162 mysql   13u  IPv4  44911      0t0  TCP 192.168.8.140:35922->192.168.8.59:tram (ESTABLISHED)
  [root@node1 ~]# lsof -i:3306
  COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  mysqld  22162 mysql   32u  IPv4  45258      0t0  TCP *:mysql (LISTEN)
  

  

  可以看到多一个4567的端口
  5、查看状态
  [root@node2 ~]# mysql -u root -p -e "show status like 'wsrep%'"
  Enter password:
  +------------------------------+--------------------------------------+
  | Variable_name                | Value                                |
  +------------------------------+--------------------------------------+
  | wsrep_apply_oooe             | 0.000000                             |
  | wsrep_apply_oool             | 0.000000                             |
  | wsrep_apply_window           | 0.000000                             |
  | wsrep_causal_reads           | 0                                    |
  | wsrep_cert_deps_distance     | 0.000000                             |
  | wsrep_cert_index_size        | 0                                    |
  | wsrep_cert_interval          | 0.000000                             |
  | wsrep_cluster_conf_id        | 2                                    |
  | wsrep_cluster_size           | 2                                    |
  | wsrep_cluster_state_uuid     | a857719c-2667-11e6-8e3f-aa2deb9d92a9 |
  | wsrep_cluster_status         | Primary                              |
  | wsrep_commit_oooe            | 0.000000                             |
  | wsrep_commit_oool            | 0.000000                             |
  | wsrep_commit_window          | 0.000000                             |
  | wsrep_connected              | ON                                   |
  | wsrep_evs_delayed            |                                      |
  | wsrep_evs_evict_list         |                                      |
  | wsrep_evs_repl_latency       | 0/0/0/0/0                            |
  | wsrep_evs_state              | OPERATIONAL                          |
  | wsrep_flow_control_paused    | 0.000000                             |
  | wsrep_flow_control_paused_ns | 0                                    |
  | wsrep_flow_control_recv      | 0                                    |
  | wsrep_flow_control_sent      | 0                                    |
  | wsrep_gcomm_uuid             | 5c7c83d5-2672-11e6-a40c-4ac0f0858b55 |
  | wsrep_incoming_addresses     | 192.168.8.59:3306,192.168.8.140:3306 |
  | wsrep_last_committed         | 11                                   |
  | wsrep_local_bf_aborts        | 0                                    |
  | wsrep_local_cached_downto    | 18446744073709551615                 |
  | wsrep_local_cert_failures    | 0                                    |
  | wsrep_local_commits          | 0                                    |
  | wsrep_local_index            | 0                                    |
  | wsrep_local_recv_queue       | 0                                    |
  | wsrep_local_recv_queue_avg   | 0.166667                             |
  | wsrep_local_recv_queue_max   | 2                                    |
  | wsrep_local_recv_queue_min   | 0                                    |
  | wsrep_local_replays          | 0                                    |
  | wsrep_local_send_queue       | 0                                    |
  | wsrep_local_send_queue_avg   | 0.000000                             |
  | wsrep_local_send_queue_max   | 1                                    |
  | wsrep_local_send_queue_min   | 0                                    |
  | wsrep_local_state            | 4                                    |
  | wsrep_local_state_comment    | Synced                               |
  | wsrep_local_state_uuid       | a857719c-2667-11e6-8e3f-aa2deb9d92a9 |
  | wsrep_protocol_version       | 7                                    |
  | wsrep_provider_name          | Galera                               |
  | wsrep_provider_vendor        | Codership Oy     |
  | wsrep_provider_version       | 25.3.15(r3578)                       |
  | wsrep_ready                  | ON                                   |
  | wsrep_received               | 6                                    |
  | wsrep_received_bytes         | 477                                  |
  | wsrep_repl_data_bytes        | 0                                    |
  | wsrep_repl_keys              | 0                                    |
  | wsrep_repl_keys_bytes        | 0                                    |
  | wsrep_repl_other_bytes       | 0                                    |
  | wsrep_replicated             | 0                                    |
  | wsrep_replicated_bytes       | 0                                    |
  | wsrep_thread_count           | 2                                    |
  +------------------------------+--------------------------------------+
  看状态时主要查看:
wsrep_cluster_size            2  #number of nodes
wsrep_connected              ON
wsrep_ready                    ON   #It's running,awesome !
wsrep_incoming_addresses     | 此时是连接的状态  可以看到状态为正常
  测试!
  在node1上创建数据库erick
  MariaDB [(none)]> create database erick;
  ERROR 2006 (HY000): MySQL server has gone away
  No connection. Trying to reconnect...
  Connection id:    16
  Current database: *** NONE ***
  

  Query OK, 1 row affected (0.06 sec)
  

  MariaDB [(none)]> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | erick              |
  | information_schema |
  | mysql              |
  | performance_schema |
  +--------------------+
  4 rows in set (0.00 sec)
  在node2上查看,并且删除
  

  MariaDB [(none)]> show databases;
  ERROR 2006 (HY000): MySQL server has gone away
  No connection. Trying to reconnect...
  Connection id:    4
  Current database: *** NONE ***
  

  +--------------------+
  | Database           |
  +--------------------+
  | erick              |
  | information_schema |
  | mysql              |
  | performance_schema |
  +--------------------+
  4 rows in set (0.00 sec)
  

  MariaDB [(none)]>
  MariaDB [(none)]> drop database erick;
  Query OK, 0 rows affected (0.14 sec)
  

  MariaDB [(none)]>
  

  在node1上查看数据库是否被删除
  MariaDB [(none)]> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | performance_schema |
  +--------------------+
  3 rows in set (0.00 sec)
  

  MariaDB [(none)]>
  至此实验完成!
  ################################
  在此添加一台haproxy服务器做负载均衡,机器为centos6.5
  hostname    ip
  erick1     192.168.8.163
  haproxy安装过程略。修改配置文件
  [root@erick1 ~]# cat  /etc/haproxy/haproxy.cfg
  global
  log 127.0.0.1 local0 notice
  maxconn 65536
  nbproc 10
  ulimit-n 231097
  tune.ssl.default-dh-param 1024
  daemon
  

  defaults
  log     global
  mode    http
  option  httplog
  option  dontlognull
  option  forwardfor
  retries 3
  option redispatch
  maxconn 65535
  timeout connect 5s
  timeout client 5m
  timeout server 5m
  timeout check   1s
  timeout http-request    10s
  timeout http-keep-alive 10s
  

  listen Stats *:8080
  mode http
  stats enable
  stats uri /
  stats refresh 15s
  stats show-node
  stats show-legends
  stats hide-version
  

  listen  Mysqld  192.168.8.163:3306
  #cookie SERVERID rewrite
  mode tcp
  maxconn 200
  balance roundrobin
  #option mysql-check user erick
  server  node1 192.168.8.140:3306  check port 3306
  server  node2 192.168.8.59:3306  check port 3306
  这时可以在web上监控状态

  可以看到msyql的状态,即使当断开一台msyql服务器时也不影响工作。
  之前已经完成了haproxy对msyql的代理,现在添加一台机器,并利用之前的机器做高可用。
  机器规划
  hostname    os版本     ip                    所装服务
  erick1     centos6.5   192.168.8.163    vip:192.168.8.200   haproxy+keepalived
  erick     centos6.5   192.168.8.182    vip:192.168.8.200   haproxy+keepalived
  node1    centos7   192.168.8.59  mysql+galera
  node2    centos7   192.168.8.140 mysql+galera
  之前已经安装过mysql+galera和haproxy了,下面只在erick1和erick上安装keepalived即可(安装过程略,yum安装即可)
  编辑配置文件:

  [root@erick1 keepalived]# cat keepalived.conf
  ! Configuration File for keepalived
  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_script chk_haproxy {
  script "/usr/local/keepalived/check_haproxy.sh"
  interval 2
  weight 2
  }
  vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 5555
  }
  track_script {
  chk_haproxy      #监测haproxy进程状态
  }
  virtual_ipaddress {
  192.168.8.200
  }
  }
  编辑从节点的配置文件
  [root@erick ~]# cat /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  global_defs {
  router_id LVS_DEVEL
  }
  vrrp_script chk_haproxy {
  script "/usr/local/keepalived/check_haproxy.sh"
  interval 2
  weight 2
  }
  vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 99
  advert_int 1
  authentication {
  auth_type PASS
  auth_pass 5555
  }
  track_script {
  chk_haproxy      #??haproxy????
  }
  virtual_ipaddress {
  192.168.8.200
  }
  }
  

  检查haproxy状态的脚本:
  [root@erick ~]# cat /etc/keepalived/check_haproxy.sh
  #!/bin/bash
  if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  /etc/init.d/haproxy  start
  fi
  sleep 2
  if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  /etc/init.d/keepalived stop
  fi
  在web浏览器中使用vip访问haproxy查看msyql状态

  至此keepalive已经实现对haproxy的高可用了。
  

参考文献:

http://tunnelix.com/mariadb-galera-cluster-installation/
https://geekdudes.wordpress.com/2015/07/18/setting-up-failover-cluster-for-mariadb-on-centos-7/
  http://severalnines.com/tutorials/mysql-load-balancing-haproxy-tutorial#3




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657785-1-1.html 上篇帖子: Haproxy+Keepalived(双机热备)搭建高可用web架构 下篇帖子: Haproxy负载均衡详解,与keepalived的搭配
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表