Operating System/Solaris2007/08/10 09:57

24장. NIS(YP)

24.1 Server & Client의 효율적 운용

구축사례 ⇒ Server & 이기종 Client Model

NIS(YP) + NFS

① Server(master)집중 유저(&host) 정보관리 및 Network 정보관리.
② 분산화된 다수의 client
③ 허가된 사용자는 어떤 Client에서든 자신의 계정으로 login하여 사용하고자 하는 한정된 licensed_S/W 개발 tool을 편리 하게 운용한다. 각 host들은 NIS Client로 등록되었고 또한, Master Server의 FTP 영역을 사용하게 된다.
④ Client는 OS 외 별도의 저장영역이 불필요 server의 Client로 share된 영역을 사용함. 또, 이 영역을 특정 User의 전용을 막기 위해 quota를 적용 관리함이 유리하다.
⑤ 이 기종간 호환성 탁월: 어떤 OS(vendor간)든 yp는 지원, linux도 지원함.
⑥ 다수의 Licensed Application을 NFS로: 고가의 S/W를 저비용 측면에서 효율적 운용.
⑦ IDEC 의 NFS

Server에서 /chipfarm을 share 하고 Client에서 /chipfarm 을 Mount 하는 개념. Server의 /chipfarm/admin/env/... 에 System 설정 File들을 미리 설정해 놓고, Client에서는 Mount된 /chipfarm/admin/env/...의 System 설정 File들을 자신의 Host에 Link하여 사용.

(Client 쪽의 사용 예) 

# ln -s /chipfarm/admin/env/motd /etc/motd
# ln -s /chipfarm/admin/env/issue /etc/issue 

 .............

24.2 install 및 운용방법

- NIS는 설치 운용 시 이 기종간의 OS 특성에 대한 불편함이 없고, 다수의 Unix계열 OS를 지원한다.
- NIS설치는 OS install시 setting하는 것이 가장 좋고, 현재 운용결과 Solaris 2.6 환경에서의 Master Server 설치 및 다수의 이 기종 Client 간의 관리가 좋은 것으로 나타났다.

NIS 정의

NIS는 Sun에서 배포된 network lookup service이며, 몇 개의 master node들로 완전히 복사하는 database를 가지고 있다. 각 master mode는 database를 위한 server process를 수행하며 이것은 NIS server로 나타내어진다. muntiple server는 database 일치를 보장하기 위해 그들 스스로 수정된 database를 퍼트린다. 안정된 상태에서, 어느 server process가 client request에 답할 것인지는 문제가 되지 않는다. 그 이유는 server들의 대답이 동일하기 때문이다. 이것은 network당 multiple server가 높은 유효성과 신뢰성의 NIS service를 주게 된다.

NIS Domain은 동일한 NIS database를 사용하는 하나의 network상에서의 node들의 집합이다. NIS domain들은 internet domain들과 sendmail domain 들로부터 다르게 설정될 수도 있다. NIS domainname directory는 map 집합들을 포함하는 /var/yp안의 directory이다. NIS server는 /var/yp의 subdirectory안에 있는 NIS domain의 모든 map들을 유지한다. 예를 들면, sunse domain을 위한 map들은 /var/yp/sunse안에 존재한다. domain name은 NIS database로부터 data를 검색하기 위해 요구된다.

network상에서의 각 machine은 /etc/defaultdomain로 설정된 default domain에 속하고 /etc/rc.local를 booting시 참조한다. domain name은 server와 client들 모두에 설정 되야 한다. 각 NIS map은 일련의 값들과 그들의 연관된 key들을 포함하고 있으며, Program들은 이런 값들을 조사한다. 대부분 현재 map들은 전통적으로 /etc directory에서 발견되는 ASCII file들로부터 추출된다. NIS map의 정보는 ASCII file안의 data와 유사하지만 dbm format으로 유지된다. 모든 dbm file들에서, 하나의 NIS map은 구분할 수 있는 mapname을 가지고 있고, 두 개의 File인 mapname.dir과 mapname.pag를 보충한다.

예를 들면, hosts.byname은 internet address를 찾기 위해 machine들에 의해 참조된다. hosts.byname database를 위한 정보는 hosts.byname.pag와 hosts.byname.dir인 두 File안에 저장된다. .pag로 끝나는 화일은 실제적인 map entry들을 포함하고 있다.

NIS Servers 와 Clients

NIS server는 일련의 NIS map들을 저장하고 있는 disk를 가진 machine이다. NIS server에는 master와 slave 두 종류가 있다. Master server는 slave server들의 database를 update한다. 변화한 내용들은 master server에서 NIS slave server들로 전달된다. 만약 NIS database들이 master server machine들 대신에 slave server상에서 만들어지거나 수정이 된다면 NIS의 update algorithm은 파괴될 것이다. database 수정과 생성은 반드시 master server machine상에서만 이루어진다. Sun은 single domain상에서 만들어지는 모든 map들을 위해 single server master를 만들도록 요구하고 있다. 다른 SunOS version에서도 NIS 환경을 지원하고 있다. Sun에서의 master server는 release 4.1이상에서 수행하도록 권장하고 있다. 그 이유는 좀더 빠른 map transferring 때문이다. 

. NIS Master Server 

  1) master map들을 가짐 
  2) master map들을 update함 
  3) NIS slave server들로 master map들을 전달함 
  4) NIS domain상에서 NIS client들에게 NIS service를 제공함 
  5) ypserv 와 ypbind를 수행함 

. NIS Slave Server 

  1) master NIS map들의 copy본을 가짐 
  2) NIS master server로부터 copy본들을 받음 
  3) NIS domain상에서 NIS client들로 NIS service를 제공 
  4) ypserv 와 ypbind를 수행함 

. NIS client 

  1) NIS network service를 사용하는 host 
  2) server들의 map들로부터 data를 요구하는 process들을 수행함 
  3) ypbind만 수행함

* master는 OS install시 full_package로 설치하고, /etc/defaultdomain을 생성 Server에 맞는 domainname기입한다. 

# cd /var/yp
# /usr/etc/yp/ypinit -m 하여 물어보는 질문에 대해 모두 Yes함. 

아래 ypinit -m을 참조

24.3 NIS Master Server 초기화

① domain name을 설정함 

    # domainname sunse

② /etc/defaultdomain file을 수정 혹은 생성 

    NIS domain name을 부가함

③ /etc/rc.local 화일을 수정함 

   . ypbind startup line들이 풀려져 있는가를 확인함
   . bootup시 /usr/etc/rpc.yppasswdd를 가동시키기 위해 다음과 같은 라인들을 첨가시킴 

     다음 라인들은 ypserv daemon 정보 다음에 삽입시킴 

      if [ -f /usr/etc/rpc.yppasswdd -a -d /var/yp/`domainname` ] ; 

              then /usr/etc/rpc.yppasswdd /etc/passwd -m;
              echo -n ' rcp.passwdd ' 

      fi 

     위의 -m flag는 /var/yp안에서 발견되는 NIS map들을 정정하고 그 변화들을 slave server들로 push하기 위해 열거했음. 

   . 여러분은 NIS master 상의 user들을 위한 /etc/passwd와 모든 NIS user들을 위한 /etc/passwd.yp를 원할지도 모른다. 이런 경우는 다음과 같은 절차를 거치면 된다. 

       첫째  /var/yp/Makefile에서 $(DIR)/passwd를 $(DIR)/passwd.yp로 수정함
       둘째  /etc/rc.local의 yppasswdd상에서 /etc/passwd를 /etc/passwd.yp로 수정함 

   . 고속 transfer daemon을 가동시키기 위해 ypxfrd startup line들을 comment out 시킴

④ NIS database상에 포함된 ASCII file들을 수정함 

이런 File들은 passwd, hosts, ethers, group, aliases, netgroup, networks, netgroup, protocols, bootparams, services 임 passwd와 group File들에서 + entry들을 제거함 ( 공백 netgroup은 빈 netgroup map을 만듦)

⑤ database를 만듬 

     # mkdir /var/yp
     # cp /export/exec/proto.root.sunos.4.1.x/var/yp/Makefile /var/yp 
       (이 작업은 sun install과정에서 NIS master를 설정하지 않았을 시 /var/yp가 없기 때문임) 

     # cd /usr/etc/yp
     # ypinit -m  (여기서 m은 master server) 

          quit on non-fatal errors [y/n:] y
          next host to add : master /* mastername
          next host to add : slave  /* slavename-->만약 여러분이 어떤 server가 NIS slave
          next host to add : ^D                 server가 될지 안다면 여기서 이름을 입력함

⑥ fastboot를 사용하여 reboot함 모든 daemon들을 올바르게 가동시키기 위해서는 reboot하는 것이 쉽다.

24.4 NIS Slave Server 초기화

① domain name을 설정함
② /etc/defaultdomain file을 수정 혹은 생성 

    NIS domain name을 부가함

③ /etc/rc.local 화일을 수정함 

   . ypbind startup line들이 풀려져 있는가를 확인함

④ ypbind daemon을 가동시킴 

     # /usr/etc/ypbind

⑤ /usr/etc/yp directory로 변경 후 slave server mode상에서 ypinit를 가동하여 master로부터 database를 모은다. 

     # cd /usc/etc/yp
     # ypinit -s master  /* master 는 Master Server Name 

       quit on non-fatal errors [y/n:] y 

 (slave는 master처럼 물어보는 것이 없음. 바로 YP환경을 create함. master server상의 /var/yp/"domainname" 밑에 있는 DB File들을 자기 local의 /var/yp/"domainname"밑에 그대로 copy함.)

⑥ NIS server daemon을 reboot하여 가동시킴

위의 과정은 slave server가 master server install 동안에 언급이 되었을 경우에 사용된다.

24.5 NIS Administration

* master server만은 /etc/passwd에 user account 정보 모두 가지고 있음.
 
slave server의 /etc/passwd에는 일반 client처럼 최소한의 것이 있음.

* make

master server상에서만 수행 가능.
master server의 /var/yp/Makefile을 참조하여 수행하는데 이는 master server만 있음.

# cd /var/yp
# make : YP에서 관리하는 모든 db정보를 양자 비교하여 최신의 것으로 update시킴. 변경된 정보의 Update

* yppasswd

- master에서 slave로 passwd정보를 transfer함 

  ┌ 일반 사용자는 yppasswd
  └ root는        /bin/passwd 

  /usr/etc/rpc.passwdd는 NIS password daemon이다. 

이 daemon은 NIS master server에서만 수행이 되고 , NIS password change request들을 위해 봉사한다. 이것은 모든 slave server들이 password 수정되었을 때 그들의 변화된 database를 가지는 형태로 수행된다. 

yppasswd는 NIS password들을 변화시키는 명령어이다. 이 명령어는 마치 password처럼 실행되지만, local /etc/passwd file대신에 NIS master server안의 password를 다룬다. NIS client에 의한 yppasswd 명령어는 NIS master server상에서 수행하는 rpc.passwdd에 의뢰한다.

* ypxfrd

- transfer daemon
- master에서 running되며 master의 db정보를 slave에 전달해서 update 시킴

* ypserv

- master나 slave가 information db를 service함

* ypbind

- master, slave, client들 모두에 running됨.
- master나 slave에서 db information 가져오는 daemon
- master나 slave는 자기가 info 가지고 있어도 

  network에서 가져오도록 설계 --> 구현 용이

* client

- suninstall시 client에 대해서는 두 가지만 하면 된다.
- client 

  Domain Name : cs.postech

- client booting시 

  Starting NIS service 
  ypbind ......

- error: 

  "NIS server not responding for domain 'cs.postech' 
   Still trying ....." 

network가 죽어 master나 slave중 어느 것 하나 살아 있지 않아 service를 받지 못하는 경우 booting시 발생하는 error message.

* NIS에 의해 영향을 받는 File들

. /etc/passwd file은 NIS가 수행될 때 처음 국부적으로 참조된다. local passwd안의 data는 NIS database보다 우선권을 가진다.   local passwd file안의 entry들은 root와 어떤 다른 local user들을 위해 존재해야 한다.   /etc/passwd를 call하는 program들은 처음에 local password를 참조한 후 NIS database를 참조 한다.
. /etc/group file도 우선 참조된다. 역시 NIS database보다 우선권을 가진다.
. NIS 수행 시 /etc/hosts file은 booting시만 참조된다.

그것은 booting시만 참조되기 때문에 그 File은 local host name과 모든 machine들을 위한 entry를 가지고 있어야 하며, local loopback를 위한 entry는 localhost임. 

         127.0.0.1    localhost
         192.9.10.101 sparc

일단 host가 boot되면 host address를 분석할 때 NIS host database만이 참조된다.

. Mail aliases도 local machine /etc/aliases file을 먼저 점검한 후 NIS aliases database를 참조한다.
. NIS 수행 시 부가적인 mail aliases는 NIS server들 상의 mail.aliases map안에 위치한다.

local /etc/bootparams file은 동일한 NIS map이 참조되기 이전에 client의 boot 정보를 위해 참조된다.

* /etc/passwd

+::0:0::: --> 모든 NIS password database entry들은 이 host에서 합법적임.
                  이 항목은 /etc/passwd안에서 마지막에 존재해야 한다.
                  이 표시는 /etc/passwd를 call하는 program은 처음 여기 password file을 참조 할 것이다.
                  만약 user가 여기 passwd file에 없으면 NIS password database가 조사될 것임.
+ljs:     --> ljs는 이 host에서 합법적이며 여기의 password data는 NIS database안에 있음.
+ljs:::::/home/ljs: 
           --> ljs는 이 host에서 합법적이며,빠진 password항목은 NIS database안에 있다.
                 local password entry안에 나타난 data는 NIS password data를 무시한다.
                만약 NIS password database상에서 home directory가 /usr/ljs라면, login 후 ljs의 home directory는 /home/ljs가 됨.

* /etc/group

+source: --> NIS group database에서 정의된 source group은 이 host에서 합법적임.
+:       --> NIS group database에서 정의된 모든 group들은 이 host에서 합법적임.

* 관련 daemon

- ypserv : server process
- ypbind : binding process
- ypxfrd : map transfer daemon
- rpc.ypupdated : map entry들을 change하기 위한 server
- rpc.yppasswdd: NIS passwd file을 modify하기 위한 server
- in.named : option 사항

* Utility들

- ypcat : map에서 data를 list하기 위해 

   # ypcat hosts
   # ypcat passwd
   # ypcat -m hosts (hosts map을 service해 주는 master server가 어느 것인지)

- ypwhich : NIS server name을 list 

   # /usr/bin/ypwhich    --> NIS server가 누군지를 보여줌
   # /usr/bin/ypwhich -m --> 어떤 map들의 master가 어느 server machine인지를 보여줌
   # /usr/bin/ypwhich clientname --> 어떤 ypserver가 NIS client machine으로 service를 제공 하는지를 보여줌

- ypmatch : map값과 match시키기 위해서 

   # ypmatch key0 key1 map --> NIS map안에 있는 특정한 key들의 값을 보여줌

- ypinit : NIS database를 build함
- yppoll: server로부터 map의 order number를 얻기 위해
- yppush : master에서 slave로 data를 전달 

  # /usr/etc/yp/yppush --> NIS master server에서 수행하며 master NIS server에서 slave NIS server로 NIS map의 새로운 version을 copy함.

- ypset : 특정 server에 binding set 

   # /usr/etc/yp/ypset host --> 특정한 NIS server로 bind를 시도함

- ypxfr : master에서 slave에 data transfer
- makedbm : NIS map을 위한 dbm file을 create

* ypbind 와 ypserv

NIS clinet들은 binding process를 통해 NIS server로부터 정보를 얻는다. ypbind가 기억하는 정보를 binding이라 불린다.

binding은 NIS server의 internet address를 가진 domain name과 연루되어 있다. 이런 정보는 domainname.version filename을 사용하는 /var/yp/binding diretory안에 저장되어 있다.

binding process는 client request들에 의해 가동된다. binding이 broadcast에 의해 설정됨으로 모든 net상에서 적어도 하나의 ypserv process가 있어야 한다. 일단 domain이 특정한 ypbind에 의해 bind되면 같은 binding이 그 node상의 모든 client process에게 주어진다. binding과 rebinding들은 C Library Routine 에 의해 다루어진다. 만약 ypbind가 bind 되어야 할

ypserv에게 말할 수 없을 때, unbound된 상태로서 domain을 형성하고 client process에게 그 domain은 unbound 상태라고 말하고, 다시 한번 domain을 bind한다.

만약 file /var/yp/ypserv.log가 ypserv 구동 시 존재한다면, log information은 error 조건발생시 이 file에 저장한다. file /var/yp/binding/domainname.version은 binding process 가속화를 위해 만들어진다. 이런 file들은 주어진 domain을 위해 생성된 최종 성공한 binding을 저장 하고 , binding이 요청될 때 이 file들이 타당성을 위해 검사된 후 사용된다. 만약 /usr/etc/yp/ypset이 ypbind -ypset(option) 나오기 전에 사용된다면, 그 명령어는 다음과 같은 messages를 보이며 실패할 것이다.

Sorry, ypbind on host xx has rejected your request

. NIS client는 booting시 NIS binding daemon (usr/etc/ypbind)를 수행함
. ypbind는 NIS server를 bind하기 위해 request를 local area network로 broadcast함
. NIS server는 NIS server daemon (/usr/etc/ypserv)를 수행함. 이것은 request를 만드는 client로 binding함
. client에 의해 만들어진 모든 NIS lookup request들은 ypbind에 의해 server machine상의 ypserv로 보냄
. 만약 NIS server가 연속적인 binding후에도 반응하지 않는다면, ypbind는 다른 server로 bind 하기 broadcast mode로 돌아감
. /usr/etc/ypset (ypbind에게 특정한 domain으로 bind하라고 알려줌)은 NIS 문제들을 debugging 하는데 도움을 줌. ypset을 사용하기 전에, -ypset option을 가진 ypbind를 사용할 것.

* NIS Database를 Updating

. NIS master machine상에서 적당한 ASCII file를 변경한다.
. local map을 update하기위해 make 명령어를 실행시킨다. 이 작업은 update된 version을 NIS slave server들로 보낸다.
. 예를 들면, /etc/passwd file를 update한다. 

      # vi /etc/passwd file 를 수정하여 변경함
      # cd /var/yp
      # make

. make는 변화된 map들만 다시 만든다. 

변화들이 끝났을 때, make는 NIS slave server들의 map들을 update하기 위해 yppush 를 야기시킨다.

ex) network에 system attach 시키는 경우 

    - master server의 hosts file을 edit하고
    - master server에서 make를 수행하면 됨.

자동적으로 hosts.byname과 hosts.byaddr map을 update함 이 map들은 다른 server들로 전파되고 모든 client가 이를 사용할 수 있게 됨.

* slave server상에서 make하지 말 것

/var/yp 밑에 Makefile 있음. make 돌리면 default NIS map을 create하기 위해 makedbm에 줌

# makedbm -u group.byaddr하면 makedbm이 /etc의 화일들을 읽어서 NIS map set을 create함. map은 각 db file 단위로 보관하고 있음.

* NIS 환경에서 Diskless Client 초기화

NIS 환경에서 diskless client첨가를 위한 작업은 NIS없이 사용되는 과정과 유사하다. 그러나, /etc/host 와 /etc/ethers정보는 중심위치에 저장되기 때문에 우선 NIS master server상에서 이런 data를 입력할 필요가 있다. 그때 NIS map들을 다시 만든다. 그래서 diskless client server는 그런 정보를 얻을 수 있을 것이다.

만약 그 client를 위한 /etc/ethers와 /etc/hosts정보를 얻지 못한다면 add_client 수행 시 실패할 것이다.

. NIS master server로 client 정보를 첨가시킨다. 

   /etc/hosts   
   /etc/ethers

. NIS map들을 다시만들어 push시킨다.
. client의 server상에서 add_client 를 수행시킨다.
. NIS master server상에서 bootparams를 다시 만들어 push시킨다.
. diskless client의 server에서, client의 /etc directory안에 있는 entry들을 확인한다.
. directory들을 /export/root/client/etc로 바꾼다. 

  hosts 화일이 정확한지를 확인한다.
  defaultdomain안의 domain name을 설정한다.
  /etc/rc.local에서 ypbind startup line들이 commentout 되어 있는지를 확인한다.

. diskless client를 boot시킨다.

* Master NIS Server Database에 Slave Server 첨가

slave server가 현존 NIS domain에 부가될 때, NIS master는 첫째 new slave에 대해 알아야 한다. 만약 그렇지 못하다면, master는 모든 다른 NIS server들과 더불어 sync상태에서 new slave를 유지할 수가 없다.

그래서 new slave server의 첨가는 다음과 같이 행해져야 한다.

1) ypinit -m 과정을 사용하여 NIS master를 다시 초기화 함 

    mastername# cd /usr/etc/yp
    mastername# ypinit -m

2) 새로운 slave의 이름을 master가 아는 NIS slave들의 list(NIS domain)로 등록함
3) 다른 slave server들 처럼 같은 방법으로 new slave server를 초기화함

* Sync상에서 Slave Server들 보존

최근의 slave server map들을 유지하기 위해 /usr/etc/yp/ypxfr 명령어가 slave server들에서 수행된다. 어떤 map들을 전달하기 위해 이 명령어를 이용하는 shell script들이 존재한다.  (예 : ypxfr_1perday , ypxfr_1perhour , ypxfr_2perday) site상황에 맞추어 적당하게 script들을 수정해라. 이런 script 들은 /var/spool/cron/crontab/root entry에 의해 항상 수행된다. ypxfr의 transfer 시도와 결과는 ypxfr.log라는 log file안에 나타난다.

다음과 같은 명령어를 사용하여 log file를 만든다. 

      # touch /var/yp/ypxfr.log

logging을 없애기 위해선 단순히 ypxfr.log file을 제거하면 된다.

. master에서 slave로 map을 전달하기 위해선 slave server상에서 다음과 같은 명령을 사용해야 한다. 

      # /usr/etc/yp/ypxfr desiredmap

. /usr/etc/yp/ypxfr_1perday는 다음 map들을 변화시킨다. 

     group , protocols , networks , services , ypservers

. /usr/etc/yp/ypxfr_2perday는 역시 다음 map들을 변화시킨다. 

     hosts , ethers , netgroup , mail aliases

. /usr/etc/yp/ypxfr_1perhour 다음 map들을 변화시킨다. 

     passwd

. slave server들로부터 이런 script들을 수행한다.

* OS install한 상태에서 NIS setting하는 방법

1) master server 

   - /etc/defaultdomain에 domainname을 등록함
   - /var/yp에 가서 

     # /usr/etc/yp/ypinit -m (만약 error 발생하면, /usr/lib/NIS.Makefile을 copy하여 다시 수행) 

   - # ypserv
   - /etc/rc.local의 ypxfrd를 열어줌.
   - # sh -x /etc/rc.local or reboot

2) slave server 

   - /etc/defaultdomain에 domainname을 등록함
   - # ypbind
   - # /usr/etc/yp/ypinit -s "master_server" 
     (ypinit 수행 전에 master server의 ypxfrd가 수행되고 있는지 확인)

3) client 

   - /etc/defaultdomain에 domainname을 등록함
   - # sh -x /etc/rc.local or # ypbind

* NIS에 의해 교체되는 File들

이런 File들은 NIS 수행 시 local machine상에서 결코 참조되지는 않는다.
비록 원하는 정보가 local file들에 존재한다 하더라도 이런 File들에 포함된 정보를 조사하기 위해선 NIS database만 참조된다.

. /etc/ethers --> local domain상의 모든 machine들의 ethernet address와 host name을 포함함.
. /etc/netgroup --> machine들의 network group들을 나타냄.
. /etc/netmasks --> IP stanadard subneting를 실행키위한 default netmask를 포함함.
. /etc/networks --> 여러분의 internetwork상의 모든 network들의 이름과 번호를 나타냄.
. /etc/protocols --> 알려진 IP protocol 이름들과 번호들을 포함하고 있음.
. /etc/services --> 그 system에 유용한 각 TCP/IP network service를 위한 entry를 포함함.

24.6 NIS 장애유형 / 유의할 점

* 현재 NIS가 running중인지 보려면
# ps ax | grep ypbind --> 있으면 running중임.

* slave server가 2개 이상인 경우 어느 slave server가 update하려고 계속 try하여 hangup됨
--> 이 경우 한 후 ypinit를 다시 수행하여 slave를 다시 지정해야 함.

* slave는 make 못 돌린다. 즉 db update는 못하고 단지 제공하는 기능만 가짐.

* master나 slave server중 어느 것이든 먼저 service해 줄 수 있는 것이 service 제공해 줌. yp client의 요구를 먼저 catch한 것이 service를 함. 그러므로 master server가 down 되더라도 slave가 있으면 service 가능한 것.

* domain name이 noname이면 YP가 안됨 /etc/defaultdomain에 domainname이 있어야 한다.

저작자 표시 비영리 변경 금지
Creative Commons License
Posted by BLUEDAY™